
    e	#                       d dl mZ d dl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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
j4                  e
j6                  e
j8                  h      	 	 	 	 	 	 	 	 dd       Zeed<    G d de      Z G d de      Z G d de      Z  G d de      Z!y)    )annotationsN   )detect_cpu_family   )DependencyMethodsdetect_compilerSystemDependency)ConfigToolDependency)packages)factory_methods)PkgConfigDependency)DependencyGenerator)Environment)MachineChoicec           	        |j                  dd      }|dvrg S g }t        d| ||      }|sg S |j                         dv }t        j                  |v rH|sFd }|dk(  rd}n|dk(  rd}n|d	k(  rd
}|j                  t        j                  t        || ||             t        j                  |v r|j                         }	|r| j                  |   j                         r
d|	d<   d|	d<   |dk(  r"t        j                  j                  d      dg}
nM|dk(  r"t        j                  j                  d      dg}
n&|d	k(  r!t        j                  j                  d      dg}
t        }n|dk(  r"t        j                  j                  d      dg}
nm|dk(  r$t        j                  j                  d      dddg}
nD|d	k(  r?dD cg c]!  }t        j                  j                  |      # }
}|
j!                  g d       t"        }
D cg c]  }|s|	 }
}|
sJ |
|	d<   |j                  t        j                  ||
d   | |	|             t        j$                  |v r-|j                  t        j                  t&        d | ||             |S c c}w c c}w )!Nlanguagec>   r   cppfortranmpi>   intelintel-clzompi-cr   zompi-cxxr   z	ompi-fortr   -vversion_arg   returncode_valueI_MPI_CCmpiicc	I_MPI_CXXmpiicpc	I_MPI_F90mpiifortMPICCmpiccMPICXXzmpic++mpicxxmpiCC)MPIFCMPIF90MPIF77)mpifortmpif90mpif77toolsr   msmpi)getr   get_idr   	PKGCONFIGappend	functoolspartialr   CONFIG_TOOLcopymachines
is_windowsosenvironIntelMPIConfigToolDependencyextendOpenMPIConfigToolDependencySYSTEMMSMPIDependency)envfor_machinekwargsmethodsr   
candidatescompilercompiler_is_intelpkg_namenwargs
tool_namesclsets                 =/usr/lib/python3/dist-packages/mesonbuild/dependencies/mpi.pympi_factoryrP   "   s}   
 zz*c*H..	02Juc;AH	 )-BB ""g-6Gs?H!H""H)++3K 	L $$/||K(335(,}%-.)*3 jjnnZ8(C
U" jjnn[99E
Y& jjnn[9:F
0LC
 3 jjnnW5w?
U" jjnnX6(GT
Y&9VWAbjjnnQ/W
W!!"AB-C!+1Aqa1
1z$w)++AVh@ 	A 7*)++Wc6HF 	G ! X
 2s   9&J>JJr   c                  $    e Zd ZddZddZddZy)_MPIConfigToolDependencyc                   g }d}| j                   dk(  rC| j                  j                  j                  | j                     d   }||j                         z  }d}|D ]q  }|j                  d|z         s,|dk(  s'|j                  d      r/|dk7  r*|j                  d      s|j                  |       ||v sYd	}\|s_d}|j                  |       s |S )
r
        MPI wrappers return a bunch of garbage args.
        Drop -O2 and everything that is not needed.
        )-Ir   F)z-Dz-f-pthread-W-Wall-WerrorT)r   rB   coredata	compilersrC   get_module_incdir_args
