o
    uJAf                     @  sz   d dl mZ ddlmZmZmZ ddlmZmZm	Z	 ddl
mZ d dlmZ d dlZejr3dd	lmZ G d
d deZdS )    )annotations   )DependencyTypeNameExternalDependencyDependencyException   )MesonExceptionVersionstringlistify)mlog)PathN)Environmentc                      sn   e Zd ZU dZded< d!d" fddZd#ddZd$ddZd%ddZd&ddZ	d'ddZ
ed'dd Z  ZS )(ExtraFrameworkDependencyNzT.Optional[T.List[str]]system_framework_pathsnamestrenv'Environment'kwargsT.Dict[str, T.Any]languageT.Optional[str]returnNonec              
     s   t |dg }t jtd|||d || _d | _| js!td| j	d u rNz
| j
| j| _	W n tyM } zdt|v rHd| _W Y d }~d S  d }~ww | || d S )NpathsZextraframeworks)r   z!No C-like compilers are availablez	non-clangF)r
   getsuper__init__r   r   framework_pathclib_compilerr   r   find_framework_pathsr   r   r   is_founddetect)selfr   r   r   r   r   e	__class__ F/usr/lib/python3.10/site-packages/mesonbuild/dependencies/framework.pyr      s"   
z!ExtraFrameworkDependency.__init__r   T.List[str]c                 C  s   |s| j }|D ]R}td| d|  | ||}|d u rq|| j v }| j|| j|g|}|d u r4q|| _| | _	d| j	 g| _
| |}|rT|  j
d| g7  _
d| _ d S d S )NzLooking for framework z in z-Fz
-idirafterT)r   r   debug_get_framework_pathr   find_frameworkr   	link_argsas_posixr   compile_args_get_framework_include_pathr!   )r#   r   r   pr   allow_systemargsincdirr'   r'   r(   r"   0   s(   


zExtraFrameworkDependency.detectpathT.Optional[Path]c                 C  sF   t |}| }|dD ]}||jddd  kr |  S qd S )Nz*.framework/.r   r   )r   lowerglobr   rsplit)r#   r5   r   r1   lnamedr'   r'   r(   r+   S   s   z,ExtraFrameworkDependency._get_framework_pathr   c                 C  sX   g }| dD ]}|j dkrq|t|j qt|dkr"dS dt|d jS )Nz
Versions/*currentr   HeaderszVersions/{}/Headers)	r9   r   r8   appendr	   lenformatsorted_s)r#   r5   versionseachr'   r'   r(   _get_framework_latest_version[   s   z6ExtraFrameworkDependency._get_framework_latest_versionc                 C  s:   dd|  |f}|D ]}|| }| r|   S q
d S )Nr>   zVersions/Current/Headers)rG   is_dirr.   )r#   r5   trialsrF   trialr'   r'   r(   r0   g   s   z4ExtraFrameworkDependency._get_framework_include_pathc                 C  s
   | j pdS )N )r   )r#   r'   r'   r(   log_infot   s   
z!ExtraFrameworkDependency.log_infoc                   C  s   dS )N	frameworkr'   r'   r'   r'   r(   	log_triedw   s   z"ExtraFrameworkDependency.log_tried)N)
r   r   r   r   r   r   r   r   r   r   )r   r   r   r)   r   r   )r5   r   r   r   r   r6   )r5   r   r   r   )r5   r   r   r   )r   r   )__name__
__module____qualname__r   __annotations__r   r"   r+   rG   r0   rL   staticmethodrN   __classcell__r'   r'   r%   r(   r      s   
 

#


r   )
__future__r   baser   r   r   mesonlibr   r	   r
   rK   r   pathlibr   typingTTYPE_CHECKINGenvironmentr   r   r'   r'   r'   r(   <module>   s   