
nZc           @   s  d  Z  d d l Z d d l j Z d d l Z d d l Z d d l Z d d l Z e	 Z
 d Z d Z d Z d Z d Z d Z d	 Z e j j   Z e	 Z i  Z x' d
 d d d d g D] Z d e e <q Wx< d d d d d d d d d d d d g D] Z d e e <q Wd   Z d   Z d   Z d    Z d!   Z d"   Z d# e f d$     YZ  d% e f d&     YZ! d'   Z" d(   Z# d)   Z$ d*   Z% d+   Z& d,   Z' d-   Z( d.   Z) d/   Z* d0   Z+ d1   Z, d2   Z- d3   Z. d4   Z/ d5 e f d6     YZ0 d7   Z1 d S(8   s  
This script is intended for use as a GYP_GENERATOR. It takes as input (by way of
the generator flag config_path) the path of a json file that dictates the files
and targets to search for. The following keys are supported:
files: list of paths (relative) of the files to search for.
test_targets: unqualified target names to search for. Any target in this list
that depends upon a file in |files| is output regardless of the type of target
or chain of dependencies.
additional_compile_targets: Unqualified targets to search for in addition to
test_targets. Targets in the combined list that depend upon a file in |files|
are not necessarily output. For example, if the target is of type none then the
target is not output (but one of the descendants of the target will be).

The following is output:
error: only supplied if there is an error.
compile_targets: minimal set of targets that directly or indirectly (for
  targets of type none) depend on the files in |files| and is one of the
  supplied targets or a target that one of the supplied targets depends on.
  The expectation is this set of targets is passed into a build step. This list
  always contains the output of test_targets as well.
test_targets: set of targets from the supplied |test_targets| that either
  directly or indirectly depend upon a file in |files|. This list if useful
  if additional processing needs to be done for certain targets after the
  build, such as running tests.
status: outputs one of three values: none of the supplied files were found,
  one of the include files changed so that it should be assumed everything
  changed (in this case test_targets and compile_targets are not output) or at
  least one file was found.
invalid_targets: list of supplied targets that were not found.

Example:
Consider a graph like the following:
  A     D
 / B   C
A depends upon both B and C, A is of type none and B and C are executables.
D is an executable, has no dependencies and nothing depends on it.
If |additional_compile_targets| = ["A"], |test_targets| = ["B", "C"] and
files = ["b.cc", "d.cc"] (B depends upon b.cc and D depends upon d.cc), then
the following is output:
|compile_targets| = ["B"] B must built as it depends upon the changed file b.cc
and the supplied target A depends upon it. A is not output as a build_target
as it is of type none with no rules and actions.
|test_targets| = ["B"] B directly depends upon the change file b.cc.

Even though the file d.cc, which D depends upon, has changed D is not output
as it was not supplied by way of |additional_compile_targets| or |test_targets|.

If the generator flag analyzer_output_path is specified, output is written
there. Otherwise output is written to stdout.

In Gyp the "all" target is shorthand for the root targets in the files passed
to gyp. For example, if file "a.gyp" contains targets "a1" and
"a2", and file "b.gyp" contains targets "b1" and "b2" and "a2" has a dependency
on "b2" and gyp is supplied "a.gyp" then "all" consists of "a1" and "a2".
Notice that "b1" and "b2" are not in the "all" target as "b.gyp" was not
directly supplied to gyp. OTOH if both "a.gyp" and "b.gyp" are supplied to gyp
then the "all" target includes "b1" and "b2".
iNs   Found dependencys   No dependenciess   Found dependency (all)i   i   i   i   t   INTERMEDIATE_DIRt   SHARED_INTERMEDIATE_DIRt   PRODUCT_DIRt   LIB_DIRt   SHARED_LIB_DIRs   !!!t   RULE_INPUT_PATHt   RULE_INPUT_ROOTt   RULE_INPUT_NAMEt   RULE_INPUT_DIRNAMEt   RULE_INPUT_EXTt   EXECUTABLE_PREFIXt   EXECUTABLE_SUFFIXt   STATIC_LIB_PREFIXt   STATIC_LIB_SUFFIXt   SHARED_LIB_PREFIXt   SHARED_LIB_SUFFIXt   CONFIGURATION_NAMEt    c         C   s2   t  j d k r. t  j d k r. |  j d d  S|  S(   s*   Converts a path to the format used by gyp.s   \t   /(   t   ost   sept   altsept   replace(   t   path(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt
   _ToGypPathp   s    c         C   s   d } x' |  j  d  r/ | d 7} |  d }  q	 W| t |  k rF d S| t |  k r\ |  Sd j | d t |  | ! d |  S(   s   Resolves |path|, which starts with at least one '../'. Returns an empty
  string if the path shouldn't be considered. See _AddSources() for a
  description of |base_path_components|.i    s   ../i   i   R   R   (   t
   startswitht   lent   join(   R   t   base_path_componentst   depth(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _ResolveParentw   s    
c         C   s   x |  D] } t  |  s | j d  s | j d  r> q n  | } | d | d j d d  } | j d  r t | |  } t  |  r | j |  q q n  | j | |  t r d G| G| t  |  d GHq q Wd	 S(
   s  Extracts valid sources from |sources| and adds them to |result|. Each
  source file is relative to |base_path|, but may contain '..'. To make
  resolving '..' easier |base_path_components| contains each of the
  directories in |base_path|. Additionally each source may contain variables.
  Such sources are ignored as it is assumed dependencies on them are expressed
  and tracked in some other means.s   !!!t   $i    i   s   //R   s   ../t	   AddSourceN(   R   R   R   R   t   appendt   debug(   t   sourcest	   base_pathR   t   resultt   sourcet
   org_source(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _AddSources   s    +c         C   s*   d |  k r& t  |  d | | |  n  d  S(   Nt   inputs(   R(   (   t   actionR$   R   t   results(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _ExtractSourcesFromAction   s    c         C   s?   | |  k r d S| j  |  d  r; | t |   t d  S| S(   s5   Converts |path| to a path relative to |toplevel_dir|.R   R   (   R   R   (   t   toplevel_dirR   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _ToLocalPath   s
    c         C   s   t  j t | t |     } | j d  } t |  rF | d 7} n  t r\ d G|  G| GHn  g  } d | k r t | d | | |  n  d | k r x( | d D] } t | | | |  q Wn  d | k r x( | d D] } t | | | |  q Wn  | S(   NR   t   ExtractSourcesR#   t   actionst   rules(	   t	   posixpatht   dirnameR.   R   t   splitR   R"   R(   R,   (   t   targett   target_dictR-   R$   R   R+   R*   t   rule(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _ExtractSources   s$    
t   Targetc           B   s   e  Z d  Z d   Z RS(   sA  Holds information about a particular target:
  deps: set of Targets this Target depends upon. This is not recursive, only the
    direct dependent Targets.
  match_status: one of the MatchStatus values.
  back_deps: set of Targets that have a dependency on this Target.
  visited: used during iteration to indicate whether we've visited this target.
    This is used for two iterations, once in building the set of Targets and
    again in _GetBuildTargets().
  name: fully qualified name of the target.
  requires_build: True if the target type is such that it needs to be built.
    See _DoesTargetTypeRequireBuild for details.
  added_to_compile_targets: used when determining if the target was added to the
    set of targets that needs to be built.
  in_roots: true if this target is a descendant of one of the root nodes.
  is_executable: true if the type of target is executable.
  is_static_library: true if the type of target is static_library.
  is_or_has_linked_ancestor: true if the target does a link (eg executable), or
    if there is a target in back_deps that does a link.c         C   sm   t    |  _ t |  _ t    |  _ | |  _ t |  _ t |  _ t |  _	 t |  _
 t |  _ t |  _ t |  _ d  S(   N(   t   sett   depst   MATCH_STATUS_TBDt   match_statust	   back_depst   namet   Falset   visitedt   requires_buildt   added_to_compile_targetst   in_rootst   is_executablet   is_static_libraryt   is_or_has_linked_ancestor(   t   selfR?   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   __init__   s    								(   t   __name__t
   __module__t   __doc__RI   (    (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyR9      s   t   Configc           B   s    e  Z d  Z d   Z d   Z RS(   so   Details what we're looking for
  files: set of files to search for
  targets: see file description for details.c         C   s1   g  |  _  t   |  _ t   |  _ t   |  _ d  S(   N(   t   filesR:   t   targetst   additional_compile_target_namest   test_target_names(   RH   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyRI      s    	c         C   s  | j  d i   } | j  d d  } | s. d Sy, t | d  } t j |  } | j   WnM t k
 r} t d |   n- t k
 r } t d | t	 |    n Xt
 | t  s t d   n  | j  d g   |  _ t | j  d	 g    |  _ t | j  d
 g    |  _ d S(   sf   Initializes Config. This is a separate method as it raises an exception
    if there is a parse error.t   generator_flagst   config_pathNt   rs   Unable to open file s   Unable to parse config file s7   config_path must be a JSON file containing a dictionaryRN   t   additional_compile_targetst   test_targets(   t   gett   Nonet   opent   jsont   loadt   closet   IOErrort	   Exceptiont
   ValueErrort   strt
   isinstancet   dictRN   R:   RP   RQ   (   RH   t   paramsRR   RS   t   ft   configt   e(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   Init   s$    (   RJ   RK   RL   RI   Rg   (    (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyRM      s   	c         C   s   t  | t |    | k r1 t r- d G|  GHn  t St | |  d  d k rO t Sxh | |  d d D]T } t t j j | |    } t  | |  | k rb t r d G|  Gd G| GHn  t Sqb Wt S(   s   Returns true if the build file |build_file| is either in |files| or
  one of the files included by |build_file| is in |files|. |toplevel_dir| is
  the root of the source tree.s   gyp file modifiedt   included_filesi   s%   included gyp file modified, gyp_file=s   included file=(	   R.   R   R"   t   TrueR   R@   t   gypt   commont   UnrelativePath(   t
   build_filet   dataRN   R-   t   include_filet   rel_include_file(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _WasBuildFileModified  s    c         C   s:   | |  k r t  |  | f St |  } | |  | <t | f S(   s   Creates or returns the Target at targets[target_name]. If there is no
  Target for |target_name| one is created. Returns a tuple of whether a new
  Target was created and the Target.(   R@   R9   Ri   (   RO   t   target_nameR5   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _GetOrCreateTargetByName,  s
    
c         C   s2   t  |  d d k p. |  j d  p. |  j d   S(   sB   Returns true if the target type is such that it needs to be built.t   typet   noneR0   R1   (   t   boolRW   (   R6   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _DoesTargetTypeRequireBuild7  s    c         C   sm  i  } g  } | } i  }	 t    }
 t    } x.t |  d k r[| j   } t | |  \ } } | rw |
 j |  n | j r q. n  t | _ t | |  | _ | | d } | d k | _	 | d k | _
 | d k p | d k | _ t j j |  d } | |	 k r't | |  | |  |	 | <n  | | k rC| j |  n  |	 | rod G| GHt | _ | j |  np t | | | |  } xW | D]O } t t j j |   | k rd G| Gd G| GHt | _ | j |  PqqWxv | | j d	 g   D]^ } | j |  t | |  \ } } | s4|
 j |  n  | j j |  | j j |  qWq. W| | |
 | @f S(
   s  Returns a tuple of the following:
  . A dictionary mapping from fully qualified name to Target.
  . A list of the targets that have a source file in |files|.
  . Targets that constitute the 'all' target. See description at top of file
    for details on the 'all' target.
  This sets the |match_status| of the targets that contain any of the source
  files in |files| to MATCH_STATUS_MATCHES.
  |toplevel_dir| is the root of the source tree.i    Rt   t
   executablet   static_libraryt   shared_librarys(   matching target from modified build fileR5   t   matchest   dependencies(   R:   R   t   popRs   t   addRA   Ri   Rw   RB   RE   RF   RG   Rj   Rk   t   ParseQualifiedTargetRq   t   MATCH_STATUS_MATCHESR=   R!   R8   R   R   R   t   normpathRW   t   discardR;   R>   (   Rn   t   target_listt   target_dictsR-   RN   t   build_filest   name_to_targett   matching_targetst   targets_to_visitt   build_file_in_filest   rootst   build_file_targetsRr   t   created_targetR5   t   target_typeRm   R#   R&   t   dept   created_dep_targett
   dep_target(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _GenerateTargets>  s`    				
				c         C   s   i  } | s i  g  f St  |  } x~ |  j   D]p } t j j |  } t |  d k r/ | d | k r/ | j | d  |  | | | d <| s | g  f Sq/ q/ W| g  | D] } | ^ q f S(   s   Returns a tuple of the following:
  . mapping (dictionary) from unqualified name to Target for all the
    Targets in |to_find|.
  . any target names not found. If this is empty all targets were found.i   (   R:   t   keysRj   Rk   R   R   t   remove(   t   all_targetst   to_findR%   Rr   t	   extractedt   x(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _GetUnqualifiedToTargetMapping  s    
"c         C   s   |  j  t k r t S|  j  t k s1 |  j  t k r5 t SxA |  j D]6 } t |  r? t |  _  d G|  j Gd G| j GHt Sq? Wt |  _  t S(   s   Returns true if |target| or any of its dependencies is one of the
  targets containing the files supplied as input to analyzer. This updates
  |matches| of the Targets as it recurses.
  target: the Target to look for.s   	s   matches by dep(	   R=   t   MATCH_STATUS_DOESNT_MATCHR@   R   t"   MATCH_STATUS_MATCHES_BY_DEPENDENCYRi   R;   t"   _DoesTargetDependOnMatchingTargetsR?   (   R5   R   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyR     s    		c         C   s<   g  } d GHx* |  D]" } t  |  r | j |  q q W| S(   s   Returns the list of Targets in |possible_targets| that depend (either
  directly on indirectly) on at least one of the targets containing the files
  supplied as input to analyzer.
  possible_targets: targets to search from.s#   Targets that matched by dependency:(   R   R!   (   t   possible_targetst   foundR5   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt%   _GetTargetsDependingOnMatchingTargets  s    c         C   s.  |  j  r d St |  _  |  | k |  _ xZ |  j D]O } t | | t |  |  j | j O_ |  j | j O_ |  j | j O_ q/ W|  j r*|  j s |  j r | s |  j	 s |  j
 r*| r*|  j r*d G|  j Gd G|  j Gd G|  j Gd G| Gd G|  j	 Gd G|  j
 Gd G|  j GH| j |   t |  _ n  d S(	   sa  Recurses through all targets that depend on |target|, adding all targets
  that need to be built (and are in |roots|) to |result|.
  roots: set of root targets.
  add_if_no_ancestor: If true and there are no ancestors of |target| then add
  |target| to |result|. |target| must still be in |roots|.
  result: targets that need to be built are added here.Ns   		adding to compile targetsRx   RC   t   add_if_no_ancestorRB   RF   RG   (   RA   Ri   RD   R>   t   _AddCompileTargetsR@   RC   RG   RE   RB   RF   R?   R~   (   R5   R   R   R%   t   back_dep_target(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyR     s0    				

c         C   s=   t    } x- |  D]% } d G| j GHt | | t |  q W| S(   s   Returns the set of Targets that require a build.
  matching_targets: targets that changed and need to be built.
  supplied_targets: set of targets supplied to analyzer to search from.s!   finding compile targets for match(   R:   R?   R   Ri   (   R   t   supplied_targetsR%   R5   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _GetCompileTargets  s
    	c         K   s  d | k r d G| d GHn  d | k r4 | d GHn  d | k rt | d j    d GHx | d D] } d G| GHq^ Wn  d | k r | d j    d GHx | d D] } d G| GHq Wn  d	 | k r | d	 j    d
 GHx | d	 D] } d G| GHq Wn  d | k r4| d j    d GHx | d D] } d G| GHqWn  d | k rt| d j    d GHx | d D] } d G| GHq^Wn  |  j d i   j d d  } | st j |  GHd Sy7 t | d  } | j t j |  d  | j   Wn& t k
 r	} d G| Gt	 |  GHn Xd S(   s;   Writes the output, either to stdout or a file is specified.t   errors   Error:t   statusRO   s.   Supplied targets that depend on changed files:s   	t   invalid_targetss%   The following targets were not found:t   build_targetss   Targets that require a build:t   compile_targetss   Targets that need to be built:RV   s   Test targets:RR   t   analyzer_output_pathNt   ws   
s   Error writing to output file(
   t   sortRW   RX   RZ   t   dumpsRY   t   writeR\   R]   R`   (   Rc   t   valuesR5   t   output_pathRd   Rf   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _WriteOutput  sP    c         C   sW   |  d j  rS xC |  d j  D]1 } t t j j |   | k r d G| GHt Sq Wn  t S(   sN   Returns true if one of the files in |files| is in the set of included
  files.t   optionss+   Include file modified, assuming all changed(   t   includesR   R   R   R   Ri   R@   (   Rc   RN   t   include(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _WasGypIncludeFileModified)  s    	c         C   s#   g  |  D] } | | k r | ^ q S(   sB   Returns a list of the values in |names| that are not in |mapping|.(    (   t   namest   mappingR?   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _NamesNotIn4  s    c         C   s'   g  |  D] } | | k r | | ^ q S(   sU   Returns a list of the mapping[name] for each value in |names| that is in
  |mapping|.(    (   R   R   R?   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _LookupTargets9  s    c         C   s   t  j j |  } | d k r1 |  j d d  n | d k r |  j d d  d d l j j } t | d g   } t | d g   } t  j j	 |  |  n+ | } | d k r d	 } n  |  j d |  d S(
   sD   Calculate additional variables for use in the build (called by gyp).t   mact   OSt   winiNt+   generator_additional_non_configuration_keyst"   generator_additional_path_sectionst   androidt   linux(
   Rj   Rk   t	   GetFlavort
   setdefaultt   gyp.generator.msvst	   generatort   msvst   getattrt   msvs_emulationt   CalculateCommonVariables(   t   default_variablesRc   t   flavort   msvs_generatorR   R   t   operating_system(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   CalculateVariables?  s    	t   TargetCalculatorc           B   sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   sB   Calculates the matching test_targets and matching compile_targets.c	   	      C   sy   t  |  |  _ t  |  |  _ t | | | | t |  |  \ |  _ |  _ |  _ t |  j |  j	    \ |  _
 |  _ d  S(   N(   R:   t    _additional_compile_target_namest   _test_target_namesR   t	   frozensett   _name_to_targett   _changed_targetst   _root_targetsR   t   _supplied_target_names_no_allt   _unqualified_mappingR   (	   RH   RN   RP   RQ   Rn   R   R   R-   R   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyRI   X  s    $	c         C   s   |  j  |  j BS(   N(   R   R   (   RH   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   _supplied_target_namesc  s    c         C   s   |  j    } | j d  | S(   s0   Returns the supplied test targets without 'all'.t   all(   R   R   (   RH   R%   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyR   f  s    c         C   s   |  j  S(   s;   Returns true if the supplied files impact the build at all.(   R   (   RH   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   is_build_impactedl  s    c         C   s  |  j    s t  t |  j  } | j d  t | |  j  } d |  j k } | r g  t |  t |  j  BD] } | ^ qo } n g  | D] } | ^ q } d GHx |  j D] } d G| GHq Wd GHx | D] } d G| j GHq Wd GHt	 |  } | ot |  t |  j  @}	 |	 rCg  t |  t |  @D] } | ^ q.} n  d GHx | D] } d G| j GHqOWg  | D] } t
 j j | j  d ^ ql}
 |	 r|
 j d  d GHn  |
 S(	   s'   Returns the set of output test targets.R   s   supplied test_targetss   	s   found test_targetss#   searching for matching test targetss   matched test_targetsi   s   	all(   R   t   AssertionErrorR:   R   R   R   R   R   R?   R   Rj   Rk   R   R!   (   RH   t   test_target_names_no_allt   test_targets_no_allt   test_target_names_contains_allR   RV   Rr   R5   t   matching_test_targetst"   matching_test_targets_contains_allt   matching_target_names(    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   find_matching_test_target_namesp  sB    #	 )c         C   s   |  j    s t  x  |  j j   D] } t | _ q" Wt |  j   |  j  } d |  j	   k r g  t
 |  t
 |  j  BD] } | ^ qy } n  d GHx | D] } d G| j GHq Wd GHt |  j |  } g  | D] } t j j | j  d ^ q S(   s*   Returns the set of output compile targets.R   s'   Supplied test_targets & compile_targetss   	s   Finding compile targetsi   (   R   R   R   t
   itervaluesR@   RA   R   R   R   R   R:   R   R?   R   R   Rj   Rk   R   (   RH   R5   R   R   R   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt"   find_matching_compile_target_names  s     #		(	   RJ   RK   RL   RI   R   R   R   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyR   V  s   					+c      
   C   s  t    } y| j |  | j s1 t d   n  t t j j | d j   } t	 rb d G| GHn  t
 | | j  r i t d 6t | j  d 6t | j | j B d 6} t | |  d St | j | j | j | |  | | | d  } | j   s8i t d 6g  d 6g  d 6} | j r'| j | d	 <n  t | |  d S| j   } | j   }	 |	 pY| }
 i | d 6|
 rrt n t d 6t t |	  t |  B d 6} | j r| j | d	 <n  t | |  Wn) t k
 r} t | d
 t |  n Xd S(   s2   Called by gyp as the final stage. Outputs results.s<   Must specify files to analyze via config_path generator flagR   R-   R   RV   R   NR   R   R   (   RM   Rg   RN   R^   R   R   R   t   abspathR-   R"   R   t   all_changed_stringt   listRQ   RP   R   R   R   t   no_dependency_stringR   R   R   t   found_dependency_stringR:   R`   (   R   R   Rn   Rc   Re   R-   t   result_dictt
   calculatorRQ   t   compile_target_namest   found_at_least_one_targetRf   (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   GenerateOutput  sT    		
			

	
		(2   RL   t
   gyp.commonRj   t   gyp.ninja_syntaxt   ninja_syntaxRZ   R   R2   t   sysR@   R"   R   R   R   R   R   R   R<   Rk   t   CrossCompileRequestedt$   generator_supports_multiple_toolsetst4   generator_wants_static_library_dependencies_adjustedt   generator_default_variablesR3   t   unusedR   R   R(   R,   R.   R8   t   objectR9   RM   Rq   Rs   Rw   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/gyp/generator/analyzer.pyt   <module>?   sf   							#!				V				*		-				\