ó
 Ĉ^c           @   s	  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m	 Z	 e
 e	 j	 _ e j d d  e j d  d     Z d   Z xe d D]] Z e e	 j k rż q¤ n  e	 j e Z d	   Z e e d
 e e d d   e e d e  q¤ Wd S(   s  
Writes the c and cpp compile commands into build/compile_commands.json
see http://clang.llvm.org/docs/JSONCompilationDatabase.html

Usage:

    def configure(conf):
        conf.load('compiler_cxx')
        ...
        conf.load('clang_compilation_database')
i˙˙˙˙N(   t   Logst   TaskGent   Taskt   ct   cxxt   process_usec         C   sı   y |  j  j } Wn1 t k
 rC g  } |  j  _ |  j  j t  n Xt d   g  d D] } t j j |  ^ qT D  } x9 t	 |  d g   D]% } t
 | |  r | j |  q q Wd S(   s3   Add a compilation database entry for compiled tasksc         s   s   |  ] } | r | Vq d  S(   N(    (   t   .0t   y(    (    sK   /git_repos/PolyLV2/poly_mclk_in/waflib/extras/clang_compilation_database.pys	   <genexpr>    s    R   R   t   compiled_tasksN(   R   R   (   t   bldt    clang_compilation_database_taskst   AttributeErrort   add_post_funt   write_compilation_databaset   tupleR   t   classest   gett   getattrt
   isinstancet   append(   t   selft   clang_dbt   xt   tupt   task(    (    sK   /git_repos/PolyLV2/poly_mclk_in/waflib/extras/clang_compilation_database.pyt   collect_compilation_db_tasks   s    5c   
      C   sF  |  j  j d  } t j d | j |  j   y t j |  } Wn t k
 rZ g  } n Xt	 d   | D  } x  t
 |  d g   D] } y | j } Wn t k
 r­ q n Xt
 | d |  j  } | j d } t j j | j   |  } i | d 6| d 6| d	 6}	 |	 | | <q Wt | j    } | j t j | d
 d  d S(   s,   Write the clang compilation database as JSONs   compile_commands.jsons#   Build commands will be stored in %sc         s   s   |  ] } | d  | f Vq d S(   t   fileN(    (   R   R   (    (    sK   /git_repos/PolyLV2/poly_mclk_in/waflib/extras/clang_compilation_database.pys	   <genexpr>-   s    R
   t   cwdi    t	   directoryt	   argumentsR   t   indenti   N(   t   bldnodet	   make_nodeR    t   infot	   path_fromt   patht   jsont   loadt   IOErrort   dictR   t   last_cmdR   t   variant_dirt   inputst   ost   relpatht   abspatht   listt   valuest   writet   dumps(
   t   ctxt   database_filet   rootR   R   t   cmdR   t   f_nodet   filenamet   entry(    (    sK   /git_repos/PolyLV2/poly_mclk_in/waflib/extras/clang_compilation_database.pyR   %   s,    

c         C   s}   d   } |  j    } | t j k ry t |  d t |  d d    t |  d |  |  j   t |  d t |  d d    n  | S(   Nc         [   s   d  S(   N(    (   R5   t   kw(    (    sK   /git_repos/PolyLV2/poly_mclk_in/waflib/extras/clang_compilation_database.pyt   exec_commandI   s    t   old_exec_commandR:   (   t   old_runnable_statusR   t   SKIP_MEt   setattrR   t   Nonet   run(   R   R:   t
   run_status(    (    sK   /git_repos/PolyLV2/poly_mclk_in/waflib/extras/clang_compilation_database.pyt   runnable_statusH   s    	
R<   RB   (   R   R   (   t   __doc__t   sysR+   R$   t   shlext   pipest   waflibR    R   R   t   Truet   keep_last_cmdt   featuret   after_methodR   R   R   R   t   tRB   R>   R   R?   (    (    (    sK   /git_repos/PolyLV2/poly_mclk_in/waflib/extras/clang_compilation_database.pyt   <module>   s   <		