
_rY'              
   @   s  d  Z  d d l Z d d l Z d d l m Z m Z d d l Z d d l Z d d l Z d d l	 Z	 e j
   Z e j d d d d d	 d
 d d d e j d d d d d d
 d d d e j d d d d d d
 d d d e j d d d d d d
 d d d e j d d d d d d
 d d d e j d d d d d d
 d d d e j d d d d d d
 d d d  e j d! d d d d" d
 d d d# e j d$ d d d d% d
 d d d& e j d' d( d) d d* d+ d,   Z d- d   Z d. d	   Z d/ d0   Z d1 d2   Z d3 d4   Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z d= d>   Z e d? k re j e e j d d    n  d S)@a%  This is a helper script for IDE developers. It allows you to
extract information such as list of targets, files, compiler flags,
tests and so on. All output is in JSON for simple parsing.

Currently only works for the Ninja backend. Others use generated
project files and don't need this info.    N   )coredatabuildz	--targetsaction
store_truedestlist_targetsdefaultFhelpzList top level targets.z--installedlist_installedz)List all installed files and directories.z--target-filesstoretarget_filesz%List source files for a given target.z--buildsystem-filesbuildsystem_filesz)List files that make up the build system.z--buildoptionsbuildoptionszList all build options.z--teststestszList all unit tests.z--benchmarks
benchmarkszList all benchmarks.z--dependenciesdependencieszList external dependencies.z--projectinfoprojectinfozInformation about projects.builddirnargs?zThe build directoryc             C   s   d  } xA | j  D]6 } t j j | d  d |  j   k r | } Pq q W| d  k re t d   n  | d } | d } t j j | j | t j j |  d  } t t	 j
 |   S)Nr   r   z%Something weird happened. File a bug.)targetsospathsplitget_filenameRuntimeErrorjoinprefixstrpathlibPurePath)targetinstalldataZinstall_targetifnameoutdirZoutname r(   M/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/mintro.pydetermine_installed_path1   s    &

+r*   c       	      C   s@  i  } |  d  k	 r)x] |  j  D]R \ } } } } } t j j |  j | t j j |   | t j j |  j |  <q Wx6 |  j D]+ \ } } } t j j |  j |  | | <q| WxB |  j D]7 \ } } t j j |  j | t j j |   | | <q Wx6 |  j	 D]( \ } } t j j |  j |  | | <q Wn  t
 t j |   d  S)N)r   r   r   r   r   basename	build_dirdataheadersmanprintjsondumps)	r$   resr   Z
installdiraliasesZunknown1Zunknown2ZinstallpathZunused_prefixr(   r(   r)   r   A   s    A /#c                s  g  } xs| j    j   D]_\ }   i   j   d 6| d 6}   j   } t | t  rv   f d d   | D } n t j j   j	 |  } | | d <t   t
 j  r d } nr t   t
 j  r d } nW t   t
 j  r d } n< t   t
 j  rd	 } n! t   t
 j  rd
 } n d } | | d <| ra  j   rad | d <t   |  | d <n
 d | d <| j |  q Wt t j |   d  S)Nnameidc                s(   g  |  ] } t  j j   j |   q Sr(   )r   r   r   subdir).0x)r#   r(   r)   
<listcomp>U   s   	 z list_targets.<locals>.<listcomp>filename
executablezshared libraryzstatic libraryZcustomrununknowntypeTZ	installedZinstall_filenameF)get_targetsitemsget_basenamer   
isinstancelistr   r   r   r7   r   
ExecutableSharedLibraryStaticLibraryCustomTarget	RunTargetshould_installr*   appendr0   r1   r2   )r   	builddatar$   Ztlistidnametr&   typenamer(   )r#   r)   r   O   s4    
					