startswithr4   )selfargsresult
multi_argsfcinclude_nextfs          rO   _filter_compile_argsz-_MPIConfigToolDependency._filter_compile_argsn   s    
 (0
==I%"",,T-=-=>yIB"3355J 		!A||L:56!z/T*qG|ALLQZD[a 
?#'L$a 		!     c                    g }d}|D ]B  }| j                  |      r|j                  |       |dv s*d}-|s0d}|j                  |       D |S )rT   F>   -L-XlinkerT)_is_link_argr4   )r^   r_   r`   rc   rd   s        rO   _filter_link_argsz*_MPIConfigToolDependency._filter_link_args   s`    
  	!A  #a **#'L$a 	! rf   c                   | j                   j                  dk(  r+|dk(  xs$ |j                  d      xs |j                  d      S |j                  d      xs3 |dk(  xs, |j                  d      xr |dk7  xr |j                  d	       S )
Nr   z/linkz/LIBPATHz.lib)rh   -lri   rV   rW   rX   rY   )clib_compileridr]   endswith)r^   rd   s     rO   rj   z%_MPIConfigToolDependency._is_link_arg   s      J.<Q1<<
#;Qqzz&?QQLL!9: ZOZ\\$'XALXiAX=X[rf   N)r_   T.List[str]returnrq   )rd   strrr   bool)__name__
__module____qualname__re   rk   rj    rf   rO   rR   rR   l   s    0"[rf   rR   c                  6     e Zd ZdZdZ	 d	 d fdZddZ xZS )r=   z*Wrapper around Intel's mpiicc and friends.r   c                    t         |   ||||       | j                  sy | j                  dgd      }| j	                  |      | _        | j                  |      | _        y )Nr   z-showzlink and compile argssuper__init__is_foundget_config_valuere   compile_argsrk   	link_args)r^   namerB   rD   r   r_   	__class__s         rO   r}   z%IntelMPIConfigToolDependency.__init__   s]    sFX>}}$$gY0GH 55d;//5rf   c                    t        j                  d|      }|r0dj                  |j                  d      |j                  d            S |S )Nz(\d{4}) Update (\d)z{}.{}r   r   )researchformatgroupr^   outvs      rO   _sanitize_versionz.IntelMPIConfigToolDependency._sanitize_version   s<    II,c2>>!''!*aggaj99
rf   Nr   rs   rB   'Environment'rD   T.Dict[str, T.Any]r   zT.Optional[str]r   rs   rr   rs   ru   rv   rw   __doc__r   r}   r   __classcell__r   s   @rO   r=   r=      s"    4K .26*6rf   r=   c                  6     e Zd ZdZdZ	 d	 d fdZddZ xZS )r?   z)Wrapper around OpenMPI mpicc and friends.z--showme:versionc                    t         |   ||||       | j                  sy | j                  dgd      }| j	                  |      | _        | j                  dgd      }| j                  |      | _        y )Nr   z--showme:compiler   z--showme:linkr   r{   )r^   r   rB   rD   r   c_argsl_argsr   s          rO   r}   z$OpenMPIConfigToolDependency.__init__   ss    sFX>}}&&(:';^L 55f=&&'8+F//7rf   c                X    t        j                  d|      }|r|j                  d      S |S )Nz\d+.\d+.\d+r   )r   r   r   r   s      rO   r   z-OpenMPIConfigToolDependency._sanitize_version   s(    IInc*771:
rf   r   r   r   r   r   s   @rO   r?   r?      s"    3$K .2
8*
8rf   r?   c                  *     e Zd ZdZ	 d	 d fdZ xZS )rA   zThe Microsoft MPI.c                T   t         	|   ||||       |dvrd| _        y | j                  j                  | j
                     j                         sy t        j                  j                  d      }t        | j                  j                  j                  j                        }d }|dk(  r"t        j                  j                  d      }d}n&|dk(  r!t        j                  j                  d      }d	}||d| _        y d
| _        dt        j                  j                  |d      z   g| _        d|z   dt        j                  j                  |      z   g| _        | j$                  dk(  r=| j                   j'                  dt        j                  j                  |d      z          y y )Nr   >   Nr   r   F	MSMPI_INCx86MSMPI_LIB32x86_64MSMPI_LIB64x64Trm   r0   rU   r   msmpifec)r|   r}   r~   rB   r9   rC   r:   r;   r<   r1   r   rZ   r[   hostpathjoinr   r   r   r4   )
r^   r   rB   rD   r   incdirarchlibdirpostr   s
            rO   r}   zMSMPIDependency.__init__   sX   sFX>11!DMxx  !1!12==?, !2!2!<!<!A!AB5=ZZ^^M2FDXZZ^^M2FD>V^!DMfg!>>?!F]D277<<3M,MN==I%NN!!$fj)I"IJ &rf   r   r   )ru   rv   rw   r   r}   r   r   s   @rO   rA   rA      s      .2K*K Krf   rA   )
rB   r   rC   z'MachineChoice'rD   r   rE   zT.List[DependencyMethods]rr   zT.List['DependencyGenerator'])"
__future__r   r5   typingTr;   r   environmentr   baser   r   r	   
configtoolr
   detectr   factoryr   	pkgconfigr   TYPE_CHECKINGr   r   mesonlibr   r3   r7   r@   rP   rR   r=   r?   rA   rx   rf   rO   <module>r      s    #   	 	 + F F ,  $ *??,)( #--/@/L/LN_NfNfghD,D*D 3D 8UD iDL 1[3 1[h#; .": 2!K& !Krf   