o
    ej                     @  s   d dl mZ d dlZd dlZddlmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ejrEdd	lmZ d
dlmZ d
dlmZ eejejejhdddZeed< G dd deZdS )    )annotationsN   )DependencyMethodsdetect_compilerSystemDependency)CMakeDependency)packages)PkgConfigDependency)factory_methods)DependencyGenerator   )Environment)MachineChoiceenv'Environment'for_machine'MachineChoice'kwargsT.Dict[str, T.Any]methodsT.List[DependencyMethods]returnT.List['DependencyGenerator']c              
   C  s   t d| |d }g }|dkr@tj|v r&dD ]}|tjt|| |dd qtj|v r@d|vr3d|d< |tjt	d| |dd tj
|v rO|tt| | |S )	Ncoarrayfortrangcc)zcaf-openmpiZcaflanguagemoduleszOpenCoarrays::caf_mpiZOpenCoarrays)r   get_idr   	PKGCONFIGappend	functoolspartialr	   CMAKEr   SYSTEMCoarrayDependency)r   r   r   r   Zfcid
candidatespkg r)   E/usr/lib/python3.10/site-packages/mesonbuild/dependencies/coarrays.pycoarray_factory   s"   





r+   r   c                      s"   e Zd ZdZd
 fdd	Z  ZS )r&   a(  
    Coarrays are a Fortran 2008 feature.

    Coarrays are sometimes implemented via external library (GCC+OpenCoarrays),
    while other compilers just build in support (Cray, IBM, Intel, NAG).
    Coarrays may be thought of as a high-level language abstraction of
    low-level MPI calls.
    environmentr   r   r   r   Nonec                   s   t  jd||dd d|d< d|d< |   }|dkr(d	g| _d
| _d| _d S |dkr9d| _dg| _| j| _d S |dkrFd| _dg| _d S |dkrOd| _d S d S )Nr   r   r   FrequiredTZsilentr   z-fcoarray=singlezsingle image (fallback)intelz-coarray=sharedzintel-clz/Qcoarray:sharedZnagfor)super__init__Zget_compilerr   Zcompile_argsversionZis_foundZ	link_args)selfr,   r   Zcid	__class__r)   r*   r1   D   s$   

zCoarrayDependency.__init__)r,   r   r   r   r   r-   )__name__
__module____qualname____doc__r1   __classcell__r)   r)   r4   r*   r&   ;   s    r&   )
r   r   r   r   r   r   r   r   r   r   )
__future__r   r"   typingTbaser   r   r   Zcmaker   detectr   Z	pkgconfigr	   factoryr
   TYPE_CHECKINGr   r,   r   Zmesonlibr   r    r$   r%   r+   r&   r)   r)   r)   r*   <module>   s    