o
    p.aW                     @   s  d dl mZ d dlZd dlZd dl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 ze W n ey;   eZY nw i ZdZdZdZdd Zd	d
 Zi g dddddfddZdd Zdd Zdd Zdd Zdd ZG dd dejZdd Zdd Z d d! Z!e"d"kre
#e!  dS dS )#    )print_functionN)GypErrorgeneral	variablesincludesc                 G   s   dt jv s
| t jv rBd}ztjdd}|r|d d d }W n   Y |r)||; }td|  tj|d |d |d |f  d S d S )	Nall)unknownr   r      )limitr      z%s:%s:%d:%s %s   )	gypdebug	tracebackextract_stackprintupperospathbasename)modemessageargsctxf r   ./usr/lib/python3/dist-packages/gyp/__init__.pyDebugOutput!   s   r   c                  C   s8   d} t t  }g }|D ]}|| r|| q|S )N.gyp)r   listdirgetcwdendswithappend)	extensionfilesbuild_filesfiler   r   r   FindBuildFiles/   s   

r'   .FTc	                 C   s  |du ri }d|v r| dd\}|d< t|}||d< |dd|d< |drMtj|d	 }	tj |	\}
}	tj|
}
|
tjvrLtj	d	|
 nd
| }	t
|	t t |	}|j D ]
\}}||| q_t|ddrv||| t|ddr|| t|dg t|dg t|dg t|ddt|ddt|ddt|ddd}tj| ||dd ||||||d |d 
}|g| S )z
  Loads one or more specified build files.
  default_variables and includes will be copied before use.
  Returns the generator for the specified format and the
  data returned by loading the specified build files.
  N-r   flavor	GENERATOR GENERATOR_FLAVORz.pyr   zgyp.generator.CalculateVariablesCalculateGeneratorInputInfo+generator_additional_non_configuration_keys"generator_additional_path_sections!generator_extra_sources_for_rules$generator_supports_multiple_toolsetsF4generator_wants_static_library_dependencies_adjustedT#generator_wants_sorted_dependenciesgenerator_filelist_paths)non_configuration_keyspath_sectionsextra_sources_for_rulesr3   r4   r5   r6   parallelroot_targets)splitcopygetr!   r   r   splitextabspathsysinsert
__import__globalslocalsgenerator_default_variablesitems
setdefaultgetattrr.   r/   r   inputLoad)r%   formatdefault_variablesr   depthparamscheckcircular_checkduplicate_basename_checkgenerator_namer   	generatorkeyvalgenerator_input_inforesultr   r   r   rK   9   sL   	










rK   c              	   C   sp   i }| D ]1}| dd}t|dkr/zt|d }W n ty'   |d }Y nw |||d < qd||d < q|S )z
  Takes an array of strings of the form 'NAME=VALUE' and creates a dictionary
  of the pairs.  If a string is simply NAME, then the value in the dictionary
  is set to True.  If VALUE can be converted to an integer, it is.
  =r   r	   r   T)r<   lenint
ValueError)name_value_listrX   itemtokenstoken_valuer   r   r   NameValueListToDict   s   ra   c                 C   s    t j| g }|rt|}|S N)r   environr>   shlexr<   )env_nameflagsr   r   r   ShlexEnv   s   
rg   c                 C   s   |  drd| |f S | | S )Nz--z%s=%s)
startswith)optvaluer   r   r   	FormatOpt   s   
rk   c                 C   sl   g }|j r#|r#t|D ]}t| ||}||v r|| || q|r4|D ]}|t| || q'|S )a  Regenerate a list of command line flags, for an option of action='append'.

  The |env_name|, if given, is checked in the environment and used to generate
  an initial list of options, then the options that were specified on the
  command line (given in |values|) are appended.  This matches the handling of
  environment variables and command line flags where command line flags override
  the environment, while not requiring the environment to be set when the flags
  are used again.
  )use_environmentrg   rk   remover"   )flagvalues	predicatere   optionsrf   
flag_valuerj   r   r   r   RegenerateAppendFlag   s   


rs   c              	      sD   fdd}dd }dg} j  D ]\}}|d }t |}|d dkr'|p(|}|d	 }	|d
 }
|	dkrA|t||||
  q|	dv rl|rR|t||| q jrk|