c             C   s{   y! | j  |  } | j | j } Wn- t k
 rP t d |   t j d  Yn Xd d   | D } t t j |   d  S)NzUnknown target %s.r   c             S   s+   g  |  ]! } t  j j | j | j   q Sr(   )r   r   r   r7   r&   )r8   r%   r(   r(   r)   r:   u   s   	 z%list_target_files.<locals>.<listcomp>)	r   sourcesextra_filesKeyErrorr0   sysexitr1   r2   )target_namer   rL   rN   rP   r(   r(   r)   list_target_filesn   s    rV   c             C   s]   g  } t  | |  j  t  | |  j  t  | |  j  t  | |  j  t t j |   d  S)N)add_keysuser_optionscompiler_optionsbase_optionsbuiltinsr0   r1   r2   )r   rL   optlistr(   r(   r)   list_buildoptionsx   s    r]   c             C   s   t  | j    } | j   x | D] } | | } i | d 6| j d 6} t | t j  re d } nj t | t j  r d } nO t | t j  r | j	 | d <d } n' t | t j
  r d } n t d   | | d	 <| j | d
 <|  j |  q# Wd  S)Nr5   valuestringbooleanchoicescomboZstringarrayzUnknown option typer?   description)rD   keyssortr^   rC   r   UserStringOptionUserBooleanOptionUserComboOptionra   UserStringArrayOptionr   rc   rK   )r\   optionsrd   keyoptoptdictZtypestrr(   r(   r)   rW      s$    

				
rW   c             C   s   | j  j   } g  } xw t j |  D]f \ } } } xT | D]L } | d k sY | d k r; | j t j j t j j | |  |   q; q; Wq% Wt t	 j
 |   d  S)Nzmeson.buildzmeson_options.txt)environmentget_source_dirr   walkrK   r   relpathr   r0   r1   r2   )r   rL   src_dirZfilelistroot_filesfr(   r(   r)   list_buildsystem_files   s    6rw   c             C   sw   g  } xW |  j  j   D]F } | j   r | i | j d 6| j   d 6| j   d 6g 7} q q Wt t j |   d  S)Nr5   compile_args	link_args)	depsvaluesfoundr5   get_compile_argsget_link_argsr0   r1   r2   )r   resultdr(   r(   r)   	list_deps   s    r   c             C   s   g  } x |  D] } i  } t  | j t  r: | j g } n	 | j } | | j | d <t  | j t j  r | j j t j	  | d <n | j | d <| j
 | d <| j | d <| j | d <| j | d <| j |  q Wt t j |   d  S)Ncmdenvr5   workdirtimeoutsuite)rC   r&   r    cmd_argsr   r   EnvironmentVariablesget_envr   environr5   r   r   r   rK   r0   r1   r2   )testdatar   rN   Ztor&   r(   r(   r)   
list_tests   s     	r   c             C   s   i |  j  d 6|  j d 6} g  } x> |  j j   D]- \ } } i | d 6| d 6} | j |  q0 W| | d <t t j |   d  S)Nr5   versionsubprojects)project_nameproject_versionr   rA   rK   r0   r1   r2   )rL   r   r   kvcr(   r(   r)   list_projinfo   s    


r   c          "   C   s  d } t  j |   } | j d  k	 r? t j j | j |  } n  t j j |  s_ t d  d St j j | d  } t j j | d  } t j j | d  } t j j | d  } t j j | d  } t | d	   } t	 j
 |  }	 Wd  QXt | d	   } t	 j
 |  }
 Wd  QXt | d	   } t	 j
 |  } Wd  QXt | d	   } t	 j
 |  } Wd  QXt j j |  rt | d	   } t	 j
 |  } Wd  QXn d  } | j rt |	 |
 |  n | j rt |  n | j d  k	 rt | j |	 |
  n | j rt |	 |
  n | j r/t |	 |
  nf | j rEt |  nP | j r[t |  n: | j rqt |	  n$ | j rt |
  n t d
  d Sd S)Nzmeson-privatez^Current directory is not a build dir. Please specify it or change the working directory to it.r   zcoredata.datz	build.datzinstall.datzmeson_test_setup.datzmeson_benchmark_setup.datrbzNo command specifiedr   )parser
parse_argsr   r   r   r   isdirr0   openpickleloadisfiler   r   r   rV   r   rw   r   r]   r   r   r   r   r   r   r   )argsdatadirrj   ZcorefileZ	buildfileZinstallfileZtestfileZbenchmarkfilerv   r   rL   r   Zbenchmarkdatar$   r(   r(   r)   r=      sZ    
								
r=   __main__)__doc__r1   r    r   r   argparserS   r   r!   ArgumentParserr   add_argumentr*   r   r   rV   r]   rW   rw   r   r   r   r=   __name__rT   argvr(   r(   r(   r)   <module>   sL   

	
7