
    -Ph#                    T   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
 ddlmZ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j        ej        ej        h          dd            Zeed<    G d de          Z  G d de          Z!dS )     )annotationsN   )detect_cpu_family)
Popen_safe   )DependencyExceptionDependencyMethodsdetect_compilerSystemDependency)ConfigToolDependency)packages)factory_methods)PkgConfigDependency)DependencyGenerator)Environment)MachineChoiceenv'Environment'for_machine'MachineChoice'kwargsT.Dict[str, T.Any]methodsT.List[DependencyMethods]returnT.List['DependencyGenerator']c           	        |                     d          }|d}|dvrg S g }t          d| ||          }|sg S |                                dv }t          j        |v rV|                                }|dk    rdg}	n|dk    rdg}	n
|d	k    rg d
}	d |	D             }
d |
D             }
|rw| j        |                                         rd|d<   |dk    r|
                    d           n7|dk    r|
                    d           n|d	k    r|
                    d           |dk    r|
                    d           n;|dk    r|
	                    g d           n|d	k    r|
	                    g d           |
|d<   |                    t          j        t          |
d         | ||                     t          j        |v rP| j        |                                         r1|                    t          j        t          d| ||                     t          j        |v rO|sMd }|dk    rd}n|dk    rd}n|d	k    rd}|                    t          j        t           || ||                     |S )Nlanguagec>   r   cppfortranmpi>   intelintel-clMPICCr    MPICXXr!   )MPIFCMPIF90MPIF77c                L    g | ]!}t           j                            |          "S  )osenvironget).0env_names     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/dependencies/mpi.py
<listcomp>zmpi_factory.<locals>.<listcomp>8   s&    HHH8bjnnX..HHH    c                    g | ]}||S r+   r+   )r/   ts     r1   r2   zmpi_factory.<locals>.<listcomp>9   s    111Aq1a111r3      returncode_valuempiiccmpiicpcmpiifortmpicc)zmpic++mpicxxmpiCC)mpifortmpif90mpif77toolsr   r   msmpizompi-czompi-cxxz	ompi-fort)r.   r
   get_idr	   CONFIG_TOOLcopymachines
is_windowsappendextend	functoolspartialMPIConfigToolDependencySYSTEMMSMPIDependency	PKGCONFIGr   )r   r   r   r   r   
candidatescompilercompiler_is_intelnwargsenv_vars
tool_namespkg_names               r1   mpi_factoryrX      s,   
 zz*%%H...	02Juc;AAH 	 ))-BB$//
 s??yHH zHH""444HHHxHHH
11111
 		.|K(3355 /-.)*3!!(++++U""!!),,,,Y&&!!*--- s??g&&&&;;;<<<<""===>>>$w)+#Z]C(T T T 	U 	U 	U 7**s|K/H/S/S/U/U*)+Wc6HF F F 	G 	G 	G
 "g--6G-s??HH!HH"""H)+3K K K 	L 	L 	L r3   r"   c                  H     e Zd ZdZ	 dd fdZddZddZddZddZ xZ	S )rM   z1Wrapper around mpicc, Intel's mpiicc and friends.Nnamestrr   r   r   r   r   T.Optional[str]c                v   t                                          ||||           | j        sd S dD ]I\  }}	 |                     |gd          }||                     |gd          n|} n# t          $ r Y Fw xY wd| _        d S |                     |          | _        |                     |          | _        d S )NrB   ))z--showme:compilez--showme:link)z-compile_infoz
-link_info)z-showNcompile_args	link_argsF)	super__init__is_foundget_config_valuer   _filter_compile_argsr^   _filter_link_argsr_   )
selfrZ   r   r   r   complinkc_argsl_args	__class__s
            r1   ra   z MPIConfigToolDependency.__init__k   s    sFX>>>} 	F t 
	 
	JD$..v~FFGKGW..v{CCC]c  '   
 "DMF 55f==//77s   2A,,
