[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Some simple upgrades to build model
|
In order to meet certain internal guidelines and to test the makefile
generator, the build model replied to some answers with hard-coded
information. This patch moves the information into the build model. Tests
have been updated to reflect these changes, and the patch has been
smoke-tested on Unix.
Sean Evoy
Rational Software - IBM Software Group
Ottawa, Ontario, Canada
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.116
diff -u -r1.116 ChangeLog
--- ChangeLog 25 Jul 2003 17:31:01 -0000 1.116
+++ ChangeLog 28 Jul 2003 19:00:32 -0000
@@ -1,5 +1,26 @@
+2003-07-28 Sean Evoy
+ In order to meet certain internal guidelines and to test the makefile
+ generator, the build model replied to some answers with hard-coded information.
+ This patch moves the information into the build model.
+
+ * schema/ManagedBuildTools.exsd
+ * build/org/eclipse/cdt/core/build/managed/ITarget.java
+ * build/org/eclipse/cdt/internal/core/build/managed/Target.java
+ * build/org/eclipse/cdt/internal/core/build/managed/ManagedBuildInfo.java:
+ Added code to correctly extract and persist the make command and clean
+ command from a Target/ITarget. Added the attributes to the schema. Removed
+ the hard-coded answers from the ManagedBuildManager.
+
+ * src/org/eclipse/cdt/internal/core/GeneratedMakefileBuilder.java:
+ Removed two methods that were no longer invoked from the builder.
+
+ * src/org/eclipse/cdt/internal/core/MakefileGenerator.java:
+ Corrected a bug in the makefile generator whereby the output prefix was applied
+ twice to library targets, i.e. liblibfoo.a instead of libfoo.a.
+
+
2003-07-24 Sean Evoy
- *src/org/eclipse/cdt/internal/core/MakefileGenerator.java:
+ * src/org/eclipse/cdt/internal/core/MakefileGenerator.java:
Added code to place interproject dependencies in target build rule,
added code to properly put output prefixes on library names, and
added code to put library link arguments at the end of the depednency list
Index: build/org/eclipse/cdt/core/build/managed/ITarget.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/build/org/eclipse/cdt/core/build/managed/ITarget.java,v
retrieving revision 1.9
diff -u -r1.9 ITarget.java
--- build/org/eclipse/cdt/core/build/managed/ITarget.java 9 Jun 2003 19:22:15 -0000 1.9
+++ build/org/eclipse/cdt/core/build/managed/ITarget.java 28 Jul 2003 19:00:32 -0000
@@ -47,6 +47,13 @@
public String getArtifactName();
/**
+ * Answers the OS-specific command to remove files created by the build
+ *
+ * @return
+ */
+ public String getCleanCommand();
+
+ /**
* Returns all of the configurations defined by this target.
* @return
*/
@@ -61,6 +68,13 @@
public String getDefaultExtension();
/**
+ * Answers the name of the make utility for the target.
+ *
+ * @return
+ */
+ public String getMakeCommand();
+
+ /**
* Returns the configuration with the given id, or null if not found.
*
* @param id
@@ -110,5 +124,6 @@
* @param name The name of the build artifact.
*/
public void setBuildArtifact(String name);
+
}
Index: build/org/eclipse/cdt/internal/core/build/managed/ManagedBuildInfo.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/ManagedBuildInfo.java,v
retrieving revision 1.3
diff -u -r1.3 ManagedBuildInfo.java
--- build/org/eclipse/cdt/internal/core/build/managed/ManagedBuildInfo.java 25 Jul 2003 17:31:00 -0000 1.3
+++ build/org/eclipse/cdt/internal/core/build/managed/ManagedBuildInfo.java 28 Jul 2003 19:00:32 -0000
@@ -116,8 +116,11 @@
* @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getCleanCommand()
*/
public String getCleanCommand() {
- // TODO Get from the model
- return new String("rm -rf");
+ // Get from the model
+ String command = new String();
+ ITarget target = getDefaultTarget();
+ command = target.getCleanCommand();
+ return command;
}
/* (non-Javadoc)
@@ -276,8 +279,10 @@
* @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getMakeCommand()
*/
public String getMakeCommand() {
- // TODO Don't hard-code this
- return new String("make");
+ String command = new String();
+ ITarget target = getDefaultTarget();
+ command = target.getMakeCommand();
+ return command;
}
/* (non-Javadoc)
Index: build/org/eclipse/cdt/internal/core/build/managed/Target.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Target.java,v
retrieving revision 1.10
diff -u -r1.10 Target.java
--- build/org/eclipse/cdt/internal/core/build/managed/Target.java 4 Jul 2003 18:36:45 -0000 1.10
+++ build/org/eclipse/cdt/internal/core/build/managed/Target.java 28 Jul 2003 19:00:32 -0000
@@ -31,16 +31,18 @@
*/
public class Target extends BuildObject implements ITarget {
- private ITarget parent;
- private IResource owner;
- private List tools;
- private Map toolMap;
- private List configurations;
+ private String artifactName;
+ private String cleanCommand;
private Map configMap;
+ private List configurations;
+ private String defaultExtension;
private boolean isAbstract = false;
private boolean isTest = false;
- private String artifactName;
- private String defaultExtension;
+ private String makeCommand;
+ private IResource owner;
+ private ITarget parent;
+ private Map toolMap;
+ private List tools;
private static final IConfiguration[] emptyConfigs = new IConfiguration[0];
private static final String EMPTY_STRING = new String();
@@ -66,6 +68,8 @@
this.artifactName = parent.getArtifactName();
this.defaultExtension = parent.getDefaultExtension();
this.isTest = parent.isTestTarget();
+ this.cleanCommand = parent.getCleanCommand();
+ this.makeCommand = parent.getMakeCommand();
// Hook me up
IManagedBuildInfo buildInfo = ManagedBuildManager.getBuildInfo(owner, true);
@@ -110,6 +114,20 @@
// Is this a test target
isTest = ("true".equals(element.getAttribute("isTest")));
+
+ // Get the clean command
+ cleanCommand = element.getAttribute("cleanCommand");
+ if (cleanCommand == null) {
+ // See if it defined in the parent
+ cleanCommand = parent.getCleanCommand();
+ }
+
+ // Get the make command
+ makeCommand = element.getAttribute("makeCommand");
+ if (makeCommand == null) {
+ // See if it defined in the parent
+ makeCommand = parent.getMakeCommand();
+ }
IConfigurationElement[] targetElements = element.getChildren();
for (int k = 0; k < targetElements.length; ++k) {
@@ -159,6 +177,12 @@
// Is this a test target
isTest = ("true".equals(element.getAttribute("isTest")));
+
+ // Get the clean command
+ cleanCommand = element.getAttribute("cleanCommand");
+
+ // Get the make command
+ makeCommand = element.getAttribute("makeCommand");
Node child = element.getFirstChild();
while (child != null) {
@@ -184,6 +208,8 @@
element.setAttribute("artifactName", getArtifactName());
element.setAttribute("defaultExtension", getDefaultExtension());
element.setAttribute("isTest", isTest ? "true" : "false");
+ element.setAttribute("cleanCommand", getCleanCommand());
+ element.setAttribute("makeCommand", getMakeCommand());
if (configurations != null)
for (int i = 0; i < configurations.size(); ++i) {
@@ -194,6 +220,14 @@
}
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.build.managed.ITarget#getMakeCommand()
+ */
+ public String getMakeCommand() {
+ // Return the name of the make utility
+ return makeCommand == null ? EMPTY_STRING : makeCommand;
+ }
+
public String getName() {
return (name == null && parent != null) ? parent.getName() : name;
}
@@ -268,6 +302,14 @@
}
/* (non-Javadoc)
+ * @see org.eclipse.cdt.core.build.managed.ITarget#getCleanCommand()
+ */
+ public String getCleanCommand() {
+ // Return the command used to remove files
+ return cleanCommand == null ? EMPTY_STRING : cleanCommand;
+ }
+
+ /* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.ITarget#getArtifactName()
*/
public String getArtifactName() {
@@ -325,4 +367,5 @@
public void setBuildArtifact(String name) {
artifactName = name;
}
+
}
Index: schema/ManagedBuildTools.exsd
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/schema/ManagedBuildTools.exsd,v
retrieving revision 1.9
diff -u -r1.9 ManagedBuildTools.exsd
--- schema/ManagedBuildTools.exsd 25 Jul 2003 17:31:01 -0000 1.9
+++ schema/ManagedBuildTools.exsd 28 Jul 2003 19:00:33 -0000
@@ -137,8 +137,8 @@
<attribute name="valueType" use="default" value="string">
<annotation>
<documentation>
- General options can be one of the following types; 'string' for catch-all entries for options that cannot be easily defined any other way, 'string list' for entries that consist of a list of values such as defined symbols or paths, 'boolean' for options that have two values, and 'enumerated' for options that are one-of a list of values.
-
+ General options can be one of the following types; 'string' for catch-all entries for options that cannot be easily defined any other way, 'string list' for entries that consist of a list of values such as defined symbols or paths, 'boolean' for options that have two values, and 'enumerated' for options that are one-of a list of values.
+
Two additional types exist to flag options of special relevance to the build model; 'include', and 'definedSymbols'. You can pre-populate with optionValues, and they will display in the UI the same way the 'StringList' options do. The build model will look specifically for these value types when clients query for include paths and preprocessor defines.
</documentation>
</annotation>
@@ -355,6 +355,27 @@
<annotation>
<documentation>
A an optional field that flags a target as a test-only target. If true, the target will not appear in the UI.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="cleanCommand" type="string">
+ <annotation>
+ <documentation>
+ This attribute maintains the command that removes files for a particular target. For example, on POSIX targets like Linuc, Solaris, or Cygwin, the command would be <code>rm -rf</code> whereas on Win32 platforms it would be <code>del /F /S /Q</code>
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="makeCommand" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="makeFlags" type="string">
+ <annotation>
+ <documentation>
+
</documentation>
</annotation>
</attribute>
Index: src/org/eclipse/cdt/internal/core/GeneratedMakefileBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/GeneratedMakefileBuilder.java,v
retrieving revision 1.4
diff -u -r1.4 GeneratedMakefileBuilder.java
--- src/org/eclipse/cdt/internal/core/GeneratedMakefileBuilder.java 25 Jul 2003 14:40:04 -0000 1.4
+++ src/org/eclipse/cdt/internal/core/GeneratedMakefileBuilder.java 28 Jul 2003 19:00:33 -0000
@@ -11,7 +11,6 @@
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
@@ -31,16 +30,12 @@
import org.eclipse.cdt.core.resources.ACBuilder;
import org.eclipse.cdt.core.resources.IConsole;
import org.eclipse.cdt.core.resources.MakeUtil;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.IResourceStatus;
import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@@ -195,51 +190,6 @@
monitor.worked(1);
}
- protected IPath getBuildDirectory(String dirName) throws CoreException {
- // Create or get the handle for the build directory
- IFolder folder = getProject().getFolder(dirName);
- if (!folder.exists()) {
- try {
- folder.create(false, true, null);
- }
- catch (CoreException e) {
- if (e.getStatus().getCode() == IResourceStatus.PATH_OCCUPIED)
- folder.refreshLocal(IResource.DEPTH_ZERO, null);
- else
- throw e;
- }
- }
- return folder.getFullPath();
- }
-
- /**
- * Gets the makefile for the project. It may be empty.
- *
- * @return The <code>IFile</code> to generate the makefile into.
- */
- protected IFile getMakefile(IPath filePath, IProgressMonitor monitor) throws CoreException {
- // Create or get the handle for the makefile
- IWorkspaceRoot root = CCorePlugin.getWorkspace().getRoot();
- IFile newFile = root.getFileForLocation(filePath);
- if (newFile == null) {
- newFile = root.getFile(filePath);
- }
- // Create the file if it does not exist
- ByteArrayInputStream contents = new ByteArrayInputStream(new byte[0]);
- try {
- newFile.create(contents, false, monitor);
- }
- catch (CoreException e) {
- // If the file already existed locally, just refresh to get contents
- if (e.getStatus().getCode() == IResourceStatus.PATH_OCCUPIED)
- newFile.refreshLocal(IResource.DEPTH_ZERO, null);
- else
- throw e;
- }
- // TODO handle long running file operation
- return newFile;
- }
-
/**
* @param makefilePath
* @param info
Index: src/org/eclipse/cdt/internal/core/MakefileGenerator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/MakefileGenerator.java,v
retrieving revision 1.2
diff -u -r1.2 MakefileGenerator.java
--- src/org/eclipse/cdt/internal/core/MakefileGenerator.java 25 Jul 2003 17:31:01 -0000 1.2
+++ src/org/eclipse/cdt/internal/core/MakefileGenerator.java 28 Jul 2003 19:00:34 -0000
@@ -298,7 +298,7 @@
* <cd <Proj_Dep_1/build_dir>; make all>
* <cd <Proj_Dep_.../build_dir>; make all>
* <cd <Proj_Dep_n/build_dir>; make all>
- * $(BUILD_TOOL) $(FLAGS) $(OUTPUT_FLAG) $(OUTPUT_PREFIX)$@ $^ $(LIB_DEPS)
+ * $(BUILD_TOOL) $(FLAGS) $(OUTPUT_FLAG) $@ $^ $(LIB_DEPS)
*/
String cmd = info.getToolForTarget(extension);
String flags = info.getFlagsForTarget(extension);
@@ -323,7 +323,7 @@
e.printStackTrace();
}
- buffer.append(TAB + cmd + WHITESPACE + flags + WHITESPACE + outflag + WHITESPACE + outputPrefix + "$@" + WHITESPACE + "$^");
+ buffer.append(TAB + cmd + WHITESPACE + flags + WHITESPACE + outflag + WHITESPACE + "$@" + WHITESPACE + "$^");
String[] libraries = info.getLibsForTarget(extension);
for (int i = 0; i < libraries.length; i++) {
String lib = libraries[i];
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.39
diff -u -r1.39 ChangeLog
--- ChangeLog 28 Jul 2003 17:21:50 -0000 1.39
+++ ChangeLog 28 Jul 2003 19:00:18 -0000
@@ -1,3 +1,17 @@
+2003-07-28 Sean Evoy
+ In order to meet certain internal guidelines and to test the makefile
+ generator, the build model replied to some answers with hard-coded information.
+ This patch moves the information into the build model.
+
+ * plugin.xml:
+ Added information to the target tags to test inheritence and
+ overridding the make command and clean command attributes.
+
+ * build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java:
+ Added code to test the make command and clean command attributes in
+ Targets. Also added a test to insure that sub-sub targets inherit settings
+ properly.
+
2003-07-28 Andrew Niefer
This patch creates a new failing test class : FullParseFailedTests. This
is for writing failed tests on the parser doing COMPLETE_PARSE.
Index: plugin.xml
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/plugin.xml,v
retrieving revision 1.4
diff -u -r1.4 plugin.xml
--- plugin.xml 25 Jul 2003 17:30:53 -0000 1.4
+++ plugin.xml 28 Jul 2003 19:00:18 -0000
@@ -27,10 +27,13 @@
name="Tools for Build Test"
point="org.eclipse.cdt.core.ManagedBuildInfo">
<target
+ makeFlags="-k"
isTest="true"
+ cleanCommand="del /myworld"
name="Test Root"
defaultExtension="toor"
isAbstract="false"
+ makeCommand="make"
id="test.root">
<tool
sources="foo,bar"
@@ -109,12 +112,15 @@
</configuration>
</target>
<target
- isTest="true"
name="Test Sub"
- parent="test.root"
+ id="test.sub"
+ cleanCommand="rm -yourworld"
+ isTest="true"
defaultExtension="bus"
isAbstract="false"
- id="test.sub">
+ makeCommand="gmake"
+ makeFlags="-d"
+ parent="test.root">
<configuration
name="Sub Config"
id="sub.config">
@@ -122,8 +128,8 @@
<tool
sources="yarf"
name="Sub Tool"
- outputPrefix="lib"
outputs="bus"
+ outputPrefix="lib"
id="tool.sub">
<option
name="Include Paths"
@@ -153,6 +159,14 @@
</optionValue>
</option>
</tool>
+ </target>
+ <target
+ isTest="true"
+ name="Test Sub Sub"
+ parent="test.sub"
+ defaultExtension="tss"
+ makeCommand="nmake"
+ id="test.sub.sub">
</target>
</extension>
Index: build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java,v
retrieving revision 1.4
diff -u -r1.4 AllBuildTests.java
--- build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java 25 Jul 2003 17:30:53 -0000 1.4
+++ build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java 28 Jul 2003 19:00:19 -0000
@@ -74,6 +74,7 @@
public void testExtensions() throws Exception {
ITarget testRoot = null;
ITarget testSub = null;
+ ITarget testSubSub = null;
// Note secret null parameter which means just extensions
ITarget[] targets = ManagedBuildManager.getDefinedTargets(null);
@@ -84,17 +85,22 @@
if (target.getName().equals("Test Root")) {
testRoot = target;
checkRootTarget(testRoot, "x");
-
} else if (target.getName().equals("Test Sub")) {
testSub = target;
checkSubTarget(testSub);
+ } else if (target.getName().equals("Test Sub Sub")) {
+ testSubSub = target;
+ checkSubSubTarget(testSubSub);
}
}
-
+ // All these targets are defines in the plugin files, so none
+ // of them should be null at this point
assertNotNull(testRoot);
assertNotNull(testSub);
+ assertNotNull(testSubSub);
}
+
/**
* The purpose of this test is to exercise the build path info interface.
* To get to that point, a new target/config has to be created in the test
@@ -465,8 +471,12 @@
*/
private void checkRootTarget(ITarget target, String oicValue) throws BuildException {
// Target stuff
+ String expectedCleanCmd = "del /myworld";
+ String expectedMakeCommand = "make";
assertTrue(target.isTestTarget());
assertEquals(target.getDefaultExtension(), rootExt);
+ assertEquals(expectedCleanCmd, target.getCleanCommand());
+ assertEquals(expectedMakeCommand, target.getMakeCommand());
// Tools
ITool[] tools = target.getTools();
@@ -570,6 +580,16 @@
assertEquals("doIt", tools[0].getToolCommand());
}
+ /**
+ * @param testSubSub
+ */
+ private void checkSubSubTarget(ITarget target) {
+ // Check the inherited clean command
+ assertEquals("rm -yourworld", target.getCleanCommand());
+ assertEquals("nmake", target.getMakeCommand());
+
+ }
+
/*
* Do a sanity check on the values in the sub-target. Most of the
* sanity on the how build model entries are read is performed in
@@ -578,6 +598,10 @@
* in the sub target, the test does a sanity check just to be complete.
*/
private void checkSubTarget(ITarget target) throws BuildException {
+ // Check the overridden clan command
+ assertEquals("rm -yourworld", target.getCleanCommand());
+ assertEquals("gmake", target.getMakeCommand());
+
// Make sure this is a test target
assertTrue(target.isTestTarget());
// Make sure the build artifact extension is there
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.128
diff -u -r1.128 ChangeLog
--- ChangeLog 25 Jul 2003 17:30:56 -0000 1.128
+++ ChangeLog 28 Jul 2003 19:00:06 -0000
@@ -1,3 +1,13 @@
+2003-07-28 Sean Evoy
+ In order to meet certain internal guidelines and to test the makefile
+ generator, the build model replied to some answers with hard-coded information.
+ This patch moves the information into the build model.
+
+ * plugin.xml:
+ Added new attributes to Targets to add make command, clean command and
+ make flag information. I also added a toolchain specification for Solaris, but
+ it is turned off for now until I test it.
+
2003-07-24 Sean Evoy
* plugin.xml:
Added new attributes to tools and changed the value type enum for
Index: plugin.xml
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/plugin.xml,v
retrieving revision 1.36
diff -u -r1.36 plugin.xml
--- plugin.xml 25 Jul 2003 17:30:56 -0000 1.36
+++ plugin.xml 28 Jul 2003 19:00:06 -0000
@@ -621,9 +621,12 @@
name="Managed Build Tools Description"
point="org.eclipse.cdt.core.ManagedBuildInfo">
<target
+ makeFlags="-k"
isTest="false"
+ cleanCommand="rm -rf"
name="Cygwin"
isAbstract="true"
+ makeCommand="make"
id="cygwin">
<tool
sources="c,cc,cpp,cxx,C"
@@ -888,9 +891,12 @@
</tool>
</target>
<target
+ makeFlags="-k"
isTest="true"
+ cleanCommand="rm -rf"
name="Linux"
isAbstract="true"
+ makeCommand="make"
id="linux">
<tool
name="Compiler"
@@ -958,6 +964,82 @@
<tool
name="Archiver"
id="org.eclipse.cdt.ui.tests.tool.linux.ar">
+ </tool>
+ </target>
+ <target
+ makeFlags="-k"
+ isTest="true"
+ cleanCommand="rm -rf"
+ name="Solaris"
+ isAbstract="true"
+ makeCommand="make"
+ id="solaris">
+ <tool
+ name="Compiler"
+ outputFlag="-o"
+ id="solaris.compiler">
+ <optionCategory
+ owner="solaris.compiler"
+ name="Optimization Options"
+ id="solaris.compiler.optimization">
+ </optionCategory>
+ <option
+ name="Compiler Flags"
+ valueType="string"
+ id="solaris.compiler.flags">
+ </option>
+ <option
+ name="Optimization Flags"
+ category="solaris.compiler.optimization"
+ value="-O"
+ valueType="string"
+ id="solaris.compiler.optimizationFlags">
+ </option>
+ </tool>
+ </target>
+ <target
+ isTest="true"
+ name="Solaris Executable"
+ parent="solaris"
+ isAbstract="false"
+ id="solaris.exec">
+ <tool
+ name="Linker"
+ outputFlag="-o"
+ id="solaris.link">
+ </tool>
+ <configuration
+ name="Release"
+ id="Solaris.exec.release">
+ </configuration>
+ <configuration
+ name="Debug"
+ id="solaris.exec.debug">
+ </configuration>
+ </target>
+ <target
+ isTest="true"
+ name="Solaris Shared Library"
+ parent="solaris"
+ defaultExtension=".so"
+ isAbstract="false"
+ id="solaris.so">
+ <tool
+ name="Linker"
+ outputFlag="-o"
+ id="solaris.solink">
+ </tool>
+ </target>
+ <target
+ isTest="true"
+ name="Solaris Static Library"
+ parent="solaris"
+ defaultExtension=".a"
+ isAbstract="false"
+ id="solaris.lib">
+ <tool
+ name="Archiver"
+ id="solaris.ar">
</tool>
</target>
</extension>