rktj	
|
rk|t||tj	
|
 q|	dv r|	dkrv|s||	dkr|s|| q jr|
rtd|	||
f tjd qtd|	|f tjd q|S )a}  Given a parsed options object, and taking the environment variables into
  account, returns a list of flags that should regenerate an equivalent options
  object (even in the absence of the environment variables.)

  Any path options will be normalized relative to depth.

  The format flag is not included, as it is assumed the calling generator will
  set that as appropriate.
  c                    s    t j|  j} | stjjS | S rb   )r   commonFixIfRelativePathrN   r   r   curdir)r   rq   r   r   FixPath   s   z RegenerateFlags.<locals>.FixPathc                 S   s   | S rb   r   )rj   r   r   r   Noop   s   zRegenerateFlags.<locals>.Noop--ignore-environmentri   typer   actionre   r"   )storeN)
store_truestore_falser~   r   zJWarning: environment regeneration unimplemented for %s flag %r env_name %r)r&   z9Warning: regeneration unimplemented for action %r flag %r)_regeneration_metadatarG   rI   extendrs   r"   rk   rl   r   rc   r>   r   rA   stderr)rq   rx   ry   rf   namemetadatari   rj   value_predicater|   re   r   rw   r   RegenerateFlags   sL   


r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )RegeneratableOptionParserc                 C   s   i | _ tj|  d S rb   )1_RegeneratableOptionParser__regeneratable_optionsoptparseOptionParser__init__)selfr   r   r   r      s   z"RegeneratableOptionParser.__init__c                 O   s~   | dd}d|v r0| ddr0|d }|d}|dkr!d|d< |d	|||d
 d| j|< tjj| g|R i | dS )a  Add an option to the parser.

    This accepts the same arguments as OptionParser.add_option, plus the
    following:
      regenerate: can be set to False to prevent this option from being included
                  in regeneration.
      env_name: name of environment variable that additional values for this
                option come from.
      type: adds type='path', to tell the regenerator that the values of
            this option need to be made relative to options.depth
    re   Ndest