A98A9argsT.List[str]r   c                   g }d}| j         dk    r9| j        j        j        | j                 d         }||                                z  }d}|D ]}|                    d|z             s6|dk    s0|                    d          r7|dk    r1|                    d          s|                    |           ||v rd	}l|rd}|                    |           |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   r   coredata	compilersr   get_module_incdir_args
startswithrI   )rf   rl   result
multi_argsfcinclude_nextfs          r1   rd   z,MPIConfigToolDependency._filter_compile_args   s    
 (0
=I%%",T-=>yIB"33555J 		! 		!A||L:566 !!z//T** ;J/0G||ALLQZD[D[|a   
??#'L !$a   r3   c                    g }d}|D ]L}|                      |          r|                    |           |dv rd}3|rd}|                    |           M|S )ro   F>   -L-XlinkerT)_is_link_argrI   )rf   rl   ry   r|   r}   s        r1   re   z)MPIConfigToolDependency._filter_link_args   s|    
  	! 	!A  ## !a   ***#'L !$a   r3   r}   boolc                   | j         j        dk    r0|dk    p)|                    d          p|                    d          S |                    d          p6|dk    p0|                    d          o|dk    o|                    d	           S )
Nr$   z/linkz/LIBPATHz.lib)r   -lr   rq   rr   rs   rt   )clib_compileridrx   endswith)rf   r}   s     r1   r   z$MPIConfigToolDependency._is_link_arg   s     J..<Q1<<
#;#;Qqzz&?Q?QQLL!9:: ZOZ\\$''XALXiAXAX=X[r3   tool
returncodeint!T.Tuple[bool, T.Union[str, None]]c                   t          |dgz             d d         \  }}|j        |k    }|r3t          j        d|          }|r|                    d          }nd }||fS t          |dgz             d d         \  }}|j        |k    }|                    dd          d         }t          j        d|          }|r||                    d          fS t          j        d	|          }|r||                    d          fS t          j        d
|          }|r/||                    d           d|                    d           fS |d fS )Nz--showme:versionr   z\d+.\d+.\d+r   z-v
r   )maxsplitz\d+.\d+z(\d{4}) Update (\d).)r   r   researchgroupsplit)	rf   r   r   poutvalidvversion
first_lines	            r1   _check_and_get_versionz.MPIConfigToolDependency._check_and_get_version   sm   D$6#7788!<3
* 	"	.#..A ''!**'>! DD6M**2A2.3
*YYtaY003
 Inj11 	%!''!**$$ Ij*-- 	%!''!**$$ I,j99 	7QWWQZZ66!''!**6666d{r3   NrZ   r[   r   r   r   r   r   r\   )rl   rm   r   rm   )r}   r[   r   r   )r   rm   r   r   r   r   )
__name__
__module____qualname____doc__ra   rd   re   r   r   __classcell__rk   s   @r1   rM   rM   h   s        ;; .28 8 8 8 8 8 8,   0   "[ [ [ [               r3   rM   c                  (     e Zd ZdZ	 dd fdZ xZS )rO   zThe Microsoft MPI.NrZ   r[   r   r   r   r   r   r\   c                L   t                                          ||||           |dvr	d| _        d S | j        j        | j                                                 sd S t          j        	                    d          }t          | j        j        j        j                  }d }|dk    r"t          j        	                    d          }d}n'|dk    r!t          j        	                    d          }d	}||	d| _        d S d
| _        dt          j                            |d          z   g| _        d|z   dt          j                            ||          z   g| _        | j        dk    r=| j                            dt          j                            |d          z              d S d S )NrB   >   Nr   r!   F	MSMPI_INCx86MSMPI_LIB32x86_64MSMPI_LIB64x64Tr   rC   rp   r!   msmpifec)r`   ra   rb   r   rG   r   rH   r,   r-   r.   r   ru   rv   hostpathjoinr_   r^   r   rI   )
rf   rZ   r   r   r   incdirarchlibdirpostrk   s
            r1   ra   zMSMPIDependency.__init__   s   sFX>>>111!DMFx !12==?? 	F,, !2!<!ABB5==Z^^M22FDDXZ^^M22FD>V^!DMFfg!>!>>?!F]D27<<3M3M,MN=I%%N!!$fj)I)I"IJJJJJ &%r3   r   r   )r   r   r   r   ra   r   r   s   @r1   rO   rO      sX         .2K K K K K K K K K K Kr3   rO   )
r   r   r   r   r   r   r   r   r   r   )"
__future__r   rK   typingTr,   r   environmentr   mesonlibr   baser   r	   r
   r   
configtoolr   detectr   factoryr   	pkgconfigr   TYPE_CHECKINGr   r   r   rP   rE   rN   rX   rM   rO   r+   r3   r1   <module>r      s   # " " " " "         				 				 + + + + + + ! ! ! ! ! ! [ [ [ [ [ [ [ [ [ [ [ [ , , , , , ,       $ $ $ $ $ $ * * * * * *? ),,,,,,))))))(((((( #-/@/LN_NfghhI I I ihIV j j j j j2 j j jZ!K !K !K !K !K& !K !K !K !K !Kr3   