
    "KbeB                         d Z 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
mc mZ dai ZdD ]
  Zdez   ee<    dD ]  Zdee<   	 d	ed
<   d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)a  GYP backend that generates Eclipse CDT settings files.

This backend DOES NOT generate Eclipse CDT projects. Instead, it generates XML
files that can be imported into an Eclipse CDT project. The XML file contains a
list of include paths and symbols (i.e. defines).

Because a full .cproject definition is not created by this generator, it's not
possible to properly define the include dirs and symbols for each file
individually.  Instead, one set of includes/symbols is generated for the entire
project.  This works fairly well (and is a vast improvement in general), but may
still result in a few indexer issues here and there.

This generator has no automated tests, so expect it to be broken.
    )escapeNF)INTERMEDIATE_DIRPRODUCT_DIRLIB_DIRSHARED_LIB_DIR$)RULE_INPUT_PATHRULE_INPUT_ROOTRULE_INPUT_NAMERULE_INPUT_DIRNAMERULE_INPUT_EXTEXECUTABLE_PREFIXEXECUTABLE_SUFFIXSTATIC_LIB_PREFIXSTATIC_LIB_SUFFIXSHARED_LIB_PREFIXSHARED_LIB_SUFFIXCONFIGURATION_NAME $SHARED_INTERMEDIATE_DIRSHARED_INTERMEDIATE_DIRc                 p   |j                  di       }|j                         D ]  \  }}| j                  ||        t        j                  j                  |      }| j                  d|       |dk(  rDdd lmc m} t        |dg       }t        |dg       }t        j                  j                  | |       y y )Ngenerator_flagsOSwinr   +generator_additional_non_configuration_keys"generator_additional_path_sections)getitems
setdefaultgypcommon	GetFlavorgyp.generator.msvs	generatormsvsgetattrmsvs_emulationCalculateCommonVariables)	default_variablesparamsr   keyvalflavormsvs_generatorr   r   s	            7/usr/lib/python3/dist-packages/gyp/generator/eclipse.pyCalculateVariablesr1   5   s    JJ0"5/!'') +hc3  c*+::'&tV,u_ 0/29.5r3;/)0,b*2& //0A6J     c                 R    | j                  di       }|j                  dd      rdayy)zOCalculate the generator specific info that gets fed to input (called by
  gyp).r   adjust_static_librariesFTN)r   4generator_wants_static_library_dependencies_adjusted)r+   r   s     r0   CalculateGeneratorInputInfor6   G   s1     JJ0"5/2E:;?8 ;r2   c                 $   t               }g }|rt        j                  |      }|j                  g d       t	        j
                  |t        j                  t        j                  t        j                        }	|	j                         d   }
d}|
j                         D ]R  }|j                  d      rd}|j                  d      r n+|s-|j                         }||vsB|j                  |       T t        j                  j                  |      }|dk(  r|j                  d	i       }| D ](  }||   }||d
   v s|d
   |   }|dk(  r2t        j                   j#                  |      }|j%                  |      }n|d   }|D ]/  }|j                  d      s|dd }||vs|j                  |       1 d|v s|d   }|D ]  }|D ]  }|j'                  d|      }t(        j*                  j-                  |      sFt(        j*                  j/                  |      }|dz   |z   }t(        j*                  j1                  |      }|j3                  |         + t5        |      }|j7                          |D ]  }||vs|j                  |        |S )zCalculate the set of include directories to be used.

  Returns:
    A list including all the include_dir's specified for every target followed
    by any include directories that were added as cflag compiler options.
  )-Ez-xc++z-v-)argsstdinstdoutstderr   Fz#includeTzEnd of search list.r   r   configurationscflagsz-I   Ninclude_dirsr   /)setshlexsplitextend
subprocessPopenPIPEcommunicate
splitlines
startswithstripappendr!   r"   r#   r   r(   MsvsSettings	GetCflagsreplaceospathisabsdirnameabspathaddlistsort)target_listtarget_dictsshared_intermediate_dirsconfig_namer+   compiler_pathgyp_includes_setcompiler_includes_listcommandprocoutputin_include_listlineinclude_dirr.   r   target_nametargetconfigmsvs_settingsr@   cflagrB   shared_intermediate_dirbase_dirall_includes_listcompiler_includes                              r0   GetAllIncludeDirectoriesrq   P   s    U kk-(GNN-.
#-??:??LD"F O!!# 	5		$	.	/	jjl44
 
