
    e                    .   d dl mZ 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 ddlmZ dd	lmZ dd
lmZ ddlmZ ej(                  rddlmZ ddlmZ ddlmZ  eej2                  ej4                  h      	 	 	 	 	 	 dd       Zeed<    G d de      Zy)    )annotations)PathN   )	OptionKey   )DependencyMethods)CMakeDependency)packages)PkgConfigDependency)factory_methods)Environment)MachineChoice)DependencyGeneratorc           	        g }t         j                  |v r|j                  d| j                  j	                  t        d                  }|rdnd}|j                  t        j                  t        || |             dD ]-  }|j                  t        j                  t        || |             / t         j                  |v r+|j                  t        j                  t        d| |             |S )Nstaticprefer_staticzmkl-static-lp64-iompzmkl-dynamic-lp64-iomp)zscalapack-openmpi	scalapack	Scalapack)r   	PKGCONFIGgetcoredata
get_optionr   append	functoolspartialMKLPkgConfigDependencyr   CMAKEr	   )envfor_machinekwargsmethods
candidates
static_optmklpkgs           C/usr/lib/python3/dist-packages/mesonbuild/dependencies/scalapack.pyscalapack_factoryr'   "   s     13J""g-ZZ#,,*A*A)OB\*]^
(2$8O)++"Cf6 	7 6 	8Ci//#S#v7 8	8 '))++[#v7 	8     r   c                  >     e Zd ZdZ	 d	 d fdZd fdZddZ xZS )r   zPkgConfigDependency for Intel MKL.

    MKL's pkg-config is pretty much borked in every way. We need to apply a
    bunch of fixups to make it work correctly.
    c                   t         j                  j                  d      }|rt        |      j	                         nd | _        t        |   ||||       | j
                  r@|j                  | j                     j                         r | j                  j                  dk(  rd| _        | j                  sy | j                  dk7  sJ d       | j                  dk(  r~| j                  dd	      }|sL| j
                  r@	 | j
                  j!                         j#                  d
      d   j#                  dd      d   }|rt'        |t(              sJ || _        y y y # t$        $ r Y )w xY w)NMKLROOT)languagegccF z0This should not happen if we didn't return aboveunknownVersion)	pkgconfigdefault_valuecompilers_and_libraries_r   /r   )osenvironr   r   resolve _MKLPkgConfigDependency__mklrootsuper__init__machinesr   
is_windowsclib_compileridis_foundversionget_variableas_posixsplit
IndexError
isinstancestr)selfnamer   r    r,   _mv	__class__s          r&   r:   zMKLPkgConfigDependency.__init__C   sK   ZZ^^I&/1b))+t
 	sFX> 3<<0@0@#A#L#L#N'+'9'9'<'<'E!DM }}||r!V#VV!<<9$ !!IR!HA//19:1>sAq*  !!S)))   % " s   =?E 	E&%E&c                &   t         |           | j                  j                  | j                     j                         rd}n| j                  rd}nd}| j                  dz  }| j                  j                  dk(  rt        | j                        D ]n  \  }}t        j                  j                  |      \  }}d|v s-|j                  dd      }d	t        j                  j!                  ||      z   | j                  |<   p d
}t        | j                        D ]#  \  }}|j#                  d      r|dz   }|dkD  s# n | j                  j                  | j                     j                         s| j                  rZ| j                  j%                  |t'        |d|z   z               | j                  j%                  |dz   t'        |d|z   z               y | j                  j%                  |d       | j                  j%                  |dz   d       y )Nz.libz.ar.   zlib/intel64r-   mkl_intel_lp64intelgfr4   r   )z-Lz-Wlr      mkl_scalapack_lp64mkl_blacs_intelmpi_lp64z-lmkl_scalapack_lp64z-lmkl_blacs_intelmpi_lp64)r9   	_set_libsr   r;   r   r<   r   r8   r=   r>   	enumerate	link_argsr5   pathrC   replacejoin
startswithinsertrF   )	rG   suffixlibdiriadirnamebasenamejrK   s	           r&   rS   z MKLPkgConfigDependency._set_libsl   s   88T--.99;F[[FF-/  E)!$..1 N1$&GGMM!$4!#x/'//>H(+bggll7H.M(MDNN1%N dnn- 	DAq||M*EQ		
 88T--.99;t{{NN!!3v!5!>?@ NN!!As6%>%GHI NN!!!%;<NN!!!a%)DEr(   c                    d}| j                   dk(  rd}| j                  j                  | j                  |d| j                  j                         ff      }| j                  |      | _        y )NFfortranTprefix)define_variable)r,   r1   cflagsrH   r8   rB   _convert_mingw_pathscompile_args)rG   allow_systemrf   s      r&   
_set_cargsz!MKLPkgConfigDependency._set_cargs   se    ==I%  L&&tyy,RZ\`\j\j\s\s\uQvPx&y 55f=r(   )N)rH   rF   r   'Environment'r    T.Dict[str, T.Any]r,   zT.Optional[str])returnNone)__name__
__module____qualname____doc__r:   rS   rj   __classcell__)rK   s   @r&   r   r   ;   s'     .2'!*'!R#FJ>r(   r   )
r   rk   r   z'MachineChoice'r    rl   r!   zT.List[DependencyMethods]rm   zT.List['DependencyGenerator'])
__future__r   pathlibr   r   r5   typingTmesonlibr   baser   cmaker	   detectr
   r1   r   factoryr   TYPE_CHECKINGenvironmentr   r   r   r   r   r'   r    r(   r&   <module>r      s    #   	    # "  * $??)(, #--/@/F/FGH08=Z I* * ]>0 ]>r(   