
    擖g$                        S SK r S SKr S SKJs  Jr  S SKrS SKrS SKr0 SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"0ErS#r	S$S%/r
/ r/ rS&rS'rS(S)S*S+.rS, rS- r0 r0 r " S. S/5      rS0 rS1 rg)2    NOSandroidEXECUTABLE_PREFIX EXECUTABLE_SUFFIXSTATIC_LIB_PREFIXlibSHARED_LIB_PREFIXSTATIC_LIB_SUFFIX.aSHARED_LIB_SUFFIX.soINTERMEDIATE_DIR$(gyp_intermediate_dir)SHARED_INTERMEDIATE_DIR$(gyp_shared_intermediate_dir)PRODUCT_DIRSHARED_LIB_DIRz$(builddir)/lib.$(TOOLSET)LIB_DIRz$(obj).$(TOOLSET)RULE_INPUT_ROOT%(INPUT_ROOT)sRULE_INPUT_DIRNAME%(INPUT_DIRNAME)sRULE_INPUT_PATH$(RULE_SOURCES)RULE_INPUT_EXTz$(suffix $<)RULE_INPUT_NAMEz$(notdir $<)CONFIGURATION_NAMEz$(GYP_CONFIGURATION)Tandroid_unmangled_nameaosp_build_settingsz# "gyp_all_modules" is a concatenation of the "gyp_all_modules" targets from
# all the included sub-makefiles. This is just here to clarify.
gyp_all_modules:
z/# This file is generated by gyp; do not edit.

STATIC_LIBRARIESSHARED_LIBRARIESEXECUTABLES)static_libraryshared_library
executablec                 F    [         R                  R                  U 5      S:H  $ )Ncxx)makeCOMPILABLE_EXTENSIONSget)exts    7/usr/lib/python3/dist-packages/gyp/generator/android.pyIsCPPExtensionr.   P   s    %%))#.%77    c                     U $ )zConvert a path to its source directory form. The Android backend does not
support options.generator_output, so this function is a noop. )paths    r-   	Sourceifyr3   T   s	     Kr/   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rSS\R.                  S4S jrSS jrS rS rSrg)AndroidMkWriterf   zAndroidMkWriter packages up the writing of one target-specific Android.mk.

Its only real entry point is Write(), and is mostly used for namespacing.
c                     Xl         g )N)android_top_dir)selfr8   s     r-   __init__AndroidMkWriter.__init__l   s    .r/   c
                 
   [         R                  R                  U5        [        US5      U l        U R                  R                  [        5        Xl        X l        X0l	        US   U l
        US   U l        US   U l        U R                  U5      u  p/ n/ n[        R                  U R                  S5      U l        U R#                  U5      U l        U R'                  U5      u  U l        U l        U R-                  U5      =U l        U l        U R3                  S5        U R3                  SU R                   -   5        U R3                  SU R$                  -   5        U R(                  U R$                  :w  a  U R3                  S	U R(                  -   5        U R3                  S
U R*                  -   5        U R                  S:X  a#  U R3                  S5        U R3                  S5        O+U	S:  a%  U R3                  S5        U R3                  SU	-  5        U R                  S:X  a  U R3                  S5        OU R3                  S5        U R3                  S5        U R3                  5         U
 Vs/ s H  oS   S:X  d  M  US   PM     nnU R3                  S5        U R5                  USSS9  SU;   a  U R7                  US   X5        SU;   a  U R9                  US   X5        SU;   a  U R;                  US   U5        U R5                  USSS9  U R3                  S5        U R3                  S5        U R3                  5         UR                  S / 5      (       d  U(       a  U R=                  XVU5        U R?                  XVXXx5        SU R0                  4[@        U'   U R                  S!:X  a  S"U R$                  4[B        U'   O%U R                  S#:X  a  S$U R$                  4[B        U'   U R                  RE                  5         U R$                  $ s  snf )%aR  The main entry point: writes a .mk file for a single target.

Arguments:
  qualified_target: target we're generating
  relative_target: qualified target name relative to the root
  base_path: path relative to source root we're building in, used to resolve
             target-relative paths
  output_filename: output .mk file name to write
  spec, configs: gyp info
  part_of_all: flag indicating this target is part of 'all'
  write_alias_target: flag indicating whether to create short aliases for
                      this target
  sdk_version: what to emit for LOCAL_SDK_VERSION in output
wtarget_nametypetoolsetGYPzinclude $(CLEAR_VARS)
zLOCAL_MODULE_CLASS := zLOCAL_MODULE := zLOCAL_MODULE_STEM := zLOCAL_MODULE_SUFFIX := hostzLOCAL_IS_HOST_MODULE := truez&LOCAL_MULTILIB := $(GYP_HOST_MULTILIB)r   z;LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)zLOCAL_SDK_VERSION := %szOgyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_HOST_VAR_PREFIX))zJgyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))z[gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))r2      z%# Make sure our deps are built first.GYP_TARGET_DEPENDENCIEST)local_pathifyactionsrulescopiesGYP_GENERATED_OUTPUTSz9# Make sure our deps and generated files are built first.zTLOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)sourcesr$   staticr%   shared)#gypcommonEnsureDirExistsopenfpwriteheaderqualified_targetrelative_targetr2   targetr?   r@   ComputeDepsMODULE_CLASSESr+   android_classComputeAndroidModuleandroid_moduleComputeOutputPartsandroid_stemandroid_suffixComputeOutputoutputoutput_binaryWriteLn	WriteListWriteActions
WriteRulesWriteCopiesWriteSourcesWriteTargettarget_outputstarget_link_depsclose)r9   rT   rU   	base_pathoutput_filenamespecconfigspart_of_allwrite_alias_targetsdk_versiondeps	link_depsextra_outputsextra_sourcesxtarget_dependenciess                   r-   WriteAndroidMkWriter.Writeo   s   4 	