'
'
4	5 ::'&u_jj!2B7O  !.k+&Ff-..&'4f 
5**77P((5! 7%D!ab	+ 66"))+6	7 
6	!n-'? 
	.#) 	.k%--.H.EGK77==-5h$sN[8kGGOOK8k  -	.
	./!.H +,0 1///01
 
r2   c                 F   t         j                  j                  | d         \  }}}||   j                  di       }|D ]5  \  }}|dv st        j
                  j                  |j                  |      c S  dD ]'  }t        j                  j                  |      }|s%|c S  y)a  Determine a command that can be used to invoke the compiler.

  Returns:
    If this is a gyp project that has explicit make settings, try to determine
    the compiler from that.  Otherwise, see if a compiler was specified via the
    CC_target environment variable.
  r   make_global_settings)CCCXX)	CC_targetrt   ru   gcc)	r!   r"   ParseQualifiedTargetr   rS   rT   jointoplevel_direnviron)	r[   dataoptions
build_file_make_global_settings_dictr,   valuecompilers	            r0   GetCompilerPathr      s     ZZ44[^D*a":.223I2N- 7jc5
mWW\\'..667
 ( czz~~c"Ho
 
r2   c                    i }t         j                  j                  |      }|dk(  r|j                  di       }| D ]  }	||	   }
|dk(  r2t         j                  j                  |
      }|j                  |      }ng }||
d   v r|
d   |   }|d   }ng }||z   D ]p  }|j                  dd      }t        |      dk(  r|j                  d       |d   j                         |v rJ|d   j                         ||d   j                         <   r  |dk(  r|S |rt        j                  |      }|j                  g d	       t        j                  |d
t        j                  t        j                        }|j!                         d   }|j                  d      }|D ]E  }|j                         s|j                  dd      }|d   }t        |      dk\  r|d   }nd}|||<   G |S )zCalculate the defines for a project.

  Returns:
    A dict that includes explict defines declared in gyp files along with all of
    the default defines that the compiler uses.
  r   r   r?   defines=r>   1r   )r8   z-dMr9   .)r:   cwdr;   r<   
 rA      )r!   r"   r#   r   r(   rP   GetComputedDefinesrF   lenrO   rN   rE   rG   rH   rI   rJ   rK   )r[   r\   r|   r^   r+   r_   all_definesr.   r   rh   ri   rk   extra_definesrj   target_definesdefinesplit_definerb   cpp_proc
cpp_output	cpp_linescpp_linecpp_line_partsr,   r-   s                            r0   GetAllDefinesr      s    +::'&u_jj!2B7O  Ek+&F((55foNm#66{Cmmf-..&'4fi(nn =0 E\\#q)l	\	a	C 	a			 K	/-9!_-B-B-Dk,q/'')*EE, u_kk-(GNN%&W#&0oojooOH%%'*J  &I 	^^~~c1-n1c	^		!Qk#	 
r2   c                     | j                  d       | j                  d       |D ]B  }| j                  d|z         |D ]  }| j                  d|z          | j                  d       D | j                  d       y)z9Write the includes section of a CDT settings export file.zT  <section name="org.eclipse.cdt.internal.ui.wizards.settingswizards.IncludePaths">
=    <language name="holder for library settings"></language>
    <language name="%s">
z;      <includepath workspace_path="false">%s</includepath>
    </language>
  </section>
N)write)outeclipse_langsrB   langrg   s        r0   WriteIncludePathsr      s     )) / 0))LM #dII*T12# 	iiN  II!"# ))r2   c                 X   | j                  d       | j                  d       |D ]r  }| j                  d|z         t        |j                               D ]/  }| j                  dt        |      dt        ||         d       1 | j                  d       t | j                  d       y	)
z7Write the macros section of a CDT settings export file.zN  <section name="org.eclipse.cdt.internal.ui.wizards.settingswizards.Macros">
r   r   z      <macro><name>z</name><value>z</value></macro>
r   r   N)r   sortedkeysr   )r   r   r   r   r,   s        r0   WriteMacrosr     s     )) ) *))LM #dII*T12glln% 5	iifWS\24 55 II!"# ))r2   c                 6   |d   }|j                  di       }t        j                  j                  |j                  dd      |      }t        j                  j                  |j                  |      }t        j                  j                  |dd      t        j                  j                  |d      g}	t        | ||||t        j                  j                  |d      ||	       t        | ||j                  |t        j                  j                  |d             y )	Nr}   r   
output_dirr   objgenzeclipse-cdt-settings.xmlzeclipse-classpath.xml)r   rS   rT   ry   rz   GenerateCdtSettingsFileGenerateClasspathFile)
r[   r\   r|   r+   r^   r}   r   	build_dirtoplevel_buildr]   s
             r0   GenerateOutputForConfigr     s    9'JJ0"5/ ggll?..|UC&() 77<< 4 4i@. !ggll>5%H ggll>5AC +& %'',,~'AC!24 $,,&^%<>	?r2   c           	         t         j                  j                  |       t        |d      5 }|j	                  d       |j	                  d       g d}	t        | ||      }
