§
    ƒnóc»"  ã                  ó^  — 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 ej        rdd
lmZ ddlmZmZ  ee
j        e
j        e
j        h¦  «        dd„¦   «         Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS ) é    )ÚannotationsNé   )Údetect_cpu_familyé   )ÚDependencyMethodsÚdetect_compilerÚSystemDependency)ÚConfigToolDependency)Ú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 rO|sMd }|dk    rd}n|dk    rd}n|d	k    rd
}|                     t          j        t          || ||¬¦  «        ¦  «         t          j	        |v �r‡| 
                    ¦   «         }	|r¨| j        |                              ¦   «         r
d|	d<   d|	d<   |dk    r"t          j                              d¦  «        dg}
nO|dk    r"t          j                              d¦  «        dg}
n'|d	k    r!t          j                              d¦  «        dg}
t          }n‚|dk    r"t          j                              d¦  «        dg}
nS|dk    r$t          j                              d¦  «        dddg}
n)|d	k    r#d„ dD ¦   «         }
|
                     g d¢¦  «         t"          }d„ |
D ¦   «         }
|
sJ ‚|
|	d <   |                     t          j        ||
d!         | |	|¬¦  «        ¦  «         t          j        |v r1|                     t          j        t&          d"| ||¬¦  «        ¦  «         |S )#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ÚmpiCCc                óL   — g | ]!}t           j                             |¦  «        ‘Œ"S © )ÚosÚenvironÚget)Ú.0Úes     ú=/usr/lib/python3/dist-packages/mesonbuild/dependencies/mpi.pyú
<listcomp>zmpi_factory.<locals>.<listcomp>U   s&   € ÐWÐWÐW°A�bœjŸnšn¨QÑ/Ô/ÐWÐWÐWó    )ÚMPIFCÚMPIF90ÚMPIF77)ÚmpifortÚmpif90Úmpif77c                ó   — g | ]}|¯|‘ŒS r3   r3   )r7   Úts     r9   r:   zmpi_factory.<locals>.<listcomp>Z   s   € Ð1Ð1Ð1˜A¨qÐ1�aÐ1Ð1Ð1r;   Útoolsr   Úmsmpi)r6   r   Úget_idr   Ú	PKGCONFIGÚappendÚ	functoolsÚpartialr   ÚCONFIG_TOOLÚcopyÚmachinesÚ
is_windowsr4   r5   ÚIntelMPIConfigToolDependencyÚextendÚOpenMPIConfigToolDependencyÚSYSTEMÚMSMPIDependency)r   r   r   r   r   Ú
candidatesÚcompilerÚcompiler_is_intelÚpkg_nameÚnwargsÚ
tool_namesÚclss               r9   Úmpi_factoryr[       sÿ  € ð
 �zŠz˜* cÑ*Ô*€HØÐ.Ð.Ð.àˆ	à02€JÝ˜u c¨;¸ÑAÔA€HØð Øˆ	Ø ŸšÑ)Ô)Ð-BÐBÐõ Ô" gÐ-Ð-Ð6GÐ-ØˆØ�sŠ?ˆ?ØˆHˆHØ˜ÒÐØ!ˆHˆHØ˜Ò"Ð"Ø"ˆHØ×Ò�)Ô+Ý ¨3°ÀðKñ Kô Kñ 	Lô 	Lð 	Lõ Ô$¨Ð/Ñ/Ø—’‘”ˆàð 	.ØŒ|˜KÔ(×3Ò3Ñ5Ô5ð /Ø(,��}Ñ%Ø-.�Ð)Ñ*à˜3ŠˆÝ œjŸnšn¨ZÑ8Ô8¸(ÐC�
�
Ø˜UÒ"Ð"Ý œjŸnšn¨[Ñ9Ô9¸9ÐE�
�
Ø˜YÒ&Ð&Ý œjŸnšn¨[Ñ9Ô9¸:ÐF�
å.ˆCˆCð
 ˜3ŠˆÝ œjŸnšn¨WÑ5Ô5°wÐ?�
�
Ø˜UÒ"Ð"Ý œjŸnšn¨XÑ6Ô6¸À(ÈGÐT�
�
Ø˜YÒ&Ð&ØWÐWÐ9VÐWÑWÔW�
Ø×!Ò!Ð"AÐ"AÐ"AÑBÔBÐBå-ˆCà1Ð1 Ð1Ñ1Ô1ˆ
ØÐÐÐà$ˆˆw‰Ø×Ò�)Ô+Ø�˜A”  V°hð@ñ @ô @ñ 	Aô 	Að 	Aõ Ô 7Ð*Ð*Ø×Ò�)Ô+Ý˜W c¨6¸HðFñ Fô Fñ 	Gô 	Gð 	Gð Ðr;   c                  ó&   — e Zd Zdd„Zdd„Zdd	„Zd
S )Ú_MPIConfigToolDependencyÚ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Ú
startswithrH   )Úselfr^   ÚresultÚ
multi_argsÚfcÚinclude_nextÚfs          r9   Ú_filter_compile_argsz-_MPIConfigToolDependency._filter_compile_argsj   sõ   € ð
 ˆØ(0ˆ
ØŒ=˜IÒ%Ð%Ø”Ô"Ô,¨TÔ-=Ô>¸yÔIˆBØ˜"×3Ò3Ñ5Ô5Ñ5ˆJàˆØð 		!ð 		!ˆAØ�|Š|˜L¨:Ñ5Ñ6Ô6ð !¸!¸zº/¸/ØŸš TÑ*Ô*ð ;JØ/0°Gª|¨|ÀAÇLÂLÐQZÑD[ÔD[¨|Ø—’˜aÑ Ô Ð Ø˜
�?�?à#'�LøØð !Ø$�Ø—’˜aÑ Ô Ð øØˆr;   c                ó¬   — g }d}|D ]L}|                       |¦  «        r|                     |¦  «         |dv rd}Œ3|rd}|                     |¦  «         ŒM|S )ra   F>   ú-Lú-XlinkerT)Ú_is_link_argrH   )rk   r^   rl   ro   rp   s        r9   Ú_filter_link_argsz*_MPIConfigToolDependency._filter_link_args‚   s|   € ð
 ˆØˆØð 	!ð 	!ˆAØ× Ò  Ñ#Ô#ð !Ø—’˜aÑ Ô Ð ØÐ*Ð*Ð*Ø#'�LøØð !Ø$�Ø—’˜aÑ Ô Ð øØˆr;   rp   ÚstrÚ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)rs   ú-lrt   rc   rd   re   rf   )Úclib_compilerÚidrj   Úendswith)rk   rp   s     r9   ru   z%_MPIConfigToolDependency._is_link_arg“   s”   € ØÔÔ  JÒ.Ð.Ø˜’<ÐQ 1§<¢<°
Ñ#;Ô#;ÐQ¸q¿zºzÈ&Ñ?QÔ?QÐQà—L’LÐ!9Ñ:Ô:ð ZØ˜’OðZà—\’\ $Ñ'Ô'ÐX¨A°ªLÐXÀÇÂÈiÑAXÔAXÐ=Xð[r;   N)r^   r_   r   r_   )rp   rw   r   rx   )Ú__name__Ú
__module__Ú__qualname__rq   rv   ru   r3   r;   r9   r]   r]   h   sV   € € € € € ðð ð ð ð0ð ð ð ð"[ð [ð [ð [ð [ð [r;   r]   c                  ó4   ‡ — e Zd ZdZdZ	 ddˆ fd„Zdd„Zˆ xZS )rO   z*Wrapper around Intel's mpiicc and friends.r#   NÚnamerw   r   r   r   r   r   úT.Optional[str]c                óú   •— t          ¦   «                              ||||¬¦  «         | j        sd S |                      dgd¦  «        }|                      |¦  «        | _        |                      |¦  «        | _        d S )Nr"   z-showzlink and compile args©ÚsuperÚ__init__Úis_foundÚget_config_valuerq   Úcompile_argsrv   Ú	link_args)rk   r‚   r   r   r   r^   Ú	__class__s         €r9   r‡   z%IntelMPIConfigToolDependency.__init__¢   sz   ø€ å‰Œ×Ò˜˜s F°XÐÑ>Ô>Ð>ØŒ}ð 	ØˆFà×$Ò$ g YÐ0GÑHÔHˆØ ×5Ò5°dÑ;Ô;ˆÔØ×/Ò/°Ñ5Ô5ˆŒˆˆr;   Úoutr   c                ó¬   — t          j        d|¦  «        }|r<d                     |                     d¦  «        |                     d¦  «        ¦  «        S |S )Nz(\d{4}) Update (\d)z{}.{}r   r   )ÚreÚsearchÚformatÚgroup©rk   r�   Úvs      r9   Ú_sanitize_versionz.IntelMPIConfigToolDependency._sanitize_version¬   sI   € ÝŒIÐ,¨cÑ2Ô2ˆØð 	:Ø—>’> !§'¢'¨!¡*¤*¨a¯gªg°a©j¬jÑ9Ô9Ð9Øˆ
r;   ©N©r‚   rw   r   r   r   r   r   rƒ   ©r�   rw   r   rw   ©r~   r   r€   Ú__doc__r$   r‡   r•   Ú__classcell__©rŒ   s   @r9   rO   rO   œ   sf   ø€ € € € € à4Ð4à€Kð .2ð6ð 6ð 6ð 6ð 6ð 6ð 6ðð ð ð ð ð ð ð r;   rO   c                  ó4   ‡ — e Zd ZdZdZ	 ddˆ fd„Zdd„Zˆ xZS )rQ   z)Wrapper around OpenMPI mpicc and friends.z--showme:versionNr‚   rw   r   r   r   r   r   rƒ   c                ó(  •— t          ¦   «                              ||||¬¦  «         | j        sd S |                      dgd¦  «        }|                      |¦  «        | _        |                      dgd¦  «        }|                      |¦  «        | _        d S )Nr"   z--showme:compilerŠ   z--showme:linkr‹   r…   )rk   r‚   r   r   r   Úc_argsÚl_argsrŒ   s          €r9   r‡   z$OpenMPIConfigToolDependency.__init__¹   s“   ø€ å‰Œ×Ò˜˜s F°XÐÑ>Ô>Ð>ØŒ}ð 	ØˆFà×&Ò&Ð(:Ð';¸^ÑLÔLˆØ ×5Ò5°fÑ=Ô=ˆÔà×&Ò&¨Ð'8¸+ÑFÔFˆØ×/Ò/°Ñ7Ô7ˆŒˆˆr;   r�   r   c                ó^   — t          j        d|¦  «        }|r|                     d¦  «        S |S )Nz\d+.\d+.\d+r   )r�   r�   r’   r“   s      r9   r•   z-OpenMPIConfigToolDependency._sanitize_versionÅ   s0   € ÝŒI�n cÑ*Ô*ˆØð 	Ø—7’7˜1‘:”:ÐØˆ
r;   r–   r—   r˜   r™   rœ   s   @r9   rQ   rQ   ³   sf   ø€ € € € € à3Ð3à$€Kð .2ð
8ð 
8ð 
8ð 
8ð 
8ð 
8ð 
8ðð ð ð ð ð ð ð r;   rQ   c                  ó(   ‡ — e Zd ZdZ	 ddˆ fd„Zˆ xZS )rS   zThe Microsoft MPI.Nr‚   rw   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 )Nr"   >   Nr   r   FÚ	MSMPI_INCÚx86ÚMSMPI_LIB32Úx86_64ÚMSMPI_LIB64Úx64Trz   rE   rb   r   Úmsmpifec)r†   r‡   rˆ   r   rM   r   rN   r4   r5   r6   r   rg   rh   ÚhostÚpathÚjoinr‹   rŠ   r   rH   )
rk   r‚   r   r   r   ÚincdirÚarchÚlibdirÚpostrŒ   s
            €r9   r‡   zMSMPIDependency.__init__Ð   s  ø€ å‰Œ×Ò˜˜s F°XÐÑ>Ô>Ð>àÐ1Ð1Ð1Ø!ˆDŒMØˆFàŒxÔ  Ô!1Ô2×=Ò=Ñ?Ô?ð 	ØˆFå”—’ Ñ,Ô,ˆÝ  ¤Ô!2Ô!<Ô!AÑBÔBˆØˆØ�5Š=ˆ=Ý”Z—^’^ MÑ2Ô2ˆFØˆDˆDØ�XÒÐÝ”Z—^’^ MÑ2Ô2ˆFØˆDàˆ>˜V˜^Ø!ˆDŒMØˆFàˆŒØ¥¤§¢¨f°gÑ!>Ô!>Ñ>Ð?ˆŒØ! F™]¨Dµ2´7·<²<ÀÈÑ3MÔ3MÑ,MÐNˆÔØŒ=˜IÒ%Ð%ØŒN×!Ò! $­¬¯ª°f¸jÑ)IÔ)IÑ"IÑJÔJÐJÐJÐJð &Ð%r;   r–   r—   )r~   r   r€   rš   r‡   r›   rœ   s   @r9   rS   rS   Ì   sX   ø€ € € € € àÐð .2ðKð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kr;   rS   )
r   r   r   r   r   r   r   r   r   r   )Ú
__future__r   rI   ÚtypingÚTr4   r�   Úenvironmentr   Úbaser   r   r	   Ú
configtoolr
   Úfactoryr   Ú	pkgconfigr   ÚTYPE_CHECKINGr   r   r   rG   rK   rR   r[   r]   rO   rQ   rS   r3   r;   r9   ú<module>r»      sê  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	à +Ð +Ð +Ð +Ð +Ð +Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *à„?ð 9Ø,Ð,Ð,Ð,Ð,Ð,Ø8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð €Ð#Ô-Ð/@Ô/LÐN_ÔNfÐgÑhÔhðDð Dð Dñ iÔhðDðN1[ð 1[ð 1[ð 1[ð 1[Ð3ñ 1[ô 1[ð 1[ðhð ð ð ð Ð#;ñ ô ð ð.ð ð ð ð Ð":ñ ô ð ð2!Kð !Kð !Kð !Kð !KÐ&ñ !Kô !Kð !Kð !Kð !Kr;   