author | fturovic <frank.turovich@nokia.com> |
Tue, 28 Apr 2009 11:07:47 -0500 | |
branch | RCL_2_0 |
changeset 131 | 740c114ee263 |
parent 2 | d760517a8095 |
child 1704 | 24ac5a5cf80c |
permissions | -rw-r--r-- |
131
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
1 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
2 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
3 |
<head> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
4 |
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
5 |
<title>Getting Carbide Project Information</title> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
6 |
<link rel="StyleSheet" href="../../book.css" type="text/css"/> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
7 |
</head> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
8 |
<body bgcolor="#FFFFFF"> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
9 |
|
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
10 |
<h2>Getting Carbide Project Information</h2> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
11 |
<p>The following example code fragments demonstrate the use of Carbide.c++ APIs to access Carbide project information.</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
12 |
<p class="note"><strong>NOTE</strong> There are two perspective IDs that may be useful when using the Carbide APIs. The perspective ID for the Carbide.c++ perspective is com.nokia.carbide.cpp.CarbideCppPerspective and for the Debug view it is org.eclipse.debug.ui.DebugPerspective.</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
13 |
<p>Retrieving Carbide.c++ project information starts with knowing your org.eclipse.core.resources.<STRONG>IProject</STRONG> resource and retrieving the com.nokia.carbide.cdt.builder.<STRONG>ICarbideBuildManager</STRONG> instance:</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
14 |
<p class="listing">ICarbideBuildManager buildMgr = ICarbideBuilderPlugin.getBuildManager();</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
15 |
<p>Now with your IProject resource you can grab the actual Carbide project in com.nokia.carbide.cdt.builder.<STRONG>ICarbideProjectInfo</STRONG>:</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
16 |
<p class="listing">// Assumes IProject (project) is known.<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
17 |
ICarbideProjectInfo cpi = null;<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
18 |
if (buildMgr.isCarbideProject(project)){<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
19 |
// check to make sure this is a Carbide project<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
20 |
cpi = buildMgr.getProjectInfo(project);<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
21 |
}</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
22 |
<p>Once you get the ICarbideProjectInfo object you can access all the project data, such as environment variables and SIS builder information via the com.nokia.carbide.cdt.builder.<STRONG>ICarbideBuildConfiguration</STRONG> interface. You can retrieve either the default configuration or the full list:</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
23 |
<p class="listing">// Get the default build configuration<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
24 |
ICarbideBuildConfiguration defaultConfig = cpi.getDefaultConfiguration();<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
25 |
// Get all configurations for this project.<br> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
26 |
List<ICarbideBuildConfiguration> configList = cpi.getBuildConfigurations();</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
27 |
<p>It is important to note that the data retrieved by the ICarbideBuildConfiguration object is what you see in the project properties pages under the Carbide.c++ group. This is separate from the data in the INF and MMP files. </p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
28 |
<h3>Retrieving INF/MMP Project Information</h3> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
29 |
<p>All Carbide build stages, with the exception of the post-link SIS Builder stage get their data from INF and MMP files. So naturally Carbide needs a way to retrieve and store this data for doing things like setting up the source indexer and displaying the visual INF and MMP editors. The com.nokia.carbide.cdt.builder.<STRONG>EpocEngineHelper</STRONG> class is a good first stop to retrieve this information. For example, if you want to get all the source files in the first MMP file:</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
30 |
|
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
31 |
<PRE>// ...assumes ICarbideProjectInformation (cpi) is known. |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
32 |
List<IPath> mmpPaths = EpocEngineHelper.getMMPFilesForProject(cpi); |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
33 |
// array length check omitted for brevity.... |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
34 |
List<IPath> srcFilesTest = EpocEngineHelper.getSourceFilesForConfiguration(defultConfig, mmpPaths.get(0));</PRE> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
35 |
<h3>SDK Management</h3> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
36 |
<p>Each SDK entry in devices.xml is analogous to a com.nokia.carbide.cpp.sdk.core.<STRONG>ISymbianSDK</STRONG> object. If you want to get the entire list of ISymbianSDK objects (same list and properties from the SDK Preferences page) you simply invoke:</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
37 |
|
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
38 |
<PRE>ISDKManager sdkMgr = SDKCorePlugin.getSDKManager(); |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
39 |
List<ISymbianSDK> sdkList = sdkMgr.getSDKList();</PRE> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
40 |
|
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
41 |
<p>Now you can iterate the list and get whatever information you want out of the installed SDKs. For example, using Java 5 iterators we can get the EPOCROOT values of all the SDKs:</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
42 |
|
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
43 |
<PRE>for (ISymbianSDK currSDK : sdkList){ |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
44 |
String epocRootStr = currSDK.getEPOCROOT(); |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
45 |
}</PRE> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
46 |
|
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
47 |
<h3>Reading MMP Statements with the EpocEngine and IMMPData</h3> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
48 |
<p>This topic demonstrates how you can read the MMP data for any build configuration (ICarbideBuildConfiguration). The main interface for retrieving MMP data is <strong>com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPData</strong>. Once you get access to this interface you can learn anything you want about a particular MMP file.</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
49 |
<p><strong>Prerequisite:</strong> All MMP and bld.inf parsing requires a dependency to the plugin <strong>com.nokia.carbide.cpp.epoc.engine</strong>.</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
50 |
<p>Typically most keywords of interest are either single string settings (<span class="code">TARGETTYPE</span>, <span class="code">TARGET</span>, <span class="code">EPOCSTACKSIZE</span>) or list of settings (<span class="code">MACRO</span>, <span class="code">CAPABILITY</span>, <span class="code">LANG</span>). Other types can be directly retrieved from IMMPData routines. Check the API documentation for specifics.</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
51 |
<p>The example provided simply iterates through all the MMP files of a particular build configuration and grabs a list value and single item setting. You'll need to get the particular MMP file you are interested in. Play around with the IMMPData object in the run method and you can quickly get the idea.</p> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
52 |
<PRE class="listing">// Assumes buildConfig (ICarbideBuildConfiguration) is known |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
53 |
for (IPath mmpPath : EpocEngineHelper.getMMPFilesForBuildConfiguration(buildConfig)) { |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
54 |
Object data = EpocEnginePlugin.runWithMMPData(mmpPath, new |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
55 |
DefaultMMPViewConfiguration(buildConfig.getCarbideProject().getProject(), |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
56 |
buildConfig, new AcceptedNodesViewFilter()), new MMPDataRunnableAdapter() { |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
57 |
public Object run(IMMPData mmpData) { |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
58 |
// Example, getting a keyword as a list of strings |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
59 |
List macros = mmpData.getListArgumentSettings().get(EMMPStatement.MACRO); |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
60 |
// The real return value, getting a single argument setting |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
61 |
return mmpData.getSingleArgumentSettings().get(EMMPStatement.TARGETTYPE); |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
62 |
} |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
63 |
}); |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
64 |
// Make sure to test for and cast to proper Object type! |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
65 |
String mmpStatement = (String)data; // Now we should have the TARGETTYPE |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
66 |
}</PRE> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
67 |
<div id="footer">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div> |
740c114ee263
bug 8806 revision for 2.0.4
fturovic <frank.turovich@nokia.com>
parents:
2
diff
changeset
|
68 |
</body> |
2 | 69 |
</html> |