
Y1a                 @   s  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 d d l m	 Z	 m
 Z
 m Z d d l m Z m Z d d	 l m Z m Z d d
 l m Z m Z d d l m Z m Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z d S)    N)OrderedDict   )mlog)mesonlib)MesonException
Popen_safeversion_compare)for_windows
detect_cpu   )DependencyExceptionDependencyMethods)ExternalDependencyExternalProgram)ExtraFrameworkDependencyPkgConfigDependencyc                   s.   e  Z d  Z   f d d   Z d d   Z   S)GLDependencyc                s   t    j d | d  |  t j |  j k r ye t d | |  } | j   r d |  _ d |  _ | j	   |  _
 | j   |  _ | j   |  _ d  SWq t k
 r Yq Xn  t j |  j k rt j   r d |  _ d d g |  _ d |  _ d  St j   rd |  _ d g |  _ d |  _ d  Sn  d  S)Ngl	pkgconfigTz
-frameworkZOpenGL1z
-lopengl32)super__init__r   	PKGCONFIGmethodsr   found	type_nameis_foundget_compile_argscompile_argsget_link_args	link_argsget_versionversion	ExceptionSYSTEMr   is_osx
is_windows)selfenvironmentkwargspcdep)	__class__ V/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/dependencies/ui.pyr   #   s0    						zGLDependency.__init__c             C   s6   t  j   s t  j   r( t j t j g St j g Sd  S)N)r   r%   r&   r   r   r$   )r'   r,   r,   r-   get_methodsA   s    zGLDependency.get_methods)__name__
__module____qualname__r   r.   r,   r,   )r+   r-   r   "   s   r   c                   s^   e  Z d  Z   f d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z   S)GnuStepDependencyc                s<   t    j d | d |  | j d g   |  _ |  j   d  S)Ngnustepobjcmodules)r   r   getr5   detect)r'   r(   r)   )r+   r,   r-   r   I   s    zGnuStepDependency.__init__c       	      C   s  d |  _  y t |  j  d g  d } Wn8 t t f k
 r` t j d t j d  d  d  SYn X| j d k r t j d t j d   d  Sd |  j k r d } n d	 } t |  j  d
 g  \ } } } | j d k r t	 d | | f   n  | j
   } |  j |  |  _ t |  j  | g  \ } } } | j d k rUt	 d | | f   n  |  j | j
    |  _ |  j   |  _ d |  _ t j d t j d  d t j d  |  j  d  S)Nzgnustep-configz--helpr   zDependency GnuStep found:NOz(no gnustep-config)Zguiz
--gui-libsz--base-libsz--objc-flagszError getting objc-args: %s %sz"Error getting objc-lib args: %s %sT
DependencyZGnuStepzfound:YES)confprogr   FileNotFoundErrorPermissionErrorr   logred
returncoder5   r   splitfilter_argsr   weird_filterr    detect_versionr"   r   boldgreen)	r'   ZgpargfpZflagtxtZflagerrargsZlibtxtZliberrr,   r,   r-   r7   N   s2    				zGnuStepDependency.detectc             C   s   d d   | D S)zWhen building packages, the output of the enclosing Make
is sometimes mixed among the subprocess output. I have no idea
why. As a hack filter out everything that is not a flag.c             S   s%   g  |  ] } | j  d   r |  q S)-)
startswith).0er,   r,   r-   
<listcomp>n   s   	 z2GnuStepDependency.weird_filter.<locals>.<listcomp>r,   )r'   Zelemsr,   r,   r-   rC   j   s    zGnuStepDependency.weird_filterc             C   s   g  } xs | D]k } | j  d  sh | j  d  sh | j  d  sh | d k sh | j  d  r | d k r | j |  q q W| S)zqgnustep-config returns a bunch of garbage args such
        as -O2 and so on. Drop everything that is not needed.z-Dz-fz-Iz-pthreadz-Wz-Wall)rK   append)r'   rI   resultfr,   r,   r-   rB   p   s    zGnuStepDependency.filter_argsc       
      C   s   |  j  d  } |  j  d  } t j j | d d  } d } t j j   } d | d <t | d d	 d | d
 g d | d | d t j \ } } } | j	   }	 |	 s t
 j d  d }	 n  |	 S)NZGNUMAKEZGNUSTEP_MAKEFILESZ
Additionalz	base.makezprint-%:
	@echo '$($*)'ZgnuZFOUNDATION_LIBz-frJ   zprint-GNUSTEP_BASE_VERSIONenvwritestdinz4Couldn't detect GNUStep version, falling back to '1'r   )get_variableospathjoinenvironcopyr   
subprocessPIPEstripr   debug)
r'   ZgmakeZmakefile_dirZ	base_makeZprintverrR   porM   r"   r,   r,   r-   rD   }   s    
	!	z GnuStepDependency.detect_versionc             C   sb   t  |  j d | g  \ } } } | j d k rX |  j rX t d j |  j |    n  | j   S)Nz--variable=r   z${!r} for variable {!r} failed to run)r   r;   r@   requiredr   formatr]   )r'   varr_   r`   rM   r,   r,   r-   rU      s
    "zGnuStepDependency.get_variable)	r/   r0   r1   r   r7   rC   rB   rD   rU   r,   r,   )r+   r-   r2   H   s   r2   c                   s   e  Z d  Z   f d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z   S)QtBaseDependencyc       
         sc  t    j | | d |  | j   |  _ | d |  _ |  j d k rP d |  _ n |  j |  _ d |  _ d  |  _ | j d g   } t	 | t
  r | g } n  | s t d |  j d   n  | j   r d	 n d
 } d j |  j | d j |   } d } g  } t j |  j k r2|  j | |  | j d  n  |  j rt j |  j k r|  j | |  } | j d |  j  | j d  n  |  j s"g  |  _ g  |  _ d j t j |   } d |  _ |  j rd j |  j | |  }	 t |	   n  |  j st j | j |  t j  d   n  d  Sd j |  } |  j s_t j | j |  t j! d   n  d  S)Ncppr   4Qtz/usrr5   zNo z  modules specified.crossnativez*{} {} {{}} dependency (modules: {}) found:z, z
