o
    eU                     @  s   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m	Z	 ddl
mZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ d dlZejr[ddlmZ ddlmZ ddlmZ G dd deZG dd deZeejej hd ddZ!e!ed< dS )!    )annotationsN)Path   )
OrderedSet	join_args   )DependencyExceptionDependencyMethods)ConfigToolDependency)packages)PkgConfigDependencyPkgConfigInterface)factory_methods)DependencyGenerator)Environment)MachineChoicec                      s$   e Zd ZdZdd fddZ  ZS )HDF5PkgConfigDependencyz/Handle brokenness in the HDF5 pkg-config files.Nnamestrenvironment'Environment'kwargsT.Dict[str, T.Any]languageT.Optional[str]returnNonec              	     s|  |pd}|dvrt d| dt |||| | jsd S g }| jD ]+}|drN| jr/dnd}t|dd  |  rN|	dt
t|dd  |   q#|  j|7  _g }|  D ]\}	t|	}
|
 rg }|d	krs|d
dg7 }n
|dkr}|g d7 }|dg7 }d|
jddd  }|D ]}|
j|
jddd | |  }| r|	t
| q|	|	 q\|	|	 q\|| _d S )Nc>   fortrancppr   	Language  is not supported with HDF5.-Istaticsharedr   r   Z_hl_cppZ_cppr   )Z_hl_fortranZ
hl_fortranZ_fortranZ_hl.r   r   )r   super__init__is_foundcompile_args
startswithr#   r   is_dirappendr   Zget_link_argsis_filer   splitparent	link_args)selfr   r   r   r   Znewincargstemr0   ZlargZlpathZhlsuffixhZhlfn	__class__ A/usr/lib/python3.10/site-packages/mesonbuild/dependencies/hdf5.pyr'   )   sB   

"
 
z HDF5PkgConfigDependency.__init__N
r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__r'   __classcell__r8   r8   r6   r9   r   %   s    r   c                      s2   e Zd ZdZdZdd fddZdddZ  ZS )HDF5ConfigToolDependencyz(Wrapper around hdf5 binary config tools.z-showconfigNr   r   r   r   r   r   r   r   r   r   c              
     s  |pd}|dvrt d| d|dkrd}d}ddg}n|d	kr*d
}d
}ddg}n|dkr7d}d}ddg}nt d| |}| }	||	d< |jj| | }
z3t|
 tjd| < t|
	 tjd| d< t
 |||	| W tjd| = tjd| d= ntjd| = tjd| d= w | jsd S | ddgddd  }|| d| jrdndgddd  7 }|D ]*}|ds|dkr| j| q|dr| j| qt| r| j| qd S )Nr   >   r   r   r   r    r!   CCCZh5ccZh5pccr   CXXzh5c++zh5pc++r   ZFCFZh5fcZh5pfczHow did you get here?toolsZHDF5_ZLINKERz-showz-cargsr   z-noshlibz-shlib)r"   z-fz-Dz-pthread)z-Lz-lz-Wl)r   Zget_for_machine_from_kwargscopyZcoredata	compilersr   Zget_exelistosenvironZget_linker_exelistr&   r'   r(   Zget_config_valuer#   r*   r)   r,   r0   r   r-   )r1   r   r   r   r   ZcenvZlenvrF   for_machinenkwargscompilerrG   r2   r6   r8   r9   r'   \   sR   



&
z!HDF5ConfigToolDependency.__init__verc                 C  s   t d|}|dS )Nz \s*HDF5 Version: (\d+\.\d+\.\d+)r   )researchgroup)r1   rO   vr8   r8   r9   _sanitize_version   s   
z*HDF5ConfigToolDependency._sanitize_versionr:   r;   )rO   r   r   r   )r<   r=   r>   r?   Zversion_argr'   rT   r@   r8   r8   r6   r9   rA   V   s
    4rA   envr   rL   'MachineChoice'r   r   methodsT.List[DependencyMethods]r   T.List['DependencyGenerator']c           	   
   C  s   | d}g }tj|v r>tddg}tj| |dd}|r-| D ]}|dr,|| q |D ]}|	t
t|| || q/tj|v rO|	t
td| || |S )Nr   hdf5zhdf5-serialF)Zsilent)getr	   	PKGCONFIGr   r   instanceZlist_allr*   addr,   	functoolspartialr   CONFIG_TOOLrA   )	rU   rL   r   rW   r   
candidatesZpkgconfig_filespkgmodr8   r8   r9   hdf5_factory   s   




re   rZ   )
rU   r   rL   rV   r   r   rW   rX   r   rY   )"
__future__r   r_   rJ   rP   pathlibr   Zmesonlibr   r   baser   r	   Z
configtoolr
   detectr   Z	pkgconfigr   r   factoryr   typingTTYPE_CHECKINGr   r   r   r   r   rA   r\   ra   re   r8   r8   r8   r9   <module>   s*   1?