""?3,f 0.	=)L	I**40
 +//		5A"77=373J3J43P0	D/+/+=+=d+CCd( 	./ 	-0B0BBC'$*=*==>  3 33LL043D3DDE.1D1DDE<<6!LL78LLAB1_LLP LL2[@A <<6!LLJ
 LLE 	K	
 	
 .2DTqTV^tqtTD<=!:$ 	 	

 d9o}L d?OODM=HtT(^]; 	}&=TR 	PQ'	
 	 88Ir""md];4K	

 -3D4F4F+G'( 99((2:D<O<O1P-.YY**2:D<O<O1P-."""_ Es   &P 6	P c                    U GHY  n[         R                  " SR                  U R                  US   5      5      nU R	                  SUS   -  5        US   nUS   n[        5       nU Hs  n	U	R                  S5      (       d  [        SU R                  < SU	< S	35        [        R                  R                  U	5      S
   n
U
(       d  Mb  UR                  U
5        Mu     [        UR                  SS5      5      (       a  X'-  n[        R                   R#                  US   5      nSU;   a	  SUS   -  nOSU-  n[%        U5      S
:  a  SSR'                  U5      -  S-   U-   nSU R                  -  nX-   n[         R(                  " U R+                  US
   5      5      nU R	                  SU-  5        U R	                  SU-  5        U R	                  SU-  5        U R	                  SU-  5        U R	                  SU-  5        U HS  nUR                  S5      (       a  M  SU;   d  M#  [        R                   R-                  SU< SU R                  < S35      e   U HS  nUR                  S5      (       a  M  SU;   d  M#  [        R                   R-                  SU< SU R                  < S35      e   U R	                  U< SSR'                  [/        U R*                  U5      5      < S35        U R	                  S U-  5        U R	                  S!U-  5        US"S#  H)  nU R	                  U R+                  U5       SU S$35        M+     X7-  nU R	                  5         GM\     U R	                  5         g#)%aE  Write Makefile code for any 'actions' from the gyp input.

extra_sources: a list that will be filled in with newly generated source
               files, if any
extra_outputs: a list that will be filled in with any outputs of these
               actions (used to make other pieces dependent on these
               actions)
{}_{}action_namez### Rules for action "%s":inputsoutputs$zWARNING: Action for target "z" writes output to local path "z".r   process_outputs_as_sourcesFactionmessagezGyp action: %s ($@)mkdir -p %s ; cd $(gyp_local_path)/%s; #%s: gyp_local_path := $(LOCAL_PATH)'%s: gyp_var_prefix := $(GYP_VAR_PREFIX)>%s: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))L%s: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir));%s: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))$(zAction input filename "z" in target z contains a spacezAction output filename ":  $(GYP_TARGET_DEPENDENCIES)z	@echo "%s"z	$(hide)%s
rC   N ;)r)   StringToMakefileVariableformatrU   rb   set
startswithprintrV   osr2   splitaddintr+   rM   rN   EncodePOSIXShellListlenjoinQuoteSpacesLocalPathifyGypErrormap)r9   rF   rv   ru   r   namer~   r   dirsoutdircommand	quiet_cmd	cd_actionmain_outputinputr`   s                    r-   rd   AndroidMkWriter.WriteActions   s-    F00t33VM5JKD LL5}8MMNH%FY'G 5D~~c**#';;5 ggmmC(+3HHSM  6:::EBCC( jj55fX6FGGF"1F94EE	1D8	4y1}'#((4.84?'I3dii?I)G **4+<+<WQZ+HIKLL>LMLLB[PQLL57BC LL<>IJ LLM  ''--#,**-- $++/    "((..3&=**--!4;;0  " LLT->->)G HJ LL)34LL723!!"+  1 1& 9:"[MLM &
 $MLLN{ ~ 	r/   c                    [        U5      S:X  a  gU GH  n[        UR                  S/ 5      5      S:X  a  M%  [        R                  " SR	                  U R
                  US   5      5      nU R                  SU-  5        U R                  SU-  5        UR                  S5      nUR                  S/ 5       GH  n[        R                  R                  U5      u  p[        R                  R                  U	5      u  pUS	    Vs/ s H  nU R                  XU5      PM     nn[        5       nU Ho  nUR                  S
5      (       d  [        SU R                  < SU< 35        [        R                  R!                  U5      nU(       d  M^  UR#                  U5        Mq     X=-  n[%        UR                  SS5      5      (       a  UR'                  U5        / nUS    H>  nU R                  UX5      nSU;   a  UR)                  SU5      nUR+                  U5        M@     [,        R.                  R1                  U5      nSU R                  -  nUU-   nU(       a  SSR3                  U5      -  S-   U-   n[5        U R6                  U5      nUS   nU R                  SU-  5        U R                  SU-  5        U R                  SU-  5        U R                  SU-  5        U R                  SU-  5        U R7                  U5      nU(       a9  US-  nUSR3                  U Vs/ s H  nU R7                  U5      PM     sn5      -  nU R                  U< SU< S35        U R                  SU-  5        USS  H  nU R                  U SU S35        M     U R                  5         GM     GM     U R                  5         gs  snf s  snf )a0  Write Makefile code for any 'rules' from the gyp input.

extra_sources: a list that will be filled in with newly generated source
               files, if any
extra_outputs: a list that will be filled in with any outputs of these
               rules (used to make other pieces dependent on these rules)
r   Nrule_sourcesr|   	rule_namez
### Generated for rule "%s":z# "%s":r~   r   r   zWARNING: Rule for target  writes output to local path r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   z	%s
rC   r   )r   r+   r)   r   r   rU   rb   r   r2   r   splitextExpandInputRootr   r   r   rV   dirnamer   r   extendreplaceappendrM   rN   r   r   r   r   )r9   rG   rv   ru   ruler   r~   rule_sourcerule_source_dirnamerule_source_basenamerule_source_rootrule_source_extr   r   r   r   
components	componentr   r   r   main_output_depsfr`   s                           r-   re   AndroidMkWriter.WriteRulesg  s    u:?D488NB/0A500t33T+5FGD LL9D@ALLT)*XXh'F#xx;>@ggmmK>X;$68gg6F6F(73!  $I. ((@ST.  
 u"C>>#..#{{C1 ''//#.Cs # (txx <eDEE!((1
