î
“&HY/(  ã               @   sÒ   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 d d l m	 Z	 m
 Z
 m Z Gd d	 „  d	 e
 ƒ Z Gd
 d „  d e
 ƒ Z Gd d „  d e
 ƒ Z Gd d „  d e ƒ Z d S)é    Né   )Úmlog)Úmesonlib)Úversion_compareÚ
Popen_safeé   )ÚDependencyExceptionÚExternalDependencyÚPkgConfigDependencyc                   sF   e  Z d  Z ‡  f d d †  Z d d „  Z d d „  Z d d „  Z ‡  S)	ÚGTestDependencyc                sK   t  ƒ  j d | d | ƒ | j d d ƒ |  _ d d g |  _ |  j ƒ  d  S)NÚgtestÚcppÚmainFz/usr/src/gtest/srcz"/usr/src/googletest/googletest/src)ÚsuperÚ__init__Úgetr   Úsrc_dirsÚdetect)ÚselfÚenvironmentÚkwargs)Ú	__class__© úW/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/dependencies/dev.pyr      s    zGTestDependency.__init__c             C   sY  d |  _  |  j j d |  j g  ƒ } |  j j d |  j g  ƒ } | r³ |  j sU | r³ d |  _ g  |  _ | |  _ |  j r‹ |  j | 7_ n  g  |  _ t	 j
 d t	 j d ƒ d ƒ n¢ |  j ƒ  r3d |  _ d |  j g |  _ g  |  _ |  j r|  j |  j g |  _ n |  j g |  _ t	 j
 d t	 j d ƒ d	 ƒ n" t	 j
 d t	 j d
 ƒ ƒ d |  _ d  S)Nz1.something_mayber   Z
gtest_mainTzDependency GTest found:ÚYESz
(prebuilt)z-Iz(building self)ÚNOF)ÚversionÚcompilerÚfind_libraryÚenvr   Úis_foundÚcompile_argsÚ	link_argsÚsourcesr   ÚlogÚgreenÚdetect_srcdirÚsrc_include_dirÚall_srcÚmain_srcÚred)r   Zgtest_detectZgtest_main_detectr   r   r   r   "   s*    									zGTestDependency.detectc             C   s¬   x¥ |  j  D]š } t j j | ƒ r
 | |  _ t j j t j j |  j d ƒ ƒ |  _	 t j j t j j |  j d ƒ ƒ |  _
 t j j t j j |  j d ƒ ƒ |  _ d Sq
 Wd S)Nzgtest-all.cczgtest_main.ccz..TF)r   ÚosÚpathÚexistsÚsrc_dirr   ÚFileÚfrom_absolute_fileÚjoinr(   r)   Únormpathr'   )r   Úsr   r   r   r&   ;   s    			'zGTestDependency.detect_srcdirc             C   s   d S)NTr   )r   r   r   r   Úneed_threadsG   s    zGTestDependency.need_threads)Ú__name__Ú
__module__Ú__qualname__r   r   r&   r4   r   r   )r   r   r      s   r   c                   s"   e  Z d  Z ‡  f d d †  Z ‡  S)ÚGMockDependencyc                sµ  t  ƒ  j d | d | ƒ d |  _ |  j j d |  j g  ƒ } | r‡ d |  _ g  |  _ | |  _ g  |  _	 t
 j d t
 j d ƒ d ƒ d  Sxd d	 d
 g D]ô } t j j | ƒ r— d |  _ t j j t j j | d ƒ ƒ } d | d | g |  _ g  |  _ t j j t j j | d ƒ ƒ } t j j t j j | d ƒ ƒ } | j d d ƒ r_| | g |  _	 n | g |  _	 t
 j d t
 j d ƒ d ƒ d  Sq— Wt
 j d t
 j d ƒ ƒ d |  _ d  S)NÚgmockr   z1.something_maybeTzDependency GMock found:r   z