t        | |||||
      }t        ||	|       t        | |||||
      }t        ||	|       |j	                  d       d d d        y # 1 sw Y   y xY w)Nwz'<?xml version="1.0" encoding="UTF-8"?>
z<cdtprojectproperties>
)zC++ Source FilezC Source FilezAssembly Source FilezGNU C++zGNU CAssemblyz</cdtprojectproperties>
)
r!   r"   EnsureDirExistsopenr   r   rq   r   r   r   )r[   r\   r|   r+   r^   out_namer}   r]   r   r   r_   rB   r   s                r0   r   r   ;  s     **X&Hc +cII89II()5M#Kw?M+K,D,7PL c=,7Kt["M3G]G,II)*+ + +s   A?B44B=c                 x   t         j                  j                  |       t        j                  d      fd} |dt        | |              |dt        | |              |ddg        |dt        j                  j                  |d      g       t        j                        j                  |       y	)
zGenerates a classpath file suitable for symbol navigation and code
  completion of Java code (such as in Android projects) by finding all
  .java and .jar files used as action inputs.	classpathc                 |   t               }|D ]b  }t        j                  j                  |      r0|j	                  t        j                  j                  |             R|j	                  |       d t        |      D ]<  }t        j                  d      }|j                  d|        |j                  d|       > y )NclasspathentrykindrT   )	rD   rS   rT   rU   rX   relpathr   ET
SubElement)r   paths	rel_pathsrT   entry_elementresultrz   s        r0   AddElementsz*GenerateClasspathFile.<locals>.AddElementsY  s     I 	t	bggoodL9:d	 y! &mmF,<=m%%&r2   libsrcconz'org.eclipse.jdt.launching.JRE_CONTAINERrd   z.eclipse-java-buildN)r!   r"   r   r   ElementGetJavaJarsGetJavaSourceDirsrS   rT   ry   ElementTreer   )r[   r\   rz   r   r   r   r   s     `   @r0   r   r   Q  s    
 **X&::k"&& e[lLIJe&{L,OPe?@A hn6KLMN..x(r2   c              #     K   | D ]  }||   }|j                  dg       D ]  }|d   D ]  }t        j                  j                  |      d   dk(  s)|j	                  d      r;t        j                  j                  |      r| _t        j                  j                  t        j                  j                  |      |          yw)z1Generates a sequence of all .jars used as inputs.actionsinputsr>   z.jarr   N)r   rS   rT   splitextrM   rU   ry   rV   )r[   r\   rz   rh   ri   actioninput_s          r0   r   r   s  s       Ek+&F**Y+ E8$ E&77F#A&&09J9J39OWW]]6"L'',,rww{;VDDEEEs   ACC"A*Cc           
   #     K   | D ]6  }||   }|j                  dg       D ]  }|d   D ]  }t        j                  j                  |      d   dk(  s*|j	                  d      r<t        j                  j                  t        j                  j                  t        j                  j                  |      |            }|}t        j                  j                  |      dvrPt        j                  j                  |      \  }}	|r||k(  r| t        j                  j                  |      dvrP|   9 yw)zAGenerates a sequence of all likely java package root directories.r   r   r>   z.javar   )r   javaN)	r   rS   rT   r   rM   rV   ry   basenamerF   )
r[   r\   rz   rh   ri   r   r   dir_parent_searchr   s
             r0   r   r     s       k+&F**Y+  8$  &GGV$Q'72!!#&bggook.J.4"6 7$ -  /F!ww}}];M1 M\$Aj   /F  %   s   AE E %CE 2E c                     |d   j                   rt        d      |j                  di       j                  dd      }|rt        | ||||       y|| d      d   }|D ]  }t        | ||||        y)zFGenerate an XML settings file that can be imported into a CDT project.r}   z.--generator_output not implemented for eclipser   rj   Nr   r?   )generator_outputNotImplementedErrorr   r   )r[   r\   r|   r+   user_configconfig_namesr^   s          r0   GenerateOutputr     s     I''
N
OO

,b155hE+KtV')  A/0@AL# +k<v)++r2   )__doc__xml.sax.saxutilsr   os.pathrS   rH   r!   
gyp.commongyp.msvs_emulationrE   xml.etree.cElementTreeetreecElementTreer   r5   generator_default_variablesrV   unusedr1   r6   rq   r   r   r   r   r   r   r   r   r   r    r2   r0   <module>r      s   
 $   
    # #7< 4  P 7G),wg&7% +F )+f%+  5 6K$@Vr08v?B+,)D
E 4+r2   