pkg-configr   zqmake-qmakez(checked {})nonez{} {} dependency not found {}r8   z`{}`r:   )"r   r   
capitalizeqtnameqtver	qtpkgnamerootbindirr6   
isinstancestrr   is_cross_buildrb   rX   r   r   r   _pkgconfig_detectrO   r   QMAKE_qmake_detectnamer   r    r   format_listr"   ra   silentr>   r?   rF   )
r'   ry   rR   r)   modsZ	type_text	found_msgZ	from_textr   err_msg)r+   r,   r-   r      sL    		!						%	zQtBaseDependency.__init__c             C   s   |  j  rx t t j j |  j  d  d d } t t j j |  j  d  d d } t t j j |  j  d  d d } nK t d |  j d d } t d |  j d d } t d |  j d d } | | | f S)	zCDetect Qt (4 or 5) moc, uic, rcc in the specified bindir or in PATHmocr{   Tuicrcczmoc-zuic-zrcc-)rr   r   rV   rW   rX   ry   )r'   r   r   r   r,   r,   r-   compilers_detect   s    	$$'z!QtBaseDependency.compilers_detectc       	      C   sN  d | d <t    } x. | D]& } t |  j | |  j |  | | <q WxW | j   D]I } | j   sp d |  _ d  S|  j | j   7_ |  j	 | j
   7_	 qQ Wd |  _ | j |  _ d | k r | d } n0 i d d 6d d 6} t |  j d |  j |  } |  j |  |  _ |  j sJ| j d  } | rJt j j | d	  |  _ qJn  d  S)
NFra   TZCorefalsetruer{   exec_prefixbin)r   r   rp   rR   valuesr   r   r   r   r    r   r"   get_pkgconfig_host_binsrr   get_pkgconfig_variablerV   rW   rX   )	r'   r|   r)   r5   modulemcoreZ
corekwargsprefixr,   r,   r-   rv      s*    
	$			z"QtBaseDependency._pkgconfig_detectc             C   sA   |  j  j   r1 |  j  j j d j d |  } n  t | d d S)Nbinariesrj   r{   T)rR   ru   
cross_infoconfigr6   r   )r'   rj   r,   r,   r-   _find_qmake   s    "zQtBaseDependency._find_qmakec             C   sr  x d |  j  d f D] } |  j |  |  _ |  j j   sA q n  t |  j j   d g  d d  \ } } | j d k r q n  d |  j | k r t j	 d |  j
  q n  Pq Wd |  _ d  St j |  j d	 |  j d  |  _ t j	 d
 t j |  j j    d |  j  t |  j j   d g  d } i  } x] | j d  D]L } | j   } | d k rlqHn  t | j d d   \ } }	 |	 | | <qHWt j   r|  j | | |  S| d }
 |  j j d |
  | d } |  j |  |  _ d |  _ xq| D]i} t j j |
 d |  } |  j j d |  t |  j  j!   |  j   r|  j  j" j# j$ d  } | rsd n d } |  j d k rd | | d } n d | | } t j j | | d  } t j j% |  sZt j j |  j | d  } t j j% |  sd |  _ PqqZnC t j j | d j& |  j' |   } t j j% |  sZd |  _ Pn  |  j( j |  qW| S)Nzqmake-rj   z-vr   r   zQt version zQMake is not for Fz(\.\d+)+zFound qmake:z(%s)z-queryr   
 :ZQT_INSTALL_HEADERSz-IQT_INSTALL_LIBSTrg   r^   drf   ZQt5z.libz.dllz