(prebuilt)z"/usr/src/googletest/googlemock/srcz/usr/src/gmock/srcz/usr/src/gmockz..z-Izgmock-all.cczgmock_main.ccr   Fz(building self)r   )r   r   r   r   r   r   r    r!   r"   r#   r   r$   r%   r+   r,   r-   r2   r1   r   r/   r0   r   r*   )r   r   r   Zgmock_detectÚdÚd2r(   r)   )r   r   r   r   L   s2    						!	!!zGMockDependency.__init__)r5   r6   r7   r   r   r   )r   r   r8   K   s   r8   c                   s”   e  Z d  Z d Z d d d d d d d d	 d
 d d d d d d g Z d Z d Z d Z d h Z ‡  f d d †  Z	 e
 d d „  ƒ Z d d „  Z ‡  S)ÚLLVMDependencyz…
    LLVM uses a special tool, llvm-config, which has arguments for getting
    c args, cxx args, and ldargs as well as version.
    zllvm-configzllvm-config-4.0zllvm-config40zllvm-config-3.9zllvm-config39zllvm-config-3.8zllvm-config38zllvm-config-3.7zllvm-config37zllvm-config-3.6zllvm-config36zllvm-config-3.5zllvm-config35zllvm-config-5.0zllvm-config-develNFz-DNDEBUGc       
         s/  t  ƒ  j d | d | ƒ g  |  _ | j d d  ƒ } |  j d  k rS |  j | ƒ n  |  j sÌ |  j d  k	 rŠ t j	 d j
 |  j ƒ | ƒ n t j	 d ƒ t j	 d t j d ƒ ƒ |  j rÈ t d ƒ ‚ n  d  St |  j d	 g ƒ \ } } } | j d
 k r.t j d j
 | | ƒ ƒ |  j r*t d ƒ ‚ n  d  S| j ƒ  |  _ t j	 d t j d ƒ ƒ d |  _ t |  j d d d g ƒ d  d … \ } } | j d
 k r¨t d ƒ ‚ n  t j | ƒ |  _ t |  j d g ƒ d  d … \ } } | j d
 k rýt d ƒ ‚ n  t j t j | ƒ ƒ } t | j |  j ƒ ƒ |  _ t |  j d g ƒ d  d … \ } } | j d
 k rst d ƒ ‚ n  t j | ƒ |  _ t j | j d g  ƒ ƒ } xˆ | D]€ }	 |	 |  j k rt j	 d |	 d t j d ƒ ƒ d |  _ |  j r't d j
 |	 ƒ ƒ ‚ q'q§t j	 d |	 d t j d ƒ ƒ q§Wd  S)Nzllvm-configr   r   zfound {!r} but need:z-No llvm-config found; can't detect dependencyzDependency LLVM found:r   zDependency LLVM not foundz	--versionr   zstdout: {}
stderr: {}r   Tz--libsz	--ldflagsz--system-libsr   z!Could not generate libs for LLVM.z
--cppflagsz'Could not generate includedir for LLVM.z--componentsz$Could not generate modules for LLVM.ÚmoduleszLLVM modulezfound:Fz*Could not find required LLVM Component: {})r   r   r=   r   Ú
llvmconfigÚcheck_llvmconfigÚ_llvmconfig_foundÚ_LLVMDependency__best_foundr   r$   Úformatr*   Úrequiredr   r   Ú
returncodeÚdebugÚstripr   r%   r    ÚshlexÚsplitr"   r   Ú
OrderedSetÚlistÚ
differenceÚ_LLVMDependency__cpp_blacklistr!   Ústringlistify)
r   r   r   Zreq_versionÚpÚoutÚerrÚcargsr=   Úmod)r   r   r   r   ‰   sZ    		
			+%%		zLLVMDependency.__init__c             C   sE  xé |  j  D]Þ } y½ t | d g ƒ d d … \ } } | j ƒ  } | j d k rV w
 n  | r¹ t | | d d ƒrÌ |  j r¡ t | d j |  j ƒ d d ƒr¡ w
 n  | |  _ | |  _ qÌ n | |  _ | |  _ PWq
 t t	 f k
 rç Yq
 Xq
 W|  j r8t
 j d t
 j t j |  j ƒ ƒ d j | j ƒ  ƒ ƒ d |  _ n	 d	 |  _ d
 S)z/Try to find the highest version of llvm-config.z	--versionr   r   ÚstrictTz<={}zFound llvm-config:z({})FN)Úllvm_config_binsr   rF   rD   r   rA   rB   r>   ÚFileNotFoundErrorÚPermissionErrorr   r$   ÚboldÚshutilÚwhichr@   )ÚclsZversion_reqr>   rN   rO   r   r   r   r?   Ä   s.    "*						zLLVMDependency.check_llvmconfigc             C   s   d S)NTr   )r   r   r   r   r4   å   s    zLLVMDependency.need_threads)r5   r6   r7   Ú__doc__rT   r>   r@   rA   rL   r   Úclassmethodr?   r4   r   r   )r   r   r<   n   s    		;!r<   c                   s4   e  Z d  Z d Z ‡  f d d †  Z d d „  Z ‡  S)ÚValgrindDependencyzy
    Consumers of Valgrind usually only need the compile args and do not want to
    link to its (static) libraries.
    c                s   t  ƒ  j d | | ƒ d  S)NÚvalgrind)r   r   )r   r   r   )r   r   r   r   î   s    zValgrindDependency.__init__c             C   s   g  S)Nr   )r   r   r   r   Úget_link_argsñ   s    z ValgrindDependency.get_link_args)r5   r6   r7   r[   r   r_   r   r   )r   r   r]   é   s   r]   )r+   rG   rX   Ú r   r   r   r   Úbaser   r	   r
   r   r8   r<   r]   r   r   r   r   Ú<module>   s   0#{