regenerateTr{   r   stringr|   r   )r|   r{   re   ri   )popr>   r   r   r   
add_option)r   r   kwre   r   r{   r   r   r   r      s   
z$RegeneratableOptionParser.add_optionc                 G   s(   t jj| g|R  \}}| j|_||fS rb   )r   r   
parse_argsr   r   )r   r   ro   r   r   r   r     s   z$RegeneratableOptionParser.parse_argsN)__name__
__module____qualname__r   r   r   r   r   r   r   r      s    r   c           "      C   s  t jtjd }t }d}||dd |jddddd	 |jd
dddd	 |jddddd dd |jdddddg dd |jddddddd |jd d!d"d#d$d% |jd&d'd(dd)d*d+d, |jd-d.dg d/d0d1d2 |jd3d4dd d5d#d6d7d8 |jd9d:d;d<d*d=d> |jd?d@dAddBd#dCdD |jdEdFd;d<d*dGd> |jdHdId;d<d*dJd> |jdKdd*dLdM |jdNdOdPdQdRdS |jdTdUdd d5d#dVdW |jdXdYdZdd[d\d] |	| \}}|}|j
s*d }d }|jrt jdd }|rt j|}|s)d^g}	tjd_v r|	d` |	D ]!}
t |
}|d kr't j|da}t j|s%d }q nqnt j|j
}|r=t j|s=d }|jsxg }|jrNt jd)g }|rWtdb|}|r^||_ntjdckriddg|_ntjdev rtdfg|_ndgg|_|js|jrt jd6}|r||_|j |_|jD ]}dhtj|< qttjv rttdi t|j  D ]$\}}|d djkrqt!|t"rttdk|| qttdl|| q|st# }|st$|dm ||f |j%s*|D ]4}t j&t j'|}|t jj(}t)|D ]}|dnkrt jj(||_% n|do= q|j%r  nq|j%s*t$dp|j*s2|j%|_*i }g }|jr@|t+d7 }|j,rI||j,7 }t-|}ttjv rYttdq| g }|d kryt j|dr}t j|ryt.ds|  || |j/r|0|j/ g }|jr|t+d07 }|j1r||j17 }t-|}ttjv rttdt| t2|jD ]]}|||t 3 |tjd ||j|j4|dudQdv
}t5|||||j%||j6|j7|j8	\}}}}|9|||| |j:r	||d  dw } |j:D ]}!|!| vrt$dx|! q|;||j:| qdS )yNr   z(usage: %s [options ...] [build_file ...]z%sz%progz--buildconfigsr"   z0configuration for build after project generation)r   r|   helpz--checkrP   r~   zcheck format of gyp filesz--config-dir
config_dirr}   GYP_CONFIG_DIRz7The location for configuration files like include.gypi.)r   r|   re   defaultr   z-dz--debugr   	DEBUGMODEzturn on a debugging mode for debugging GYP.  Supported modes are "variables", "includes" and "general" or "all" for all of them.)r   metavarr|   r   r   z-DdefineszVAR=VALGYP_DEFINESzsets variable VAR to value VAL)r   r|   r   re   r   z--depthrN   PATHr   z1set DEPTH gyp variable to a relative path to PATH)r   r   r{   r   z-fz--formatformatsGYP_GENERATORSFzoutput formats to generate)r   r|   re   r   r   z-Ggenerator_flagszFLAG=VALGYP_GENERATOR_FLAGSzsets generator flag FLAG to VAL)r   r|   r   r   re   r   z--generator-outputgenerator_outputDIRGYP_GENERATOR_OUTPUTz$puts generated build files under DIR)r   r|   r   r   r{   re   r   rz   rl   r   Tz.do not read options from environment variables)r   r|   r   r   r   z-Iz	--includer   INCLUDEz)files to include in all loaded .gyp files)r   r|   r   r{   r   z--no-circular-checkrQ   z4don't check for circular relationships between filesz--no-duplicate-basename-checkrR   z#don't check for duplicate basenamesz--no-parallelzDisable multiprocessing)r|   r   r   z-Sz--suffixsuffixr,   z suffix to add to generated files)r   r   r   z--toplevel-dirtoplevel_dirz/directory to use as the root of the source tree)r   r|   r   r   r{   r   z-Rz--root-targetr;   TARGETz-include only TARGET and its deep dependencies)r   r|   r   r   HOME)cygwinwin32USERPROFILEr   z[\s,]darwinxcode)r   r   msvsmaker   zrunning with these options:_z
  %s: '%s'z  %s: %sz

%s: error: no build_filesrczCould not automatically locate src directory.  This isa temporary Chromium feature that will be removed.  Use--depth as a workaround.zcmdline_default_variables: %szinclude.gypizUsing overrides found in zgenerator_flags: %starget_arch)
rq   r%   r   cwdbuild_files_arg
gyp_binaryhome_dot_gypr:   r;   r   configurationsz(Invalid config specified via --build: %s)<r   r   r   rA   argvr   	set_usagereplacer   r   r   rl   rc   r>   
expanduserplatformr"   getenvjoinexistsr   rer<   r   no_parallelr:   r   r   DEBUG_GENERALr   sorted__dict__rG   
isinstance
basestringr'   r   rN   r@   dirnamesepreversedr   rg   r   ra   r   r   r   r   setr    r;   rK   rP   rQ   rR   GenerateOutputr   PerformBuild)"r   my_nameparserusagerq   r   r%   homer   	home_varshome_vargenerate_formatsg_or   optionrj   
build_filebuild_file_dirbuild_file_dir_components	componentcmdline_default_variablesr   r   default_include	gen_flagsr   rL   rO   rT   	flat_listtargetsdatavalid_configsconfr   r   r   gyp_main  s  



	










	









r   c              
   C   sB   zt | W S  ty  } ztjd|  W Y d }~dS d }~ww )Nzgyp: %s
r   )r   r   rA   r   write)r   er   r   r   main  s   
r   c                   C   s   t tjdd  S )Nr   )r   rA   r   r   r   r   r   script_main'  s   r   __main__)$
__future__r   r=   	gyp.inputr   r   os.pathr   r   rd   rA   r   
gyp.commonr   r   	NameErrorstrr   r   DEBUG_VARIABLESDEBUG_INCLUDESr   r'   rK   ra   rg   rk   rs   r   r   r   r   r   r   r   exitr   r   r   r   <module>   sN   

S3)  