!%hI $ 4 4!#3!I )I5$-$5$56G$U	%%i0 "0 **99*E7$))C	#g-+chhtn<tCgMG d//9%ajB[PQFTU9;FG @BMN ?ALM
 $(#4#4[#A $+$$PV1WPV1$2C2CA2FPV1W(XX$"$46 X/0%abkF LLF82k]"!=> * W  < n 	Ot 2Xs   N=Oc                    U R                  S5        [        R                  " U R                  S-   5      n/ nU GH-  nUS    GH  nUS   R	                  S5      (       d   [        SU R                  < SUS   < 35        [        U R                  U5      5      n[        R                  R                  U5      S   n[        U R                  [        R                  R                  US   U5      5      5      nU R                  U S	U S
35        U R                  S5        U R                  S5        U R                  S5        U R                  5         UR                  U5        GM"     GM0     U R                  SR                  USR                  [        [        R                   U5      5      5      5        UR                  SU-  5        U R                  5         g)zWrite Makefile code for any 'copies' from the gyp input.

extra_outputs: a list that will be filled in with any outputs of this action
               (used to make other pieces dependent on this action)
z### Generated for copy rule._copiesfilesdestinationr   zWARNING: Copy rule for target r   rC   r   z$ $(GYP_TARGET_DEPENDENCIES) | $(ACP)z	@echo Copying: $@	$(hide) mkdir -p $(dir $@)z	$(hide) $(ACP) -rpf $< $@z{} = {}r   z$(%s)N)rb   r)   r   rU   r   r   rV   r3   r   r   r2   r   r   r   r   r   r   )	r9   rH   ru   variabler   copyr2   filenamer`   s	            r-   rf   AndroidMkWriter.WriteCopies  s    	34001E1E	1QRDW M*55c::+/;;]8KM !!2!24!8977==.q1"%%bggll43F&QR xr$/STU23;<:;v&1 & 4 	XsxxD4D4Dg0N'OP	
 	Wx/0r/   c                    [        UR                  5       5       GHc  u  p4/ nU R                  S5        U R                  UR	                  S/ 5      UR	                  S/ 5      -   5      u  pgUR                  U5        U R                  USU-  5        U R                  UR	                  S5      SU-  S[        R                  S9  U R                  S	5        [        UR	                  S
/ 5      5      nUR                  U5        [        [        [        U R                  U5      5      nU R                  U5      nU R                  USU-  5        U R                  S5        U R                  UR	                  S5      SU-  5        GMf     U R                  S5        U R                  S:X  a"  U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g)zWrite out the flags and include paths used to compile source files for
the current target.

Args:
  spec, configs: input from gyp.
z(
# Flags passed to both C and C++ files.cflagscflags_czMY_CFLAGS_%sdefinesz
MY_DEFS_%sz-D)prefixquoterz.
# Include paths placed before CFLAGS/CPPFLAGSinclude_dirszLOCAL_C_INCLUDES_%sz.
# Flags passed to only C++ (and not C) files.	cflags_cczLOCAL_CPPFLAGS_%szR
LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))rB   z## Undefine ANDROID for host moduleszLOCAL_CFLAGS += -UANDROIDz]LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))z8LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))z LOCAL_ASFLAGS := $(LOCAL_CFLAGS)N)sorteditemsrb   ExtractIncludesFromCFlagsr+   r   rc   r)   EscapeCppDefinelistr   r3   r   NormalizeIncludePathsr@   )	r9   rn   ro   
confignameconfigextracted_includesr   includes_from_cflagsincludess	            r-   WriteSourceFlags AndroidMkWriter.WriteSourceFlags  s    #)"9J!#LLDE+/+I+I

8R(6::j"+EE,(F %%&:;NN6>J#>?NN

9%z)++	   LLJKFJJ~r:;HOO./9c$*;*;X&FGH11(;HNN8%:Z%GHLLJKNN6::k24G*4TU3 #:6 	.	
 <<6!LL>?LL457	
 	OP 	78r/   c           	      x   [        [        R                  UR                  S/ 5      5      nU Vs/ s H"  n[        R                  " U5      (       a  M   UPM$     nn[        [        R                  U5      nXC-   nSnU H8  n	[        R
                  R                  U	5      u  p[        U5      (       d  M6  Un  O   US:w  a  U R                  SU-  5        / nU H  n	[        R
                  R                  U	5      u  pSU	;   a  UR                  U	5        M=  SU	;   a  UR                  U	5        MV  [        U5      (       a  X:w  a  UR                  U	5        M~  UR                  [        R
                  R                  [        R
                  R                  U R
                  U	5      5      5        M     / n/ nU H  n	U	nSU;  a$  [        R
                  R                  U5      nSU-   n[        R
                  R                  U5      u  p[        U5      (       a	  X:w  a  X-   nX:w  ad  U R                  U SU R                  U	5       35        U R                  S5        UR                  [        R
                  R                  U	5      5        UR                  U5        M     UR                  U5        U R!                  US	5        ["        R$                  R'                  U5      n[)        [*        [)        U R                  U5      5      nU R!                  US
5        U R!                  US5        U R-                  X5        gs  snf )a  Write Makefile code for any 'sources' from the gyp input.
These are source files necessary to build the current target.
We need to handle shared_intermediate directory source files as
a special case by copying them to the intermediate directory and
treating them as a generated sources. Otherwise the Android build
rules won't pick them up.

Args:
  spec, configs: input from gyp.
  extra_sources: Sources generated from Actions or Rules.
rJ   z.cppzLOCAL_CPP_EXTENSION := %sr   r   z$(gyp_intermediate_dir)/r   z	mkdir -p $(@D); cp $< $@LOCAL_GENERATED_SOURCESGYP_COPIED_SOURCE_ORIGIN_DIRSLOCAL_SRC_FILESN)filterr)   
Compilabler+   r   r2   r   r.   rb   r   normpathr   basenamer   r   r   rc   rM   rN   uniquerr   r3   r   )r9   rn   ro   rv   rJ   rw   generated_not_sourcesall_sourceslocal_cpp_extensionsourcerootr,   local_filesfinal_generated_sourcesorigin_src_dirs
local_filer   s                    r-   rg   AndroidMkWriter.WriteSources*  s    $((9b*AB,9 TMqQRASM Tt> -$!F''**62KTc""&)#	 "
 &(LL47JJK F''**62KT/69$$V,*f4$$V,$$)C$$V,""277#3#3BGGLLF4S#TU " #% #FJ);77++J77(B
''**:6KTc""s'A!7
#
|2d.?.?.G-HIJ9:&&rwwv'>?#**:6 $  	 &&'<=.0IJ**,,_=iT->->)PQ(GH{$56 	d,M !Us   L7L7c                    [        UR                  SS5      5      (       a>  U R                  S:w  d"  U R                  R	                  S5      (       d   eU R                  $ U R                  S:X  a  SnOSnUS   S:X  a  S	nOS
nU R
                  (       a0  [        R                  " U R
                   SU R                   35      nO [        R                  " U R                  5      nSR                  X$U/5      $ )zReturn the Android module name used for a gyp spec.

We use the complete qualified target name to avoid collisions between
duplicate targets in different directories. We also add a suffix to
distinguish gyp-generated module names.
r   r   r%   r	   lib_r   r@   rB   z)_$(TARGET_$(GYP_VAR_PREFIX)ARCH)_host_gyp_gyp_)	r   r+   r?   rV   r   r2   r)   r   r   )r9   rn   r   suffixmiddles        r-   rZ   $AndroidMkWriter.ComputeAndroidModule  s     txx0!45599 00DKK4J4J54Q4QQQ;;99(( FF	?f$@FF9922dii[$++3OPF224;;?Fww/00r/   c                    U R                   S:w  d   eUS   nSnSnU R                   S:X  a  U R                  U5      nSnO`U R                   S:X  a  U R                  U5      nSnO<U R                   S:X  a  S	nO)U R                   S
:w  a  [        SSU R                   SU5        U R                   S;  aA  UR                  SU5      nUR                  SU5      nUR                  S5      nU(       a  SU-   nX2-   nXd4$ )a-  Return the 'output basename' of a gyp spec, split into filename + ext.

Android libraries must be named the same thing as their module name,
otherwise the linker can't find them, so product_name and so on must be
ignored if we are building a library, and the "lib" prepending is
not done for Android.
loadable_moduler>   r   r$   r   r%   r   nonez.stampr&   z,ERROR: What output file should be generated?r?   rV   >   r%   r$   product_prefixproduct_nameproduct_extension.)r?   rZ   r   r+   )r9   rn   rV   target_prefix
target_extproduct_exttarget_stems          r-   r\   "AndroidMkWriter.ComputeOutputParts  s    yy----m$
99((..t4FJYY**..t4FJYY& !JYY,&>		 99@@ HH%5}EMXXnf5F((#67K ;.
#,((r/   c                 B    SR                  U R                  U5      5      $ )zReturn the 'output basename' of a gyp spec.

E.g., the loadable module 'foobar' in directory 'baz' will produce
  'libfoobar.so'
r   )r   r\   )r9   rn   s     r-   ComputeOutputBasename%AndroidMkWriter.ComputeOutputBasename  s     wwt..t455r/   c                    U R                   S:X  a  SnO|U R                   S:X  a  U R                  S:X  a  SnOYSnOVU R                  S:X  a   SU R                  < SU R                  < S	3nO&S
R	                  U R                  U R                  5      nUR                  S5      b   e[        R                  R                  X R                  U5      5      $ )zReturn the 'output' (full output path) of a gyp spec.

E.g., the loadable module 'foobar' in directory 'baz' will produce
  '$(obj)/baz/libfoobar.so'
r&   r   r%   rB   z8$($(GYP_HOST_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES)z5$($(GYP_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)z$(call intermediates-dir-for,,z,true,,$(GYP_HOST_VAR_PREFIX))z7$(call intermediates-dir-for,{},{},,,$(GYP_VAR_PREFIX))product_dir)
r?   r@   rY   r[   r   r+   r   r2   r   r  )r9   rn   r2   s      r-   r_   AndroidMkWriter.ComputeOutput  s     99$ 4DYY**||v%QN ||v% ))4+>+>@  QWW&&''
 xx&...ww||D"<"<T"BCCr/   c                     / nU HF  nUS   S:X  a)  [         R                  R                  X0R                  5      nUR	                  U5        MH     U$ )zNormalize include_paths.
Convert absolute paths to relative to the Android top directory.

Args:
  include_paths: A list of unprocessed include paths.
Returns:
  A list of normalized include paths.
r   /)rM   rN   RelativePathr8   r   )r9   include_paths
normalizedr2   s       r-   r   %AndroidMkWriter.NormalizeIncludePaths  sN     
!DAw#~zz..t5I5IJd# " r/   c                     / n/ nU H@  nUR                  S5      (       a  UR                  USS 5        M/  UR                  U5        MB     X#4$ )zExtract includes "-I..." out from cflags

Args:
  cflags: A list of compiler flags, which may be mixed with "-I.."
Returns:
  A tuple of lists: (clean_clfags, include_paths). "-I.." is trimmed.
z-I   N)r   r   )r9   r   clean_cflagsr  flags        r-   r   )AndroidMkWriter.ExtractIncludesFromCFlags  sT     Dt$$$$T!"X.##D)	  ,,r/   c                    / n/ n/ nU H  nUR                  5        H  nUS:X  d"  US:X  d  US:X  d  UR                  S5      (       a  M-  [        R                  " SU5      nU(       a"  UR	                  UR                  S5      5        Mm  [        R                  " SU5      nU(       a"  UR	                  UR                  S5      5        M  UR                  S5      (       d  M  UR	                  U5        M     M     X#U4$ )	aL  Filter the 'libraries' key to separate things that shouldn't be ldflags.

Library entries that look like filenames should be converted to android
module names instead of being passed to the linker as flags.

Args:
  libraries: the value of spec.get('libraries')
Returns:
  A tuple (static_lib_modules, dynamic_lib_modules, ldflags)
z-lcz-lstdc++z-lmzlibgcc.az([^/]+)\.a$rC   z([^/]+)\.so$z-l)r   endswithresearchr   groupr   )r9   	librariesstatic_lib_modulesdynamic_lib_modulesldflagslibsr	   matchs           r-   FilterLibrariesAndroidMkWriter.FilterLibraries  s       Dzz| 5Lj(e|||J//		.#6&--ekk!n=		/37'..u{{1~>>>$''NN3'' $ , #AAr/   c                    / n/ nSU;   a}  UR                  US    Vs/ s H  n[        U   (       d  M  [        U   PM     sn5        US    H'  nU[        ;   d  M  UR                  [        U   5        M)     UR                  U5        [        R
                  R                  U5      [        R
                  R                  U5      4$ s  snf )zCompute the dependencies of a gyp spec.

Returns a tuple (deps, link_deps), where each is a list of
filenames that will need to be put in front of make for either
building (deps) or linking (link_deps).
dependencies)r   ri   rj   r   rM   rN   r   )r9   rn   rs   rt   deps        r-   rW   AndroidMkWriter.ComputeDeps6  s     	T!KK  $N33%c* (N3'3 N+**$$%5c%:; , KK	"

""4(#***<*<Y*GHHs
   CCc                    [         R                  R                  UR                  S/ 5      5      nU R	                  U5      u  pVnU R
                  S:w  a  [        UR                  5       5       HF  u  p[        U	R                  S/ 5      5      n
U R                  S5        U R                  U
SU-  5        MH     U R                  US5        U R                  S5        U R
                  S:w  a?  U Vs/ s H  oS   S	:X  d  M  US
   PM     nnU Vs/ s H  oS   S:X  d  M  US
   PM     nnO/ n/ nU(       d  U(       aG  U R                  S5        U R                  X\-   S5        U R                  S5        U R                  S5        U(       d  U(       a&  U R                  S5        U R                  Xm-   S5        ggs  snf s  snf )zWrite Makefile code to specify the link flags and library dependencies.

spec, configs: input from gyp.
link_deps: link dependency list; see ComputeDeps()
r  r$   r  r   zLOCAL_LDFLAGS_%sLOCAL_GYP_LIBSzHLOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) $(LOCAL_GYP_LIBS)r   rK   rC   rL   LOCAL_STATIC_LIBRARIESz,# Enable grouping to fix circular referencesz$LOCAL_GROUP_STATIC_LIBRARIES := trueLOCAL_SHARED_LIBRARIESN)rM   rN   r   r+   r!  r?   r   r   r   rb   rc   )r9   rn   ro   rt   r  static_libsdynamic_libsldflags_libsr   r   r  rw   static_link_depsshared_link_depss                 r-   WriteTargetFlags AndroidMkWriter.WriteTargetFlagsM  s    JJ&&txxR'@A	262F2Fy2Q/<99((&,W]]_&="
vzz)R89R w(:Z(GH '> NN<)9:LL$ 99((.7LiQ48;K!iL.7LiQ48;K!iL!! *LLNN;9;STLLGHLL?@+LLNN<:<TU ,  MLs   .F7>	F7F<	F<c                    U R                  S5        U R                  S:w  a  U R                  XU5        UR                  S0 5      nU(       a  U R                  S5        UR	                  5        HW  u  p[        U	[        5      (       a  U R                  X5        M-  U R                  U S[        R                  " U	5       35        MY     U R                  S5        U(       aX  U(       aQ  U R                  S5        U R                  S5        U R                  S	U R                  -  5        U R                  S5        U R                  U R                  :w  aq  U(       aj  U R                  S
5        U R                  SU R                  -  5        U R                  U R                   SU R                   35        U R                  S5        Sn
U R                  S:X  a  Sn
U R                  S:X  a  U R                  SU
-  5        g#U R                  S:X  a&  U R                  S5        U R                  SU
-  5        g#U R                  S:X  a7  U R                  S5        U R                  S5        U R                  SU
-  5        g#U R                  S5        U R                  S5        U R                  S:X  a  U R                  S5        OU R                  S5        U R                  5         U R                  S5        U R                  5         U R                  S5        U R                  S5        U R                  S 5        U R                  S!5        U R                  5         U R                  S"5        g#)$a8  Write Makefile code to produce the final target of the gyp spec.

spec, configs: input from gyp.
deps, link_deps: dependency lists; see ComputeDeps()
part_of_all: flag indicating this target is part of 'all'
write_alias_target: flag indicating whether to create short aliases for this
                    target
z### Rules for final target.r   r    z(### Set directly by aosp_build_settings.z := r   z/# Add target alias to "gyp_all_modules" target.z.PHONY: gyp_all_moduleszgyp_all_modules: %sz# Alias gyp target name.z
.PHONY: %sr   rB   HOST_r$   z!include $(BUILD_%sSTATIC_LIBRARY)r%   zLOCAL_PRELINK_MODULE := falsez!include $(BUILD_%sSHARED_LIBRARY)r&   zLOCAL_CXX_STL := libc++_staticz3LOCAL_MODULE_PATH := $(gyp_shared_intermediate_dir)zinclude $(BUILD_%sEXECUTABLE)z-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stampz"LOCAL_UNINSTALLABLE_MODULE := truerV   z.LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)z3LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_HOST_VAR_PREFIX)z%include $(BUILD_SYSTEM)/base_rules.mkz7$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)z!	$(hide) echo "Gyp timestamp: $@"r   z	$(hide) touch $@zLOCAL_2ND_ARCH_VAR_PREFIX :=N)rb   r?   r0  r+   r   
isinstancer   rc   r)   QuoteIfNecessaryr[   rV   r@   )r9   rn   ro   rs   rt   rp   rq   settingskvmodifiers              r-   rh   AndroidMkWriter.WriteTargetx  s    	2399!!$;88126LLCD (a&&NN1(LLA3d4+@+@+C*D!EF	 )
 LL -LLJKLL23LL.1D1DDELL
 ;;$---2DLL34LL34LLDKK=4+>+>*?@ALL
 <<6!H99((LL<xGHYY**LL89LL<xGHYY,&LL9: LLNOLL88CDLLHILL=>||x'MNRSLLNLL@ALLNLLRSLL=>LL78LL-.LLNLL78r/   Nr   Fc                    SnU(       aT  U Vs/ s H  ot" X7-   5      PM     nnU(       a   U Vs/ s H  opR                  U5      PM     nnSSR                  U5      -   nU R                  R                  U SU S35        gs  snf s  snf )zWrite a variable definition that is a list of values.

E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out
     foo = blaha blahb
but in a pretty-printed style.
r   z \
	z :=z

N)r   r   rQ   rR   )r9   
value_listr   r   r   rE   valuesvalues           r-   rc   AndroidMkWriter.WriteList  s     >HIjU&0jJIDNOJ5//6J
O
!;;F
#fXT23	 JOs
   B Bc                 @    U R                   R                  US-   5        g )N
)rQ   rR   )r9   texts     r-   rb   AndroidMkWriter.WriteLn  s    dTk"r/   c                    SU;   d$  [         R                  R                  U5      (       a  [         R                  R                  U5      $ [         R                  R	                  SU R                  U5      n[         R                  R                  U5      nUR                  S5      (       d   SU SU R                   S35       eU$ )zConvert a subdirectory-relative path into a normalized path which starts
with the make variable $(LOCAL_PATH) (i.e. the top of the project tree).
Absolute paths, or paths that contain variables, are just normalized.r   z$(LOCAL_PATH)zPath z" attempts to escape from gyp path z !))r   r2   isabsr   r   r   )r9   r2   
local_paths      r-   r   AndroidMkWriter.LocalPathify  s     4<277==.. 77##D))WW\\/499dC
WW%%j1

 $$
 
 	J4&:499+SI	J 
 r/   c                 l    SU;  a  SU;  a  U$ UUUS.-  n[         R                  R                  U5      $ )Nr   r   )
INPUT_ROOTINPUT_DIRNAME)r   r2   r   )r9   template	expansionr   r2   s        r-   r   AndroidMkWriter.ExpandInputRoot  sC    8+0C80SO#$
 
 ww%%r/   )rY   r[   r]   r^   r8   rQ   r`   ra   r2   rT   rU   rV   r@   r?   )r   )__name__
__module____qualname____firstlineno____doc__r:   ry   rd   re   rf   r   rg   rZ   r\   r  r_   r   r   r!  rW   r0  rh   r)   r5  rc   rb   r   r   __static_attributes__r1   r/   r-   r5   r5   f   s    
/L#\hTbH(T39jS-j1>&)P6D@ -$$BLI.)VVM9d $$4,#&&r/   r5   c                 H   US   n[         R                  R                  [         R                  R                  UR                  S5      5      n[        [         R                  5      nXES'   SS[         R                  S   S/n[        SU-  5        [        R                  " XeS	9  g )
NoptionszGypAndroid.mkONE_SHOT_MAKEFILEr)   z-CANDROID_BUILD_TOPgyp_all_moduleszBuilding: %s)env)
r   r2   abspathr   toplevel_dirdictenvironr   
subprocess
check_call)dataconfigurationsparamsrU  makefilerY  	argumentss          r-   PerformBuildre    s~    YGwwrww||G,@,@/RSH
rzz
C'rzz*=>@QRI	.9
$%)-r/   c                 (	  ^% US   m%UR                  S0 5      nUR                  SS5      nUR                  SS5      nUR                  SS5      n[        R                  R                  S	5      nU(       d   S
5       eU%4S jn	S n
U  H  nX   nUS   S:w  d  M  US   n
  O   U
(       d  Sn
ST%R                  -   S-   n[        R                  R                  T%R                  U5      nT%R                  (       a   S5       e[        R                  R                  U5        [        US5      nUR                  [        5        UR                  S5        [        5       nUS    H;  n[        R                  R                  XU5       H  nUR!                  U5        M     M=     [        5       n[        5       n0 nU  GH  n[        R                  R#                  U5      u  nnn[        R                  R%                  UT%R                  5      nUR!                  U5        UU   S   nU H  n[        R                  R%                  [        R                  R'                  UU5      T%R                  5      n[        R                  R)                  U5      nUS   (       a,  UR+                  US   5      (       a  UR!                  U5        M  UR!                  U5        M     U	" UUS-   U-   T%R                  -   S-   5      u  nnUU   nUS   nUU;   nU(       a
  U(       d  GMc  [        R                  R-                  UUU5      n [/        U5      n!U!R1                  UU UUUUUUUS9	n"U"U;   a  [3        SU"< SUU"   < SU< 35          g UUU"'   [        R                  R%                  U[        R                  R5                  U5      5      n#UR!                  U#5        GM     UR                  SU
-  5        UR                  S5        UR                  S5        UR                  S5        UR                  S 5        [7        U5       H  n$UR                  S!U$-   S -   5        M     UR                  S 5        U(       a  UR                  [8        5        UR;                  5         g )"NrU  generator_flagslimit_to_target_allFwrite_alias_targetsTaosp_sdk_versionr   rW  z2$ANDROID_BUILD_TOP not set; you need to run lunch.c                   > [         R                  R                  [        R                  R                  U 5      TR                  5      n[        R                  R                  TR                  X!5      nTR                  (       a   S5       e[         R                  R                  [        R                  R                  U 5      TR                  5      nX#4$ )z9Determine where to write a Makefile for a given gyp file.>The Android backend does not support options.generator_output.)
rM   rN   r  r   r2   r   depthr   generator_outputr[  )
build_file	base_namerl   output_filerU  s       r-   CalculateMakefilePath-GenerateOutput.<locals>.CalculateMakefilePath  s     JJ++BGGOOJ,GW	ggll7==)G((	LK	L(JJ++GGOOJ')=)=
	 %%r/   default_configurationDefault
GypAndroidz.mkrl  r=   z
LOCAL_PATH := $(call my-dir)
build_filesincluded_fileshome_dot_gypr   ra  )rp   rq   rr   zdERROR: Android module names must be unique. The following targets both generate Android module name z.
  z
  zGYP_CONFIGURATION ?= %s
zGYP_VAR_PREFIX ?=
zGYP_HOST_VAR_PREFIX ?=
zGYP_HOST_MULTILIB ?= first
rA  zinclude $(LOCAL_PATH)/)r+   r   r]  r   r2   r   r[  rn  rM   rN   rO   rP   rR   rS   r   
AllTargetsr   ParseQualifiedTargetr  UnrelativePathrZ  r   QualifiedTargetr5   ry   r   r   r   ALL_MODULES_FOOTERrk   )&target_listtarget_dictsr`  rb  rg  rh  ri  rr   r8   rr  rt  rV   rn   makefile_namemakefile_pathroot_makefileneeded_targetsro  rw  include_listandroid_modulesrT   r@   relative_build_filerx  included_filerelative_include_fileabs_include_filerl   rq  ro   rp   rU   writerr[   mkfile_rel_pathinclude_filerU  s&                                        @r-   GenerateOutputr    sW   YGjj!2B7O)--.CUK)--.CTJ!%%&8!<Kjjnn%89OPPP?&( !#'(I5$()@$A!	 
 ! ) 7>>1E9MGGLL!5!5}EM$$HGH$JJ}-,M
 :; UN]+
jj++KzRFv& S , %K5LO'&)jj&E&EFV&W#
FG!jj55j'BVBVW+,j)*:;+M %(JJ$;$;

))-D$$%!  "ww/DE n%*:*E*E~&+ +  01 56! ,$ "7w.?%G"
	; ,-'(&.8{**44
 !1#2# & 

 _, "?>#BDTV
 *:' **117
 	) (B 36KKL-.2367 |,4|CdJK -./r/   )rM   
gyp.commongyp.generator.make	generatorr)   r   r  r^  generator_default_variables$generator_supports_multiple_toolsets+generator_additional_non_configuration_keys"generator_additional_path_sections!generator_extra_sources_for_rulesr~  rS   rX   r.   r3   ri   rj   r5   re  r  r1   r/   r-   <module>r     sy  $   ! ! 	 	 )  	
    1 ? 3 2 " ' - (  n!" ~#$ 0% , (, $ 	/ + &( "$& ! 
 )(8 
  T& T&n.Mr/   