lib{}{}.so))ry   r   rj   r   r   get_commandr@   ro   r   r>   rn   r   researchgroupr"   rE   get_namerA   r]   tupler   r%   _framework_detectr   rO   get_qmake_host_binsrr   rV   rW   rX   r	   rR   ru   cmd_line_options	buildtyperK   isfilerb   rp   r    )r'   r|   r)   rj   pcstdoqvarslinekvincdirlibdirr   ZmincdirZis_debugZdbg	base_nameZlibfiler,   r,   r-   rx      sf    ,	%, 

		
$	zQtBaseDependency._qmake_detectc             C   s   | d } x | D] } d | } t  | d | |  j |  j |  } |  j j d |  | j   r d |  _ |  j | j   7_ |  j | j	   7_ q q W|  j
 |  |  _ d  S)Nr   rg   Fz-FT)r   rR   languager   rO   r   r   r   r    r   r   rr   )r'   r   r5   r)   r   r   fnamefwdepr,   r,   r-   r   ;  s    

	z"QtBaseDependency._framework_detectc             C   s    d | k r | d S| d Sd  S)NZQT_HOST_BINSZQT_INSTALL_BINSr,   )r'   r   r,   r,   r-   r   I  s    z$QtBaseDependency.get_qmake_host_binsc             C   s   t  j t  j g S)N)r   r   rw   )r'   r,   r,   r-   r.   Q  s    zQtBaseDependency.get_methodsc             C   s
   | j    S)N)get_pic_args)r'   compilerr,   r,   r-   get_exe_argsT  s    zQtBaseDependency.get_exe_args)r/   r0   r1   r   r   rv   r   rx   r   r   r.   r   r,   r,   )r+   r-   rd      s   />rd   c               @   s(   e  Z d  Z d d   Z d d   Z d S)Qt4Dependencyc             C   s   t  j |  d | |  d  S)Nqt4)rd   r   )r'   rR   r)   r,   r,   r-   r   _  s    zQt4Dependency.__init__c             C   s`   d d d d d g } xD | D]< } y! t  j j | j d |   SWq t k
 rW Yq Xq Wd  S)Nr   r   r   ZlupdateZlreleasez%s_location)rV   rW   dirnamer   r   )r'   r   ZapplicationsZapplicationr,   r,   r-   r   b  s    !z%Qt4Dependency.get_pkgconfig_host_binsN)r/   r0   r1   r   r   r,   r,   r,   r-   r   ^  s   r   c               @   s(   e  Z d  Z d d   Z d d   Z d S)Qt5Dependencyc             C   s   t  j |  d | |  d  S)Nqt5)rd   r   )r'   rR   r)   r,   r,   r-   r   p  s    zQt5Dependency.__init__c             C   s   | j  d  S)NZ	host_bins)r   )r'   r   r,   r,   r-   r   s  s    z%Qt5Dependency.get_pkgconfig_host_binsN)r/   r0   r1   r   r   r,   r,   r,   r-   r   o  s   r   c                   s.   e  Z d  Z   f d d   Z d d   Z   S)SDL2Dependencyc                s  t    j d | d  |  t j |  j k r yo d | d <t d | |  } | j   r d |  _ d |  _ | j	   |  _
 | j   |  _ | j   |  _ d  SWq t k
 r } z t j d t |   WYd  d  } ~ Xq Xn  t j |  j k rt j d  } | rt d d g  d	 } | j   j   |  _
 t d d
 g  d	 } | j   j   |  _ t d d g  d	 } | j   |  _ d |  _ t j d t j d  d t j d  |  j d |  d  St j d  n  t j |  j k r|t j   rQt d d d  |  j  |  j! |  } | j   rQd |  _ | j	   |  _
 | j   |  _ d |  _ d  Sn  t j d t j d  d t j" d   n  d  S)Nsdl2Fra   r   Tz6SDL 2 not found via pkgconfig. Trying next, error was:zsdl2-configz--cflagsr   z--libsz	--versionr9   zfound:r:   z(%s)z/Could not find sdl2-config binary, trying next.2r8   )#r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r   r^   rt   	SDLCONFIGshutilwhichr   r]   rA   r>   rE   rF   EXTRAFRAMEWORKr   r%   r   rR   r   r?   )r'   r(   r)   r*   rM   Zsdlconfr   r   )r+   r,   r-   r   z  sN    
		,	$		zSDL2Dependency.__init__c             C   s6   t  j   r" t j t j t j g St j t j g Sd  S)N)r   r%   r   r   r   r   )r'   r,   r,   r-   r.     s    zSDL2Dependency.get_methods)r/   r0   r1   r   r.   r,   r,   )r+   r-   r   y  s   )r   c                   s@   e  Z d  Z d Z   f d d   Z d d   Z d d   Z   S)WxDependencyNc                s  t    j d | d  |  d |  _ t j d  k r> |  j   n t j |  _ t j sd t j d  d  St	 |  j d g  d d  \ } } | j
 d k r t j d t j d   nE| j   |  _ | j d	 d   } | d  k	 rt |  j | d
 d st j d |  j | f  d  Sn  t j d t j d   d |  _ |  j |  |  _ t	 |  j d g  d d  \ } } | j
 d k rt d   n  | j   |  _ t	 |  j d g |  j  d d  \ } } | j
 d k rt d   n  | j   |  _ d  S)NZwxrk   zBNeither wx-config-3.0 nor wx-config found; can't detect dependencyz	--versionr   r   zDependency wxwidgets found:r8   r"   strictTz5Wxwidgets version %s does not fullfill requirement %sr:   z
--cxxflagsz'Could not generate cargs for wxwidgets.z--libsz&Could not generate libs for wxwidgets.)r   r   r"   r   wx_foundcheck_wxconfigwxcr   r>   r   r@   r?   r]   r6   r   rF   r   get_requestedrequested_modulesr   rA   r   r    )r'   r(   r)   r_   outversion_req)r+   r,   r-   r     s:    		%		%,zWxDependency.__init__c             C   sn   d } | | k r g  S| | } t  | t  s; | g } n  x, | D]$ } t  | t  sB t d   qB qB W| S)Nr5   z)wxwidgets module argument is not a string)rs   listrt   r   )r'   r)   r5   
candidatescr,   r,   r-   r     s    
zWxDependency.get_requestedc             C   s   x d d g D] } yz t  | d g  d d  \ } } | j d k r t j d t j t j |   d | j    | |  _ | t	 _
 d  SWq t t f k
 r Yq Xq Wd t	 _ t j d t j d	   d  S)
Nzwx-config-3.0z	wx-configz	--versionr   r   zFound wx-config:z(%s)Fr8   )r   r@   r   r>   rE   r   r   r]   r   r   r   r<   r=   Zwxconfig_foundr?   )r'   r   r_   r   r,   r,   r-   r     s    "				zWxDependency.check_wxconfig)r/   r0   r1   r   r   r   r   r,   r,   )r+   r-   r     s   )r   c                   s.   e  Z d  Z   f d d   Z d d   Z   S)VulkanDependencyc                s  t    j d | d  |  t j |  j k r ye t d | |  } | j   r d |  _ d |  _ | j	   |  _
 | j   |  _ | j   |  _ d  SWq t k
 r Yq Xn  t j |  j k ry8 t j d |  _ t j j |  j  s t d   n  Wn t k
 rd  |  _ Yn X|  j r^d } t j   r[d } d } d } t i   d	 k rmd
 } qmn d } d } d } t j j |  j |  } t j j | d d  } t j j |  j |  }	 |  j j | | |	  }
 |
 st d   n  t j j |  st d   n  d |  _ d |  _ |  j
 j d |  |  j j d |	  |  j j d |  d |  _ d  S|  j j d | g   } | d  k	 r|  j j  d d |  rd |  _ d |  _ d |  _ x | D] } |  j j |  qWd  Sn  d  S)Nvulkanr   TZ
VULKAN_SDKz$VULKAN_SDK must be an absolute path.zvulkan-1ZLib32Includex86_64ZLiblibincludezvulkan.hz.VULKAN_SDK point to invalid directory (no lib)z2VULKAN_SDK point to invalid directory (no include)
vulkan_sdkz-Iz-Lz-lr   zvulkan/vulkan.hr   systemr   )!r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   rV   rY   r   rW   isabsr   KeyErrorr   r&   r
   rX   r   find_libraryr   rO   
has_header)r'   r(   r)   r*   Zlib_nameZlib_dirinc_dirZinc_pathheaderZlib_pathZfind_liblibsr   )r+   r,   r-   r     sl    						$			zVulkanDependency.__init__c             C   s   t  j t  j g S)N)r   r   r$   )r'   r,   r,   r-   r.   :  s    zVulkanDependency.get_methods)r/   r0   r1   r   r.   r,   r,   )r+   r-   r     s   Hr   )rV   r   r   r[   collectionsr   r   r   r   r   r   r   r(   r	   r
   baser   r   r   r   r   r   r   r2   rd   r   r   r   r   r   r,   r,   r,   r-   <module>   s&   &S
1G