SF.net SVN: ant-contrib: [137] cpptasks/trunk/src/main/java/net/sf/ antcontrib/cpptasks/apple

[email protected] Fri, 03 Aug 2007 19:34:12 -0700
Newsgroups gmane.comp.java.ant-contrib.devel
Message-ID <[email protected]>
Revision: 137
          http://ant-contrib.svn.sourceforge.net/ant-contrib/?rev=137&view=rev
Author:   carnold
Date:     2007-08-03 19:34:12 -0700 (Fri, 03 Aug 2007)

Log Message:
-----------
Bug 980130: XCode continued, dylibs recognized

Modified Paths:
--------------
    cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
    cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java

Modified: cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
===================================================================
--- cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java	2007-08-03 07:28:01 UTC (rev 136)
+++ cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java	2007-08-04 02:34:12 UTC (rev 137)
@@ -22,12 +22,16 @@
 
 import javax.xml.transform.Result;
 import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.io.File;
+import java.io.IOException;
+import java.io.FileOutputStream;
 
 /**
  * Static class that provides methods to serialize
@@ -45,16 +49,20 @@
     /**
      * Serializes a property list into a Cocoa XML Property List document.
      * @param propertyList property list.
-     * @param result destination.
+     * @param file destination.
      * @throws SAXException if exception during serialization.
      * @throws TransformerConfigurationException if exception creating serializer.
      */
     public static void serialize(final Map propertyList,
-                                 final Result result)
-           throws SAXException, TransformerConfigurationException {
+                                 final File file)
+           throws IOException, SAXException,
+               TransformerConfigurationException {
         SAXTransformerFactory sf = (SAXTransformerFactory)
                 SAXTransformerFactory.newInstance();
         TransformerHandler handler = sf.newTransformerHandler();
+
+        FileOutputStream os = new FileOutputStream(file);
+        StreamResult result = new StreamResult(os);
         handler.setResult(result);
 
         handler.startDocument();

Modified: cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java
===================================================================
--- cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java	2007-08-03 07:28:01 UTC (rev 136)
+++ cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/apple/XcodeProjectWriter.java	2007-08-04 02:34:12 UTC (rev 137)
@@ -17,20 +17,18 @@
 package net.sf.antcontrib.cpptasks.apple;
 
 import net.sf.antcontrib.cpptasks.CCTask;
+import net.sf.antcontrib.cpptasks.CUtil;
 import net.sf.antcontrib.cpptasks.TargetInfo;
-import net.sf.antcontrib.cpptasks.CUtil;
 import net.sf.antcontrib.cpptasks.compiler.CommandLineCompilerConfiguration;
+import net.sf.antcontrib.cpptasks.compiler.CommandLineLinkerConfiguration;
 import net.sf.antcontrib.cpptasks.compiler.ProcessorConfiguration;
-import net.sf.antcontrib.cpptasks.compiler.CommandLineLinkerConfiguration;
 import net.sf.antcontrib.cpptasks.gcc.GccCCompiler;
 import net.sf.antcontrib.cpptasks.ide.ProjectDef;
 import net.sf.antcontrib.cpptasks.ide.ProjectWriter;
 import org.apache.tools.ant.BuildException;
 import org.xml.sax.SAXException;
 
-import javax.xml.transform.Result;
 import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.stream.StreamResult;
 import java.io.File;
 import java.io.IOException;
 import java.text.NumberFormat;
@@ -186,10 +184,8 @@
         //
         //    write property list out to XML file
         //
-        Result result = new StreamResult(xcodeProj);
-
         try {
-            PropertyListSerialization.serialize(propertyList, result);
+            PropertyListSerialization.serialize(propertyList, xcodeProj);
         } catch (TransformerConfigurationException ex) {
             throw new IOException(ex.toString());
         } catch (SAXException ex) {
@@ -236,6 +232,8 @@
         String fileType = "compiled.mach-o.executable";
         if (isStaticLibrary(linkTarget)) {
             fileType = "archive.ar";
+        } else if (isDylibLibrary(linkTarget)) {
+            fileType = "compiled.mach-o.dylib";
         }
         executableProperties.put("explicitFileType", fileType);
         executableProperties.put("includeInIndex", "0");
@@ -334,6 +332,7 @@
     /**
      * Add project configuration list.
      * @param objects map of objects.
+     * @param baseDir base directory.
      * @param compilerConfig compiler configuration.
      * @param linkerConfig linker configuration.
      * @return project configuration object.
@@ -368,7 +367,7 @@
         PBXObjectRef configurationList = createXCConfigurationList(configurations);
         Map projectConfigurationListProperties = configurationList.getProperties();
         projectConfigurationListProperties.put("defaultConfigurationIsVisible", "0");
-        projectConfigurationListProperties.put("defaultConfigurationName", "Release");
+        projectConfigurationListProperties.put("defaultConfigurationName", "Debug");
         objects.put(configurationList.getID(), configurationList.getProperties());
 
         //
@@ -409,9 +408,12 @@
 
         String[] linkerArgs = linkerConfig.getPreArguments();
         List librarySearchPaths = new ArrayList();
+        List libNames = new ArrayList();
         for (int i = 0; i < linkerArgs.length; i++) {
             if (linkerArgs[i].startsWith("-L")) {
                  librarySearchPaths.add(linkerArgs[i].substring(2));
+            } else if (linkerArgs[i].startsWith("-l")) {
+                 libNames.add(linkerArgs[i]);
             }
         }
         if (librarySearchPaths.size() > 0) {
@@ -419,9 +421,11 @@
             debugSettings.put("LIBRARY_SEARCH_PATHS", librarySearchPaths);
             releaseSettings.put("LIBRARY_SEARCH_PATHS", librarySearchPaths);
         }
-
-
-
+        if (libNames.size() > 0) {
+            libNames.add("$(inherited)");
+            debugSettings.put("OTHER_LDFLAGS", libNames);
+            releaseSettings.put("OTHER_LDFLAGS", libNames);
+        }
         return configurationList;
     }
 
@@ -484,6 +488,8 @@
         String productType = "com.apple.product-type.tool";
         if (isStaticLibrary(linkTarget)) {
             productType = "com.apple.product-type.library.static";
+        } else if (isDylibLibrary(linkTarget)) {
+            productType = "com.apple.product-type.library.dynamic";            
         }
 
         PBXObjectRef nativeTarget = createPBXNativeTarget(projectName,
@@ -504,6 +510,16 @@
         return (outPath.lastIndexOf(".a") == outPath.length() - 2);
     }
 
+    /**
+     * Determines if linked target is a static library.
+     * @param linkTarget link target
+     * @return true if a static library
+     */
+    private static boolean isDylibLibrary(final TargetInfo linkTarget) {
+        String outPath = linkTarget.getOutput().getPath();
+        return (outPath.lastIndexOf(".dylib") == outPath.length() - 6 &&
+            outPath.length() > 6);
+    }
 
     /**
      * Create PBXFileReference.


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/