summaryrefslogtreecommitdiff
path: root/src/main/java/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net')
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/CCTask.java250
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/CompilerEnum.java26
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/DependencyInfo.java48
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/DependencyTable.java103
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java1
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/LinkerEnum.java17
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/OutputTypeEnum.java4
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/SubsystemEnum.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/TargetHistoryTable.java9
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/VersionInfo.java2
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/antlib.xml22
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java24
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/compaq/CompaqVisualFortranCompiler.java16
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractProcessor.java7
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/compiler/CaptureStreamHandler.java221
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinker.java10
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkType.java33
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCCompiler.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleCCompiler.java1
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLibrarian.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLinker.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioMIDLCompiler.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioResourceCompiler.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java30
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCCompiler.java21
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCompatibleCCompiler.java12
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java27
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java94
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java5
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CCompiler.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CLinker.java35
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Compiler.java36
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Linker.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CCompiler.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CLinker.java36
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Compiler.java36
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Linker.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinuxFortranCompiler.java37
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCLinker.java3
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCompiler.java98
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/sun/ForteF77Compiler.java98
41 files changed, 1153 insertions, 239 deletions
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java b/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java
index 2e6adab..ab40e95 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java
@@ -16,10 +16,15 @@
*/
package net.sf.antcontrib.cpptasks;
import java.io.File;
+import java.io.FileFilter;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.HashSet;
import java.util.Hashtable;
-import java.util.*;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
import net.sf.antcontrib.cpptasks.compiler.CompilerConfiguration;
import net.sf.antcontrib.cpptasks.compiler.LinkType;
@@ -120,6 +125,12 @@ import org.apache.tools.ant.types.Environment;
* @author Curt Arnold
*/
public class CCTask extends Task {
+
+
+
+
+
+
private static class SystemLibraryCollector implements FileVisitor {
private Hashtable libraries;
private Linker linker;
@@ -180,6 +191,8 @@ public class CCTask extends Task {
}
return targetsByConfig;
}
+ // FREEHEP
+ private int maxCores = 0;
/** The compiler definitions. */
private Vector _compilers = new Vector();
/** The output file type. */
@@ -706,6 +719,11 @@ public class CCTask extends Task {
}
}
}
+ // BEGINFREEHEP
+ Progress progress = new Progress(getObjdir(), rebuildCount);
+ progress.start();
+ // ENDFREEHEP
+
for (int i = 0; i < targetVectors.length; i++) {
//
// get the targets for this configuration
@@ -719,6 +737,100 @@ public class CCTask extends Task {
//
// prepare the list of source files
//
+
+ // BEGINFREEHEP
+ int noOfCores = Runtime.getRuntime().availableProcessors();
+ log("Found "+noOfCores+" processors available");
+ if (maxCores > 0) {
+ noOfCores = Math.min(maxCores, noOfCores);
+ log("Limited processors to "+noOfCores);
+ }
+ int noOfFiles = targetsForConfig.size();
+ if (noOfFiles < noOfCores) {
+ noOfCores = noOfFiles;
+ log("Limited used processors to "+noOfCores);
+ }
+
+ Set[] sourceFiles = new HashSet[noOfCores];
+ for (int j = 0; j < sourceFiles.length; j++) {
+ sourceFiles[j] = new HashSet(noOfFiles
+ / sourceFiles.length);
+ }
+ Enumeration targetsEnum = targetsForConfig.elements();
+ index = 0;
+ while (targetsEnum.hasMoreElements()) {
+ TargetInfo targetInfo = ((TargetInfo) targetsEnum
+ .nextElement());
+ sourceFiles[index++].add(targetInfo.getSources()[0]
+ .toString());
+ index %= sourceFiles.length;
+ }
+
+ // setup cores/cpus
+ Core[] cores = new Core[noOfCores];
+ for (int j = 0; j < cores.length; j++) {
+ cores[j] = new Core(this, j, config, _objDir, sourceFiles[j],
+ relentless, monitor);
+ log("\nStarting Core " + j + " with "
+ + sourceFiles[j].size() + " source files...");
+ }
+
+ // starting cores
+ for (int j = 0; j < cores.length; j++) {
+ cores[j].start();
+ }
+
+ // checking cores
+ boolean alive = false;
+ try {
+ do {
+ alive = false;
+ for (int j = 0; j < cores.length; j++) {
+ if (cores[j] != null) {
+ if (cores[j].isAlive()) {
+ alive = true;
+ } else {
+ Exception exception = cores[j].getException();
+ if (exception != null) {
+ if ((compileException == null) && (exception instanceof BuildException)) {
+ compileException = (BuildException)exception;
+ } else {
+ log(cores[j].getName()+" "+exception+" ", Project.MSG_ERR);
+ }
+ if (!relentless) {
+ cores[j] = null;
+ alive = false;
+ break;
+ }
+ }
+ cores[j] = null;
+ }
+ }
+ }
+ if (alive) {
+ // wait for a maximum of 5 seconds or #files*2 seconds.
+ Thread.sleep(Math.min(5000, sourceFiles[0].size()*2000));
+ }
+ } while (alive);
+ } catch (InterruptedException e) {
+ break;
+ }
+
+ // killing leftovers
+ for (int j = 0; j < cores.length; j++) {
+ if (cores[j] != null) {
+ cores[j].interrupt();
+ log(cores[j].getName()+" interrupted ");
+ }
+ }
+
+ if ((!relentless) && (compileException != null)) {
+ break;
+ }
+ // ENDFREEHEP
+
+
+ /* OLD CODE
String[] sourceFiles = new String[targetsForConfig.size()];
Enumeration targetsEnum = targetsForConfig.elements();
index = 0;
@@ -738,7 +850,17 @@ public class CCTask extends Task {
if (!relentless)
break;
}
+ */
}
+
+ // BEGINFREEHEP
+ progress.exit();
+ try {
+ progress.join();
+ } catch (InterruptedException ex) {
+ }
+ // ENDFREEHEP
+
//
// save the details of the object file compilation
// settings to disk for dependency analysis
@@ -796,9 +918,12 @@ public class CCTask extends Task {
//
File output = linkTarget.getOutput();
if (linkTarget.getRebuild()) {
- log("Starting link");
LinkerConfiguration linkConfig = (LinkerConfiguration) linkTarget
.getConfiguration();
+ // BEGINFREEHEP
+ log("Linking...");
+ log("Starting link {" + linkConfig.getIdentifier() + "}");
+ // ENDFREEHEP
if (failOnError) {
linkConfig.link(this, linkTarget);
} else {
@@ -825,6 +950,101 @@ public class CCTask extends Task {
}
}
}
+
+ // BEGINFREEHEP
+ class Core extends Thread {
+ private CCTask task;
+ private CompilerConfiguration config;
+ private File objDir;
+ private Set sourceFiles;
+ private boolean relentless;
+ private CCTaskProgressMonitor monitor;
+ private Exception compileException;
+
+ Core(CCTask task, int coreNo, CompilerConfiguration config, File objDir,
+ Set set, boolean relentless,
+ CCTaskProgressMonitor monitor) {
+ super("Core "+coreNo);
+ this.task = task;
+ this.config = config;
+ this.objDir = objDir;
+ this.sourceFiles = set;
+ this.relentless = relentless;
+ this.monitor = monitor;
+ }
+
+ public Exception getException() {
+ return compileException;
+ }
+
+ public void run() {
+ super.run();
+ try {
+ String[] sources = new String[sourceFiles.size()];
+ sources = (String[]) sourceFiles.toArray(sources);
+ config.compile(task, objDir, sources, relentless, monitor);
+ } catch (Exception ex) {
+ if (compileException == null) {
+ compileException = ex;
+ }
+ }
+ }
+ }
+
+ // ENDFREEHEP
+
+ // BEGINFREEHEP
+ class Progress extends Thread {
+
+ private boolean stop = false;
+ private File objDir;
+ private int rebuildCount;
+
+ public Progress(File objDir, int rebuildCount) {
+ this.objDir = objDir;
+ this.rebuildCount = rebuildCount;
+ }
+
+ public void run() {
+ if (rebuildCount < 10)
+ return;
+ try {
+ FileFilter updatedFiles = new FileFilter() {
+ private long startTime = System.currentTimeMillis();
+
+ public boolean accept(File file) {
+ return file.lastModified() > startTime
+ && !file.getName().endsWith(".xml");
+ }
+ };
+ while (!stop) {
+ System.err.print("\r"
+ + objDir.listFiles(updatedFiles).length + " / "
+ + rebuildCount + " files compiled...");
+ System.err.print("\r");
+ System.err.flush();
+ if (!stop) {
+ Thread.sleep(5000);
+ }
+ }
+ } catch (InterruptedException e) {
+ }
+ System.err
+ .print("\r ");
+ System.err.print("\r");
+ System.err.flush();
+ log(Integer.toString(rebuildCount) + " files were compiled.");
+ }
+
+ public void exit() {
+ stop = true;
+ }
+
+ }
+
+ // ENDFREEHEP
+
+
/**
* Gets the dataset.
*
@@ -1103,6 +1323,18 @@ public class CCTask extends Task {
public void setLink(OutputTypeEnum outputType) {
linkType.setOutputType(outputType);
}
+
+ // BEGINFREEHEP
+ public void setLinkCPP(boolean linkCPP) {
+ linkType.setLinkCPP(linkCPP);
+ }
+
+ public void setLinkFortran(boolean linkFortran) {
+ linkType.setLinkFortran(linkFortran);
+ }
+
+ // ENDFREEHEP
+
/**
* Enables or disables generation of multithreaded code
*
@@ -1372,7 +1604,18 @@ public class CCTask extends Task {
public void setWarnings(WarningLevelEnum level) {
compilerDef.setWarnings(level);
}
-
+
+ // BEGINFREEHEP
+ public void setMaxCores(int maxCores) {
+ this.maxCores = maxCores;
+ }
+
+ public int getMaxCores() {
+ return maxCores;
+ }
+
+ // ENDFREEHEP
+
/**
* Indicates whether the build will continue
* even if there are compilation errors; defaults to true.
@@ -1436,5 +1679,4 @@ public class CCTask extends Task {
newVersionInfo.setProject(this.getProject());
versionInfos.addElement(newVersionInfo);
}
-
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/CompilerEnum.java b/src/main/java/net/sf/antcontrib/cpptasks/CompilerEnum.java
index 0233050..9e00744 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/CompilerEnum.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/CompilerEnum.java
@@ -21,27 +21,32 @@ import net.sf.antcontrib.cpptasks.borland.BorlandResourceCompiler;
import net.sf.antcontrib.cpptasks.compaq.CompaqVisualFortranCompiler;
import net.sf.antcontrib.cpptasks.compiler.Compiler;
import net.sf.antcontrib.cpptasks.devstudio.DevStudioCCompiler;
-import net.sf.antcontrib.cpptasks.devstudio.DevStudio2005CCompiler;
import net.sf.antcontrib.cpptasks.devstudio.DevStudioMIDLCompiler;
+import net.sf.antcontrib.cpptasks.devstudio.DevStudio2005CCompiler;
import net.sf.antcontrib.cpptasks.devstudio.DevStudioResourceCompiler;
import net.sf.antcontrib.cpptasks.gcc.GccCCompiler;
import net.sf.antcontrib.cpptasks.gcc.WindresResourceCompiler;
import net.sf.antcontrib.cpptasks.hp.aCCCompiler;
import net.sf.antcontrib.cpptasks.ibm.VisualAgeCCompiler;
import net.sf.antcontrib.cpptasks.intel.IntelLinux32CCompiler;
+import net.sf.antcontrib.cpptasks.intel.IntelLinux32Compiler;
import net.sf.antcontrib.cpptasks.intel.IntelLinux64CCompiler;
+import net.sf.antcontrib.cpptasks.intel.IntelLinux64Compiler;
+import net.sf.antcontrib.cpptasks.intel.IntelLinuxFortranCompiler;
import net.sf.antcontrib.cpptasks.intel.IntelWin32CCompiler;
import net.sf.antcontrib.cpptasks.intel.IntelWin64CCompiler;
import net.sf.antcontrib.cpptasks.mozilla.XpidlCompiler;
+import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomCCompiler;
+import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomFortranCompiler;
import net.sf.antcontrib.cpptasks.os390.OS390CCompiler;
import net.sf.antcontrib.cpptasks.os400.IccCompiler;
import net.sf.antcontrib.cpptasks.sun.C89CCompiler;
import net.sf.antcontrib.cpptasks.sun.ForteCCCompiler;
+import net.sf.antcontrib.cpptasks.sun.ForteCCompiler;
+import net.sf.antcontrib.cpptasks.sun.ForteF77Compiler;
import net.sf.antcontrib.cpptasks.ti.ClxxCCompiler;
import net.sf.antcontrib.cpptasks.trolltech.MetaObjectCompiler;
import net.sf.antcontrib.cpptasks.trolltech.UserInterfaceCompiler;
-import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomCCompiler;
-import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomFortranCompiler;
import org.apache.tools.ant.types.EnumeratedAttribute;
/**
@@ -105,6 +110,10 @@ import org.apache.tools.ant.types.EnumeratedAttribute;
* <td>Intel C++ compiler for Linux (IA-32)</td>
* </tr>
* <tr>
+ * <td>ifort</td>
+ * <td>Intel Fortran compiler for Linux (IA-32)</td>
+ * </tr>
+ * <tr>
* <td>ecc</td>
* <td>Intel C++ compiler for Linux (IA-64)</td>
* </tr>
@@ -191,6 +200,8 @@ public class CompilerEnum extends EnumeratedAttribute {
new ProcessorEnumValue("g++", GccCCompiler.getGppInstance()),
new ProcessorEnumValue("c++", GccCCompiler.getCppInstance()),
new ProcessorEnumValue("g77", GccCCompiler.getG77Instance()),
+// FREEHEP
+ new ProcessorEnumValue("gfortran", GccCCompiler.getGFortranInstance()),
new ProcessorEnumValue("msvc", DevStudioCCompiler.getInstance()),
new ProcessorEnumValue("msvc8", DevStudio2005CCompiler.getInstance()),
new ProcessorEnumValue("bcc", BorlandCCompiler.getInstance()),
@@ -202,9 +213,18 @@ public class CompilerEnum extends EnumeratedAttribute {
new ProcessorEnumValue("midl", DevStudioMIDLCompiler.getInstance()),
new ProcessorEnumValue("icl", IntelWin32CCompiler.getInstance()),
new ProcessorEnumValue("ecl", IntelWin64CCompiler.getInstance()),
+// BEGINFREEHEP
new ProcessorEnumValue("icc", IntelLinux32CCompiler.getInstance()),
new ProcessorEnumValue("ecc", IntelLinux64CCompiler.getInstance()),
+ new ProcessorEnumValue("icpc", IntelLinux32Compiler.getInstance()),
+ new ProcessorEnumValue("ecpc", IntelLinux64Compiler.getInstance()),
+ new ProcessorEnumValue("ifort", IntelLinuxFortranCompiler.getInstance()),
+// ENDFREEHEP
new ProcessorEnumValue("CC", ForteCCCompiler.getInstance()),
+// BEGINFREEHEP
+ new ProcessorEnumValue("suncc", ForteCCompiler.getInstance()),
+ new ProcessorEnumValue("sunf77", ForteF77Compiler.getInstance()),
+// ENDFREEHEP
new ProcessorEnumValue("aCC", aCCCompiler.getInstance()),
new ProcessorEnumValue("os390", OS390CCompiler.getInstance()),
new ProcessorEnumValue("os400", IccCompiler.getInstance()),
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/DependencyInfo.java b/src/main/java/net/sf/antcontrib/cpptasks/DependencyInfo.java
index a04105f..d14966e 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/DependencyInfo.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/DependencyInfo.java
@@ -26,12 +26,15 @@ public final class DependencyInfo {
* Not persisted since almost any change could invalidate it. Initialized
* to long.MIN_VALUE on construction.
*/
- private long compositeLastModified;
+// FREEHEP
+// private long compositeLastModified;
private/* final */String includePathIdentifier;
private/* final */String[] includes;
private/* final */String source;
private/* final */long sourceLastModified;
private/* final */String[] sysIncludes;
+// FREEHEP
+ private Object tag = null;
public DependencyInfo(String includePathIdentifier, String source,
long sourceLastModified, Vector includes, Vector sysIncludes) {
if (source == null) {
@@ -44,25 +47,34 @@ public final class DependencyInfo {
this.sourceLastModified = sourceLastModified;
this.includePathIdentifier = includePathIdentifier;
this.includes = new String[includes.size()];
- if (includes.size() == 0) {
- compositeLastModified = sourceLastModified;
- } else {
- includes.copyInto(this.includes);
- compositeLastModified = Long.MIN_VALUE;
- }
+// BEGINFREEHEP
+// if (includes.size() == 0) {
+// compositeLastModified = sourceLastModified;
+// } else {
+// includes.copyInto(this.includes);
+// compositeLastModified = Long.MIN_VALUE;
+// }
+// ENDFREEHEP
this.sysIncludes = new String[sysIncludes.size()];
+// FREEHEP
+ includes.copyInto(this.includes);
sysIncludes.copyInto(this.sysIncludes);
}
/**
* Returns the latest modification date of the source or anything that it
* depends on.
*
- * @return the composite lastModified time, returns Long.MIN_VALUE if not
+ * @returns the composite lastModified time, returns Long.MIN_VALUE if not
* set
*/
- public long getCompositeLastModified() {
- return compositeLastModified;
+// BEGINFREEHEP
+// public long getCompositeLastModified() {
+// return compositeLastModified;
+// }
+ public void setTag(Object t) {
+ tag = t;
}
+// ENDFREEHEP
public String getIncludePathIdentifier() {
return includePathIdentifier;
}
@@ -80,7 +92,19 @@ public final class DependencyInfo {
String[] sysIncludesClone = (String[]) sysIncludes.clone();
return sysIncludesClone;
}
- public void setCompositeLastModified(long lastMod) {
- compositeLastModified = lastMod;
+// BEGINFREEHEP
+ /**
+ * Returns true, if dependency info is tagged with object t.
+ *
+ * @param t object to compare with
+ *
+ * @return boolean, true, if tagged with t, otherwise false
+ */
+ public boolean hasTag(Object t) {
+ return tag == t;
}
+// public void setCompositeLastModified(long lastMod) {
+// compositeLastModified = lastMod;
+// }
+// ENDFREEHEP
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/DependencyTable.java b/src/main/java/net/sf/antcontrib/cpptasks/DependencyTable.java
index 48a7278..aaa3881 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/DependencyTable.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/DependencyTable.java
@@ -178,29 +178,35 @@ public final class DependencyTable {
return !noNeedToRebuild;
}
public boolean preview(DependencyInfo parent, DependencyInfo[] children) {
- int withCompositeTimes = 0;
- long parentCompositeLastModified = parent.getSourceLastModified();
- for (int i = 0; i < children.length; i++) {
+// BEGINFREEHEP
+// int withCompositeTimes = 0;
+// long parentCompositeLastModified = parent.getSourceLastModified();
+// ENDFREEHEP
+ for (int i = 0; i < children.length; i++) {
if (children[i] != null) {
//
// expedient way to determine if a child forces us to
// rebuild
//
visit(children[i]);
- long childCompositeLastModified = children[i]
- .getCompositeLastModified();
- if (childCompositeLastModified != Long.MIN_VALUE) {
- withCompositeTimes++;
- if (childCompositeLastModified > parentCompositeLastModified) {
- parentCompositeLastModified = childCompositeLastModified;
- }
- }
+// BEGINFREEHEP
+// long childCompositeLastModified = children[i]
+// .getCompositeLastModified();
+// if (childCompositeLastModified != Long.MIN_VALUE) {
+// withCompositeTimes++;
+// if (childCompositeLastModified > parentCompositeLastModified) {
+// parentCompositeLastModified = childCompositeLastModified;
+// }
+// }
+// ENDFREEHEP
}
}
- if (withCompositeTimes == children.length) {
- parent.setCompositeLastModified(parentCompositeLastModified);
- }
- //
+// BEGINFREEHEP
+// if (withCompositeTimes == children.length) {
+// parent.setCompositeLastModified(parentCompositeLastModified);
+// }
+// ENDFREEHEP
+ //
// may have been changed by an earlier call to visit()
//
return noNeedToRebuild;
@@ -212,8 +218,9 @@ public final class DependencyTable {
}
public boolean visit(DependencyInfo dependInfo) {
if (noNeedToRebuild) {
- if (CUtil.isSignificantlyAfter(dependInfo.getSourceLastModified(), outputLastModified)
- || CUtil.isSignificantlyAfter(dependInfo.getCompositeLastModified(), outputLastModified)) {
+ if (CUtil.isSignificantlyAfter(dependInfo.getSourceLastModified(), outputLastModified)) {
+//FREEHEP
+// || CUtil.isSignificantlyAfter(dependInfo.getCompositeLastModified(), outputLastModified)) {
noNeedToRebuild = false;
}
}
@@ -222,8 +229,9 @@ public final class DependencyTable {
// it has not yet been determined whether
// we need to rebuild and the composite modified time
// has not been determined for this file
- return noNeedToRebuild
- && dependInfo.getCompositeLastModified() == Long.MIN_VALUE;
+ return noNeedToRebuild;
+// FREEHEP
+// && dependInfo.getCompositeLastModified() == Long.MIN_VALUE;
}
}
private/* final */File baseDir;
@@ -466,35 +474,43 @@ public final class DependencyTable {
public void walkDependencies(CCTask task, DependencyInfo dependInfo,
CompilerConfiguration compiler, DependencyInfo[] stack,
DependencyVisitor visitor) throws BuildException {
+// BEGINFREEHEP
+ if (dependInfo.hasTag(visitor)) {
+ return;
+ }
+ dependInfo.setTag(visitor);
+// ENDFREEHEP
//
// visit this node
// if visit returns true then
// visit the referenced include and sysInclude dependencies
//
if (visitor.visit(dependInfo)) {
- //
- // find first null entry on stack
- //
- int stackPosition = -1;
- for (int i = 0; i < stack.length; i++) {
- if (stack[i] == null) {
- stackPosition = i;
- stack[i] = dependInfo;
- break;
- } else {
- //
- // if we have appeared early in the calling history
- // then we didn't exceed the criteria
- if (stack[i] == dependInfo) {
- return;
- }
- }
- }
- if (stackPosition == -1) {
- visitor.stackExhausted();
- return;
- }
- //
+// BEGINFREEHEP
+// //
+// // find first null entry on stack
+// //
+// int stackPosition = -1;
+// for (int i = 0; i < stack.length; i++) {
+// if (stack[i] == null) {
+// stackPosition = i;
+// stack[i] = dependInfo;
+// break;
+// } else {
+// //
+// // if we have appeared early in the calling history
+// // then we didn't exceed the criteria
+// if (stack[i] == dependInfo) {
+// return;
+// }
+// }
+// }
+// if (stackPosition == -1) {
+// visitor.stackExhausted();
+// return;
+// }
+// ENDFREEHEP
+ //
// locate dependency infos
//
String[] includes = dependInfo.getIncludes();
@@ -544,7 +560,8 @@ public final class DependencyTable {
}
}
}
- stack[stackPosition] = null;
+// FREEHEP
+// stack[stackPosition] = null;
}
}
private void writeDependencyInfo(BufferedWriter writer, StringBuffer buf,
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java b/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java
index cde8837..92595bd 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java
@@ -23,7 +23,6 @@ import net.sf.antcontrib.cpptasks.compiler.CommandLineLinker;
import net.sf.antcontrib.cpptasks.compiler.LinkType;
import net.sf.antcontrib.cpptasks.compiler.Linker;
import net.sf.antcontrib.cpptasks.compiler.Processor;
-import net.sf.antcontrib.cpptasks.compiler.ProcessorConfiguration;
import net.sf.antcontrib.cpptasks.gcc.GccLinker;
import net.sf.antcontrib.cpptasks.types.FlexLong;
import net.sf.antcontrib.cpptasks.types.LibrarySet;
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/LinkerEnum.java b/src/main/java/net/sf/antcontrib/cpptasks/LinkerEnum.java
index df96723..460860a 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/LinkerEnum.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/LinkerEnum.java
@@ -15,6 +15,8 @@
* limitations under the License.
*/
package net.sf.antcontrib.cpptasks;
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
import net.sf.antcontrib.cpptasks.arm.ADSLinker;
import net.sf.antcontrib.cpptasks.borland.BorlandLinker;
import net.sf.antcontrib.cpptasks.compaq.CompaqVisualFortranLinker;
@@ -27,16 +29,17 @@ import net.sf.antcontrib.cpptasks.gcc.LdLinker;
import net.sf.antcontrib.cpptasks.hp.aCCLinker;
import net.sf.antcontrib.cpptasks.ibm.VisualAgeLinker;
import net.sf.antcontrib.cpptasks.intel.IntelLinux32Linker;
+import net.sf.antcontrib.cpptasks.intel.IntelLinux32CLinker;
import net.sf.antcontrib.cpptasks.intel.IntelLinux64Linker;
+import net.sf.antcontrib.cpptasks.intel.IntelLinux64CLinker;
import net.sf.antcontrib.cpptasks.intel.IntelWin32Linker;
+import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomCLinker;
+import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomFortranLinker;
import net.sf.antcontrib.cpptasks.os390.OS390Linker;
import net.sf.antcontrib.cpptasks.os400.IccLinker;
import net.sf.antcontrib.cpptasks.sun.C89Linker;
import net.sf.antcontrib.cpptasks.sun.ForteCCLinker;
import net.sf.antcontrib.cpptasks.ti.ClxxLinker;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomCLinker;
-import net.sf.antcontrib.cpptasks.openwatcom.OpenWatcomFortranLinker;
/**
* Enumeration of supported linkers
@@ -56,8 +59,12 @@ public class LinkerEnum extends EnumeratedAttribute {
.getInstance()),
new ProcessorEnumValue("icl", IntelWin32Linker.getInstance()),
new ProcessorEnumValue("ecl", IntelWin32Linker.getInstance()),
- new ProcessorEnumValue("icc", IntelLinux32Linker.getInstance()),
- new ProcessorEnumValue("ecc", IntelLinux64Linker.getInstance()),
+// BEGINFREEHEP
+ new ProcessorEnumValue("icc", IntelLinux32CLinker.getInstance()),
+ new ProcessorEnumValue("ecc", IntelLinux64CLinker.getInstance()),
+ new ProcessorEnumValue("icpc", IntelLinux32Linker.getInstance()),
+ new ProcessorEnumValue("ecpc", IntelLinux64Linker.getInstance()),
+// ENDFREEHEP
new ProcessorEnumValue("CC", ForteCCLinker.getInstance()),
new ProcessorEnumValue("aCC", aCCLinker.getInstance()),
new ProcessorEnumValue("os390", OS390Linker.getInstance()),
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/OutputTypeEnum.java b/src/main/java/net/sf/antcontrib/cpptasks/OutputTypeEnum.java
index 873a99c..77092fa 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/OutputTypeEnum.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/OutputTypeEnum.java
@@ -42,7 +42,9 @@ public class OutputTypeEnum extends EnumeratedAttribute {
return new String[]{"executable", // executable program
"plugin", // plugin module
"shared", // dynamically linkable module
- "static" // convenience library
+ "static",
+// FREEHEP
+ "jni" // jni module
};
}
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/SubsystemEnum.java b/src/main/java/net/sf/antcontrib/cpptasks/SubsystemEnum.java
index 19dd207..24dac1b 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/SubsystemEnum.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/SubsystemEnum.java
@@ -26,7 +26,8 @@ public final class SubsystemEnum extends EnumeratedAttribute {
private final static String[] values = new String[]{"gui", "console",
"other"};
public SubsystemEnum() {
- setValue("gui");
+// FREEHEP changed from gui into console
+ setValue("console");
}
public String[] getValues() {
return (String[]) values.clone();
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/TargetHistoryTable.java b/src/main/java/net/sf/antcontrib/cpptasks/TargetHistoryTable.java
index bdab94c..1a6eda1 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/TargetHistoryTable.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/TargetHistoryTable.java
@@ -323,7 +323,8 @@ public final class TargetHistoryTable {
markForRebuild((TargetInfo) targetInfoEnum.nextElement());
}
}
- public void markForRebuild(TargetInfo targetInfo) {
+ // FREEHEP added synchronized
+ public synchronized void markForRebuild(TargetInfo targetInfo) {
//
// if it must already be rebuilt, no need to check further
//
@@ -382,7 +383,8 @@ public final class TargetHistoryTable {
}
}
}
- private void update(String configId, String outputName, String[] sources) {
+// FREEHEP added synchronized
+ private synchronized void update(String configId, String outputName, String[] sources) {
File outputFile = new File(outputDir, outputName);
//
// if output file doesn't exist or predates the start of the
@@ -407,7 +409,8 @@ public final class TargetHistoryTable {
history.put(outputName, newHistory);
}
}
- public void update(TargetInfo linkTarget) {
+ // FREEHEP added synchronized
+ public synchronized void update(TargetInfo linkTarget) {
File outputFile = linkTarget.getOutput();
String outputName = outputFile.getName();
//
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/VersionInfo.java b/src/main/java/net/sf/antcontrib/cpptasks/VersionInfo.java
index 92cfeb0..4ddcd14 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/VersionInfo.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/VersionInfo.java
@@ -212,7 +212,7 @@ public final class VersionInfo extends DataType {
/**
* Returns a VersionInfo that reflects any inherited version information.
* @return merged version information.
- */
+\ */
public VersionInfo merge() {
if (isReference()) {
VersionInfo refVersion = (VersionInfo)
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/antlib.xml b/src/main/java/net/sf/antcontrib/cpptasks/antlib.xml
new file mode 100644
index 0000000..5f8af42
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/antlib.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+ <!--
+ *
+ * Copyright 2004 The Ant-Contrib project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+ <antlib>
+ <taskdef resource="cpptasks.tasks" />
+ <typedef resource="cpptasks.types" />
+ </antlib>
+ \ No newline at end of file
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java b/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
index c3a6807..6a3c410 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/apple/PropertyListSerialization.java
@@ -16,22 +16,22 @@
*/
package net.sf.antcontrib.cpptasks.apple;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-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.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
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;
+
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
/**
* Static class that provides methods to serialize
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compaq/CompaqVisualFortranCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/compaq/CompaqVisualFortranCompiler.java
index 1595ae1..ca3c3e3 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/compaq/CompaqVisualFortranCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/compaq/CompaqVisualFortranCompiler.java
@@ -115,14 +115,16 @@ public class CompaqVisualFortranCompiler extends CommandLineFortranCompiler {
}
protected String getIncludeDirSwitch(String includeDir) {
StringBuffer buf = new StringBuffer("/include:");
- if (includeDir.indexOf(' ') >= 0) {
- buf.append('"');
+// BEGINFREEHEP quotes seem to confuse the compiler
+// if (includeDir.indexOf(' ') >= 0) {
+// buf.append('"');
+// buf.append(includeDir);
+// buf.append('"');
+// } else {
buf.append(includeDir);
- buf.append('"');
- } else {
- buf.append(includeDir);
- }
- return buf.toString();
+// }
+// ENDFREEHEP
+ return buf.toString();
}
public Linker getLinker(LinkType type) {
return CompaqVisualFortranLinker.getInstance().getLinker(type);
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractProcessor.java b/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractProcessor.java
index d0cd77b..045f1ff 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractProcessor.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractProcessor.java
@@ -123,6 +123,13 @@ public abstract class AbstractProcessor implements Processor, Cloneable {
String osName = getOSName();
return "Mac OS X".equals(osName);
}
+// BEGINFREEHEP
+ protected boolean isWindows() {
+ String osName = getOSName();
+ return (osName != null) && osName.startsWith("Windows");
+ }
+// ENDFREEHEP
+
public final String toString() {
return getIdentifier();
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compiler/CaptureStreamHandler.java b/src/main/java/net/sf/antcontrib/cpptasks/compiler/CaptureStreamHandler.java
index 83c59f7..24a0193 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/CaptureStreamHandler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/CaptureStreamHandler.java
@@ -14,7 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+// BEGINFREEHEP, fully replaced with a runner with threads
package net.sf.antcontrib.cpptasks.compiler;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -31,92 +33,135 @@ import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
* @author Curt Arnold
*/
public class CaptureStreamHandler implements ExecuteStreamHandler {
- /**
- * Runs an executable and captures the output in a String array
- *
- * @param cmdline
- * command line arguments
- * @return output of process
- */
- public static String[] run(String[] cmdline) {
- CaptureStreamHandler handler = new CaptureStreamHandler();
- Execute exec = new Execute(handler);
- exec.setCommandline(cmdline);
- try {
- int status = exec.execute();
- } catch (IOException ex) {
- }
- return handler.getOutput();
- }
- private InputStream errorStream;
- private InputStream fromProcess;
- public CaptureStreamHandler() {
- }
- public String[] getOutput() {
- String[] output;
- if (fromProcess != null) {
- Vector lines = new Vector(10);
- try {
- BufferedReader reader = new BufferedReader(
- new InputStreamReader(errorStream));
- for (int i = 0; i < 2; i++) {
- for (int j = 0; j < 100; j++) {
- String line = reader.readLine();
- if (line == null) {
- reader = new BufferedReader(new InputStreamReader(
- fromProcess));
- break;
- }
- lines.addElement(line);
- }
- }
- } catch (IOException ex) {
- }
- output = new String[lines.size()];
- lines.copyInto(output);
- return output;
- }
- output = new String[0];
- return output;
- }
- /**
- * Install a handler for the error stream of the subprocess.
- *
- * @param is
- * input stream to read from the error stream from the
- * subprocess
- */
- public void setProcessErrorStream(InputStream is) throws IOException {
- errorStream = is;
- }
- /**
- * Install a handler for the input stream of the subprocess.
- *
- * @param os
- * output stream to write to the standard input stream of the
- * subprocess
- */
- public void setProcessInputStream(OutputStream os) throws IOException {
- os.close();
- }
- /**
- * Install a handler for the output stream of the subprocess.
- *
- * @param is
- * input stream to read from the error stream from the
- * subprocess
- */
- public void setProcessOutputStream(InputStream is) throws IOException {
- fromProcess = is;
- }
- /**
- * Start handling of the streams.
- */
- public void start() throws IOException {
- }
- /**
- * Stop handling of the streams - will not be restarted.
- */
- public void stop() {
- }
+
+ String[] output;
+
+ /**
+ * Runs an executable and captures the output in a String array
+ *
+ * @param cmdline
+ * command line arguments
+ * @return output of process
+ */
+ public static String[] run(String[] cmdline) {
+ CaptureStreamHandler handler = new CaptureStreamHandler();
+ Execute exec = new Execute(handler);
+ exec.setCommandline(cmdline);
+ try {
+ int status = exec.execute();
+ } catch (IOException ex) {
+ }
+ return handler.getOutput() != null ? handler.getOutput() : new String[0];
+ }
+
+ private InputStream processErrorStream;
+
+ private InputStream processOutputStream;
+
+ public CaptureStreamHandler() {
+ }
+
+ public String[] getOutput() {
+ return output;
+ }
+
+ static class Copier extends Thread {
+ InputStream is;
+
+ Vector lines;
+
+ Copier(InputStream is) {
+ this.is = is;
+ lines = new Vector(10);
+ }
+
+ public void run() {
+ try {
+ BufferedReader reader = new BufferedReader( new InputStreamReader(is) );
+ while ( true ) {
+ String line = reader.readLine();
+ if ( line == null )
+ break;
+ lines.addElement( line );
+ }
+ } catch (IOException e) {
+ // Ignore
+ }
+ }
+
+ public Vector getLines() {
+ return lines;
+ }
+ }
+
+ /**
+ * Reads concurrently both the process standard output and standard error.
+ * The standard error - if not empty - is copied to the output string array field. Otherwise
+ * the standard output is copied to the output field. The output field is set to an empty array
+ * in case of any error.
+ */
+ public void gatherOutput() {
+ try {
+ Copier errorCopier = new Copier(processErrorStream);
+ Copier outputCopier = new Copier(processOutputStream);
+ errorCopier.start();
+ outputCopier.start();
+ errorCopier.join();
+ outputCopier.join();
+ if (errorCopier.getLines().size() > 0) {
+ output = new String[errorCopier.getLines().size()];
+ errorCopier.getLines().copyInto(output);
+ } else {
+ output = new String[outputCopier.getLines().size()];
+ outputCopier.getLines().copyInto(output);
+ }
+ } catch (Exception e) {
+ output = new String[0];
+ }
+ }
+
+ /**
+ * Install a handler for the error stream of the subprocess.
+ *
+ * @param is
+ * input stream to read from the error stream from the subprocess
+ */
+ public void setProcessErrorStream(InputStream is) throws IOException {
+ processErrorStream = is;
+ }
+
+ /**
+ * Install a handler for the input stream of the subprocess.
+ *
+ * @param os
+ * output stream to write to the standard input stream of the
+ * subprocess
+ */
+ public void setProcessInputStream(OutputStream os) throws IOException {
+ os.close();
+ }
+
+ /**
+ * Install a handler for the output stream of the subprocess.
+ *
+ * @param is
+ * input stream to read from the error stream from the subprocess
+ */
+ public void setProcessOutputStream(InputStream is) throws IOException {
+ processOutputStream = is;
+ }
+
+ /**
+ * Start handling of the streams.
+ */
+ public void start() throws IOException {
+ gatherOutput();
+ }
+
+ /**
+ * Stop handling of the streams - will not be restarted.
+ */
+ public void stop() {
+ }
+// ENDFREEHEP
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinker.java
index 86594fa..93c3e1e 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinker.java
@@ -145,9 +145,10 @@ public abstract class CommandLineLinker extends AbstractLinker
String[] libnames = null;
LibrarySet[] libsets = specificDef.getActiveLibrarySets(defaultProviders,1);
- if (libsets.length > 0) {
+// FREEHEP call at all times
+// if (libsets.length > 0) {
libnames = addLibrarySets(task, libsets, preargs, midargs, endargs);
- }
+// }
StringBuffer buf = new StringBuffer(getIdentifier());
for (int i = 0; i < 3; i++) {
@@ -336,7 +337,10 @@ public abstract class CommandLineLinker extends AbstractLinker
String outputDir, String sourceFile) {
String relativePath = CUtil.getRelativePath(outputDir,
new File(sourceFile));
- return quoteFilename(buf,relativePath);
+// FREEHEP, return the shortest
+// return quoteFilename(buf, sourceFile.length() > relativePath.length() ? relativePath : sourceFile);
+// FREEHEP trying with always absolute paths, as Windows relPaths have a tighter restriction on length than absPaths...
+ return quoteFilename(buf, sourceFile);
}
/**
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkType.java b/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkType.java
index 70ee93f..67d7e6b 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkType.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkType.java
@@ -27,6 +27,12 @@ public class LinkType {
private OutputTypeEnum outputType = new OutputTypeEnum();
private boolean staticRuntime = false;
private SubsystemEnum subsystem = new SubsystemEnum();
+
+// BEGINFREEHEP
+ private boolean linkCPP = true;
+ private boolean linkFortran = false;
+// ENDFREEHEP
+
/**
* Constructor
*
@@ -44,6 +50,11 @@ public class LinkType {
String value = outputType.getValue();
return value.equals("executable");
}
+
+ public boolean isJNIModule() {
+ String value = outputType.getValue();
+ return value.equals("jni");
+ }
/**
* Gets whether the link should produce a plugin module.
*
@@ -60,7 +71,8 @@ public class LinkType {
*/
public boolean isSharedLibrary() {
String value = outputType.getValue();
- return value.equals("shared") || value.equals("plugin");
+// FREEHEP
+ return value.equals("shared") || value.equals("plugin") || value.equals("jni");
}
/**
* Gets whether the link should produce a static library.
@@ -147,4 +159,23 @@ public class LinkType {
public String getSubsystem() {
return subsystem.getValue();
}
+
+// BEGINFREEHEP
+ public void setLinkCPP(boolean linkCPP) {
+ this.linkCPP = linkCPP;
+ }
+
+ public boolean linkCPP() {
+ return linkCPP;
+ }
+
+ public void setLinkFortran(boolean linkFortran) {
+ this.linkFortran = linkFortran;
+ }
+
+ public boolean linkFortran() {
+ return linkFortran;
+ }
+// ENDFREEHEP
+
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCCompiler.java
index 1281046..d0b8b95 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCCompiler.java
@@ -45,6 +45,7 @@ public final class DevStudioCCompiler extends DevStudioCompatibleCCompiler {
return DevStudioLinker.getInstance().getLinker(type);
}
public int getMaximumCommandLength() {
- return 32767;
+// FREEHEP stay on safe side
+ return 32000; // 32767;
}
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleCCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleCCompiler.java
index 5f37855..cc4493d 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleCCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleCCompiler.java
@@ -108,6 +108,7 @@ public abstract class DevStudioCompatibleCCompiler
String lastInclude) {
String[] additionalArgs = new String[]{
"/Fp" + CUtil.getBasename(prototype) + ".pch", "/Yc"};
+ // FREEHEP FIXME we may need /Yd here, but only in debug mode, how do we find out?
return new CommandLineCompilerConfiguration(baseConfig, additionalArgs,
null, true);
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLibrarian.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLibrarian.java
index 985dfcf..de006d8 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLibrarian.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLibrarian.java
@@ -61,7 +61,8 @@ public abstract class DevStudioCompatibleLibrarian extends CommandLineLinker {
return new String[0];
}
public int getMaximumCommandLength() {
- return 32767;
+// FREEHEP stay on the safe side
+ return 32000; // 32767;
}
public String[] getOutputFileSwitch(String outFile) {
StringBuffer buf = new StringBuffer("/OUT:");
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLinker.java
index 80d2aac..987948b 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioCompatibleLinker.java
@@ -117,7 +117,8 @@ public abstract class DevStudioCompatibleLinker extends CommandLineLinker {
return patterns;
}
public int getMaximumCommandLength() {
- return 32767;
+// FREEHEP stay on the safe side
+ return 32000; // 32767;
}
public String[] getOutputFileSwitch(String outputFile) {
return new String[]{"/OUT:" + outputFile};
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioMIDLCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioMIDLCompiler.java
index fa2e414..effd883 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioMIDLCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioMIDLCompiler.java
@@ -94,7 +94,8 @@ public final class DevStudioMIDLCompiler extends CommandLineCompiler {
return DevStudioLinker.getInstance().getLinker(type);
}
public int getMaximumCommandLength() {
- return 32767;
+// FREEHEP stay on the safe side
+ return 32000; // 32767;
}
protected int getMaximumInputFilesPerCommand() {
return 1;
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioResourceCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioResourceCompiler.java
index 6f8360b..3d9b83e 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioResourceCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/devstudio/DevStudioResourceCompiler.java
@@ -99,7 +99,8 @@ public final class DevStudioResourceCompiler extends CommandLineCompiler {
return DevStudioLinker.getInstance().getLinker(type);
}
public int getMaximumCommandLength() {
- return 32767;
+// FREEHEP stay on the safe side
+ return 32000; // 32767;
}
protected int getMaximumInputFilesPerCommand() {
return 1;
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
index 75ddcc7..f1eb2d7 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
@@ -55,11 +55,17 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
args.addElement("-g");
}
if (isDarwin()) {
- if (linkType.isPluginModule()) {
+ if (linkType.isPluginModule()) {
+ args.addElement("-bundle");
+// BEGINFREEHEP
+ } else if (linkType.isJNIModule()) {
+ args.addElement("-dynamic");
args.addElement("-bundle");
+// ENDFREEHEP
} else {
if (linkType.isSharedLibrary()) {
- args.addElement("-prebind");
+// FREEHEP no longer needed for 10.4+
+// args.addElement("-prebind");
args.addElement("-dynamiclib");
}
}
@@ -121,11 +127,16 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
//
if (set.getType() != previousLibraryType) {
if (set.getType() != null && "static".equals(set.getType().getValue())) {
+// BEGINFREEHEP not on MacOS X
+ if (!isDarwin()) {
endargs.addElement(getStaticLibFlag());
previousLibraryType = set.getType();
+ }
+//ENDFREEHEP
} else {
+// FREEHEP not on MacOS X, recheck this!
if (set.getType() == null ||
- !"framework".equals(set.getType().getValue()) ||
+ !"framework".equals(set.getType().getValue()) &&
!isDarwin()) {
endargs.addElement(getDynamicLibFlag());
previousLibraryType = set.getType();
@@ -137,7 +148,8 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
"framework".equals(set.getType().getValue()) &&
isDarwin()) {
buf.setLength(0);
- buf.append("-framework ");
+// FREEHEP, added as endarg w/o trailing space to avoid quoting!
+ endargs.addElement("-framework");
}
int initialLength = buf.length();
for (int j = 0; j < libs.length; j++) {
@@ -154,6 +166,13 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
endargs.addElement(buf.toString());
}
}
+
+// BEGINFREEHEP if last was -Bstatic reset it to -Bdynamic so that libc and libm can be found as shareables
+ if ((previousLibraryType != null) && previousLibraryType.getValue().equals("static") && !isDarwin()) {
+ endargs.addElement(getDynamicLibFlag());
+ }
+// ENDFREEHEP
+
String rc[] = new String[libnames.size()];
for (int i = 0; i < libnames.size(); i++) {
rc[i] = (String) libnames.elementAt(i);
@@ -239,7 +258,8 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
return patterns;
}
public int getMaximumCommandLength() {
- return Integer.MAX_VALUE;
+// FREEHEP
+ return isWindows() ? 20000 : Integer.MAX_VALUE;
}
public String[] getOutputFileNames(String baseName, VersionInfo versionInfo) {
String[] baseNames = super.getOutputFileNames(baseName, versionInfo);
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCCompiler.java
index 999ccf7..f9e4c0b 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCCompiler.java
@@ -59,6 +59,11 @@ public final class GccCCompiler extends GccCompatibleCCompiler {
sourceExtensions, headerExtensions, false,
new GccCCompiler("g77", sourceExtensions, headerExtensions, true,
null, false, null), false, null);
+// FREEHEP
+ private static final GccCCompiler gfortranInstance = new GccCCompiler("gfortran",
+ sourceExtensions, headerExtensions, false,
+ new GccCCompiler("gfortran", sourceExtensions, headerExtensions, true,
+ null, false, null), false, null);
private static final GccCCompiler gppInstance = new GccCCompiler("g++",
sourceExtensions, headerExtensions, false,
new GccCCompiler("g++", sourceExtensions, headerExtensions, true,
@@ -80,6 +85,14 @@ public final class GccCCompiler extends GccCompatibleCCompiler {
return g77Instance;
}
/**
+ * Gets g77 adapter
+ */
+// FREEHEPBEGIN
+ public static GccCCompiler getGFortranInstance() {
+ return gfortranInstance;
+ }
+// FREEHEPEND
+ /**
* Gets gpp adapter
*/
public static GccCCompiler getGppInstance() {
@@ -118,6 +131,12 @@ public final class GccCCompiler extends GccCompatibleCCompiler {
if (isPICMeaningful && linkType.isSharedLibrary()) {
args.addElement("-fPIC");
}
+// BEGINFREEHEP
+ // Add -fno_rtti only for g++ and c++
+ if (!getCommand().equals("g77") && !getCommand().equals("gcc") && (rtti != null) && (!rtti.booleanValue())) {
+ args.addElement("-fno_rtti");
+ }
+// ENDFREEHEP
}
public Processor changeEnvironment(boolean newEnvironment, Environment env) {
if (newEnvironment || env != null) {
@@ -237,6 +256,6 @@ public final class GccCCompiler extends GccCompatibleCCompiler {
return GccLinker.getInstance().getLinker(linkType);
}
public int getMaximumCommandLength() {
- return Integer.MAX_VALUE;
+ return isWindows() ? 20000 : Integer.MAX_VALUE;
}
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCompatibleCCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCompatibleCCompiler.java
index 0485fba..fc7bbfc 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCompatibleCCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccCompatibleCCompiler.java
@@ -98,10 +98,16 @@ public abstract class GccCompatibleCCompiler extends CommandLineCCompiler {
args.addElement("-mwindows");
}
}
- if (rtti != null && !rtti.booleanValue()) {
- args.addElement("-fno-rtti");
+// BEGINFREEHEP, tests have been modified
+ if (!exceptions) {
+ args.addElement("-fno-exceptions");
}
-
+// ENDFREEHEP
+// BEGINFREEHEP moved to GccCCompiler
+// if (rtti != null && !rtti.booleanValue()) {
+// args.addElement("-fno-rtti");
+// }
+// ENDFREEHEP
}
/**
* Adds an include path to the command.
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
index c4720c8..a551bfa 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
@@ -33,10 +33,13 @@ public class GccLinker extends AbstractLdLinker {
private static final String[] libtoolObjFiles = new String[]{".fo", ".a",
".lib", ".dll", ".so", ".sl"};
private static String[] linkerOptions = new String[]{"-bundle",
+// FREEHEP
+ "-dynamic",
"-dynamiclib", "-nostartfiles", "-nostdlib", "-prebind", "-s",
"-static", "-shared", "-symbolic", "-Xlinker",
"--export-all-symbols", "-static-libgcc",};
- private static final GccLinker dllLinker = new GccLinker("gcc", objFiles,
+// FREEHEP refactored dllLinker to soLinker
+ private static final GccLinker soLinker = new GccLinker("gcc", objFiles,
discardFiles, "lib", ".so", false, new GccLinker("gcc", objFiles,
discardFiles, "lib", ".so", true, null));
private static final GccLinker instance = new GccLinker("gcc", objFiles,
@@ -45,6 +48,11 @@ public class GccLinker extends AbstractLdLinker {
objFiles, discardFiles, "lib", ".bundle", false, null);
private static final GccLinker machDllLinker = new GccLinker("gcc",
objFiles, discardFiles, "lib", ".dylib", false, null);
+ private static final GccLinker machJNILinker = new GccLinker("gcc",
+ objFiles, discardFiles, "lib", ".jnilib", false, null);
+// FREEHEP added dllLinker for windows
+ private static final GccLinker dllLinker = new GccLinker("gcc",
+ objFiles, discardFiles, "", ".dll", false, null);
public static GccLinker getInstance() {
return instance;
}
@@ -191,20 +199,17 @@ public class GccLinker extends AbstractLdLinker {
if (type.isStaticLibrary()) {
return GccLibrarian.getInstance();
}
+// BEGINFREEHEP
+ if (type.isJNIModule()) {
+ return isDarwin() ? machJNILinker : isWindows() ? dllLinker : soLinker;
+ }
if (type.isPluginModule()) {
- if (isDarwin()) {
- return machBundleLinker;
- } else {
- return dllLinker;
- }
+ return isDarwin() ? machBundleLinker : isWindows() ? dllLinker : soLinker;
}
if (type.isSharedLibrary()) {
- if (isDarwin()) {
- return machDllLinker;
- } else {
- return dllLinker;
- }
+ return isDarwin() ? machDllLinker : isWindows() ? dllLinker : soLinker;
}
+// ENDFREEHEP
return instance;
}
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java
index f3bc174..043720d 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java
@@ -33,7 +33,8 @@ public class GppLinker extends AbstractLdLinker {
protected static final String[] discardFiles = new String[0];
protected static final String[] objFiles = new String[]{".o", ".a", ".lib",
".dll", ".so", ".sl"};
- private static final GppLinker dllLinker = new GppLinker("gcc", objFiles,
+ // FREEHEP refactored dllLinker into soLinker
+ private static final GppLinker soLinker = new GppLinker("gcc", objFiles,
discardFiles, "lib", ".so", false, new GppLinker("gcc", objFiles,
discardFiles, "lib", ".so", true, null));
private final static String libPrefix = "libraries: =";
@@ -41,18 +42,29 @@ public class GppLinker extends AbstractLdLinker {
".lib", ".dll", ".so", ".sl"};
private static String[] linkerOptions = new String[]{"-bundle", "-dylib",
"-dynamic", "-dynamiclib", "-nostartfiles", "-nostdlib",
- "-prebind", "-s", "-static", "-shared", "-symbolic", "-Xlinker"};
+ "-prebind", "-s", "-static", "-shared", "-symbolic", "-Xlinker",
+ // FREEHEP
+ "-static-libgcc", "-shared-libgcc" };
private static final GppLinker instance = new GppLinker("gcc", objFiles,
discardFiles, "", "", false, null);
private static final GppLinker machDllLinker = new GppLinker("gcc",
objFiles, discardFiles, "lib", ".dylib", false, null);
private static final GppLinker machPluginLinker = new GppLinker("gcc",
objFiles, discardFiles, "lib", ".bundle", false, null);
+ // FREEHEP
+ private static final GppLinker machJNILinker = new GppLinker("gcc",
+ objFiles, discardFiles, "lib", ".jnilib", false, null);
+ // FREEHEP added dllLinker for windows
+ private static final GppLinker dllLinker = new GppLinker("gcc", objFiles,
+ discardFiles, "", ".dll", false, null);
public static GppLinker getInstance() {
return instance;
}
private File[] libDirs;
private String runtimeLibrary;
+ // FREEEHEP
+ private String gccLibrary, gfortranLibrary;
+
protected GppLinker(String command, String[] extensions,
String[] ignoredExtensions, String outputPrefix,
String outputSuffix, boolean isLibtool, GppLinker libtoolLinker) {
@@ -69,22 +81,66 @@ public class GppLinker extends AbstractLdLinker {
args.addElement("-mwindows");
}
}
- if (linkType.isStaticRuntime()) {
- String[] cmdin = new String[]{"g++", "-print-file-name=libstdc++.a"};
- String[] cmdout = CaptureStreamHandler.run(cmdin);
- if (cmdout.length > 0) {
- runtimeLibrary = cmdout[0];
+ // BEGINFREEHEP link or not with libstdc++
+ // for MacOS X see:
+ // http://developer.apple.com/documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/LibCPPDeployment.html
+ gfortranLibrary = null;
+ if (linkType.linkFortran()) {
+ if (linkType.isStaticRuntime()) {
+ String[] cmdin = new String[] { "gfortran",
+ "-print-file-name=libgfortran.a" };
+ String[] cmdout = CaptureStreamHandler.run(cmdin);
+ if ((cmdout.length > 0) && (cmdout[0].indexOf('/') >= 0)) {
+ gfortranLibrary = cmdout[0];
+ }
+ } else {
+ gfortranLibrary = "-lgfortran";
+ }
+ }
+
+ runtimeLibrary = null;
+ if (linkType.linkCPP()) {
+ if (linkType.isStaticRuntime()) {
+ if (isDarwin()) {
+ runtimeLibrary = "-lstdc++-static";
+ } else {
+ String[] cmdin = new String[] { "g++",
+ "-print-file-name=libstdc++.a" };
+ String[] cmdout = CaptureStreamHandler.run(cmdin);
+ if ((cmdout.length > 0) && (cmdout[0].indexOf('/') >= 0)) {
+ runtimeLibrary = cmdout[0];
+ }
+ }
} else {
- runtimeLibrary = null;
+ runtimeLibrary = "-lstdc++";
}
+ }
+
+ gccLibrary = null;
+ if (linkType.isStaticRuntime()) {
+ gccLibrary = "-static-libgcc";
} else {
- runtimeLibrary = "-lstdc++";
+ if (linkType.linkCPP()) {
+ // NOTE: added -fexceptions here for MacOS X
+ gccLibrary = "-fexceptions";
+ } else {
+ gccLibrary = "-shared-libgcc";
+ }
}
+ // ENDFREEHEP
}
public String[] addLibrarySets(CCTask task, LibrarySet[] libsets,
Vector preargs, Vector midargs, Vector endargs) {
String[] rs = super.addLibrarySets(task, libsets, preargs, midargs,
endargs);
+ // BEGINFREEHEP
+ if (gfortranLibrary != null) {
+ endargs.addElement(gfortranLibrary);
+ }
+ if (gccLibrary != null) {
+ endargs.addElement(gccLibrary);
+ }
+ // ENDFREEHEP
if (runtimeLibrary != null) {
endargs.addElement(runtimeLibrary);
}
@@ -184,20 +240,20 @@ public class GppLinker extends AbstractLdLinker {
if (type.isStaticLibrary()) {
return GccLibrarian.getInstance();
}
+ // BEGINFREEHEP
+ if (type.isJNIModule()) {
+ return isDarwin() ? machJNILinker : isWindows() ? dllLinker
+ : soLinker;
+ }
if (type.isPluginModule()) {
- if (GccProcessor.getMachine().indexOf("darwin") >= 0) {
- return machPluginLinker;
- } else {
- return dllLinker;
- }
+ return isDarwin() ? machPluginLinker : isWindows() ? dllLinker
+ : soLinker;
}
if (type.isSharedLibrary()) {
- if (GccProcessor.getMachine().indexOf("darwin") >= 0) {
- return machDllLinker;
- } else {
- return dllLinker;
- }
+ return isDarwin() ? machDllLinker : isWindows() ? dllLinker
+ : soLinker;
}
+ // ENDFREEHEP
return instance;
}
}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java b/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java
index 2221aba..3a6f19f 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/ide/CommentDef.java
@@ -16,11 +16,6 @@
*/
package net.sf.antcontrib.cpptasks.ide;
-import org.apache.tools.ant.util.StringUtils;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
/**
* Defines a comment to place in the generated project files.
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CCompiler.java
index 12fd5bd..085d61e 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CCompiler.java
@@ -50,7 +50,8 @@ public final class IntelLinux32CCompiler extends GccCompatibleCCompiler {
return this;
}
public Linker getLinker(LinkType type) {
- return IntelLinux32Linker.getInstance().getLinker(type);
+// FREEHEP
+ return IntelLinux32CLinker.getInstance().getLinker(type);
}
public int getMaximumCommandLength() {
return Integer.MAX_VALUE;
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CLinker.java
new file mode 100644
index 0000000..49a8a57
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32CLinker.java
@@ -0,0 +1,35 @@
+// FREEHEP
+package net.sf.antcontrib.cpptasks.intel;
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
+import net.sf.antcontrib.cpptasks.compiler.Linker;
+import net.sf.antcontrib.cpptasks.gcc.AbstractLdLinker;
+import net.sf.antcontrib.cpptasks.gcc.GccLibrarian;
+public final class IntelLinux32CLinker extends AbstractLdLinker {
+ private static final String[] discardFiles = new String[0];
+ private static final String[] libtoolObjFiles = new String[]{".fo", ".a",
+ ".lib", ".dll", ".so", ".sl"};
+ private static final String[] objFiles = new String[]{".o", ".a", ".lib",
+ ".dll", ".so", ".sl"};
+ private static final IntelLinux32CLinker dllLinker = new IntelLinux32CLinker(
+ "lib", ".so", false, new IntelLinux32CLinker("lib", ".so", true,
+ null));
+ private static final IntelLinux32CLinker instance = new IntelLinux32CLinker(
+ "", "", false, null);
+ public static IntelLinux32CLinker getInstance() {
+ return instance;
+ }
+ private IntelLinux32CLinker(String outputPrefix, String outputSuffix,
+ boolean isLibtool, IntelLinux32CLinker libtoolLinker) {
+ super("icc", "-V", objFiles, discardFiles, outputPrefix, outputSuffix,
+ isLibtool, libtoolLinker);
+ }
+ public Linker getLinker(LinkType type) {
+ if (type.isStaticLibrary()) {
+ return GccLibrarian.getInstance();
+ }
+ if (type.isSharedLibrary()) {
+ return dllLinker;
+ }
+ return instance;
+ }
+}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Compiler.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Compiler.java
new file mode 100644
index 0000000..d4feac3
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Compiler.java
@@ -0,0 +1,36 @@
+// FREEHEP
+package net.sf.antcontrib.cpptasks.intel;
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
+import net.sf.antcontrib.cpptasks.compiler.Linker;
+import net.sf.antcontrib.cpptasks.compiler.Processor;
+import net.sf.antcontrib.cpptasks.gcc.GccCompatibleCCompiler;
+
+import org.apache.tools.ant.types.Environment;
+
+public final class IntelLinux32Compiler extends GccCompatibleCCompiler {
+ private static final IntelLinux32Compiler instance = new IntelLinux32Compiler(
+ false, new IntelLinux32Compiler(true, null, false, null), false,
+ null);
+ public static IntelLinux32Compiler getInstance() {
+ return instance;
+ }
+ private IntelLinux32Compiler(boolean isLibtool,
+ IntelLinux32Compiler libtoolCompiler, boolean newEnvironment,
+ Environment env) {
+ super("icpc", "-V", isLibtool, libtoolCompiler, newEnvironment, env);
+ }
+ public Processor changeEnvironment(boolean newEnvironment, Environment env) {
+ if (newEnvironment || env != null) {
+ return new IntelLinux32Compiler(getLibtool(),
+ (IntelLinux32Compiler) getLibtoolCompiler(),
+ newEnvironment, env);
+ }
+ return this;
+ }
+ public Linker getLinker(LinkType type) {
+ return IntelLinux32Linker.getInstance().getLinker(type);
+ }
+ public int getMaximumCommandLength() {
+ return Integer.MAX_VALUE;
+ }
+}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Linker.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Linker.java
index 9bed915..e6ddee1 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Linker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux32Linker.java
@@ -40,7 +40,8 @@ public final class IntelLinux32Linker extends AbstractLdLinker {
}
private IntelLinux32Linker(String outputPrefix, String outputSuffix,
boolean isLibtool, IntelLinux32Linker libtoolLinker) {
- super("icc", "-V", objFiles, discardFiles, outputPrefix, outputSuffix,
+// FREEHEP
+ super("icpc", "-V", objFiles, discardFiles, outputPrefix, outputSuffix,
isLibtool, libtoolLinker);
}
public Linker getLinker(LinkType type) {
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CCompiler.java
index 9ed6393..1d9f6c5 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CCompiler.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CCompiler.java
@@ -50,7 +50,8 @@ public final class IntelLinux64CCompiler extends GccCompatibleCCompiler {
return this;
}
public Linker getLinker(LinkType type) {
- return IntelLinux64Linker.getInstance().getLinker(type);
+// FREEHEP
+ return IntelLinux64CLinker.getInstance().getLinker(type);
}
public int getMaximumCommandLength() {
return Integer.MAX_VALUE;
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CLinker.java
new file mode 100644
index 0000000..ec25e9e
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64CLinker.java
@@ -0,0 +1,36 @@
+// FREEHEP
+package net.sf.antcontrib.cpptasks.intel;
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
+import net.sf.antcontrib.cpptasks.compiler.Linker;
+import net.sf.antcontrib.cpptasks.gcc.AbstractLdLinker;
+import net.sf.antcontrib.cpptasks.gcc.GccLibrarian;
+
+public final class IntelLinux64CLinker extends AbstractLdLinker {
+ private static final String[] discardFiles = new String[0];
+ private static final String[] libtoolObjFiles = new String[]{".fo", ".a",
+ ".lib", ".dll", ".so", ".sl"};
+ private static final String[] objFiles = new String[]{".o", ".a", ".lib",
+ ".dll", ".so", ".sl"};
+ private static final IntelLinux64CLinker dllLinker = new IntelLinux64CLinker(
+ "lib", ".so", false, new IntelLinux64CLinker("lib", ".so", true,
+ null));
+ private static final IntelLinux64CLinker instance = new IntelLinux64CLinker(
+ "", "", false, null);
+ public static IntelLinux64CLinker getInstance() {
+ return instance;
+ }
+ private IntelLinux64CLinker(String outputPrefix, String outputSuffix,
+ boolean isLibtool, IntelLinux64CLinker libtoolLinker) {
+ super("ecc", "-V", objFiles, discardFiles, outputPrefix, outputSuffix,
+ isLibtool, libtoolLinker);
+ }
+ public Linker getLinker(LinkType type) {
+ if (type.isStaticLibrary()) {
+ return GccLibrarian.getInstance();
+ }
+ if (type.isSharedLibrary()) {
+ return dllLinker;
+ }
+ return instance;
+ }
+}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Compiler.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Compiler.java
new file mode 100644
index 0000000..531de0c
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Compiler.java
@@ -0,0 +1,36 @@
+// FREEHEP
+package net.sf.antcontrib.cpptasks.intel;
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
+import net.sf.antcontrib.cpptasks.compiler.Linker;
+import net.sf.antcontrib.cpptasks.compiler.Processor;
+import net.sf.antcontrib.cpptasks.gcc.GccCompatibleCCompiler;
+
+import org.apache.tools.ant.types.Environment;
+
+public final class IntelLinux64Compiler extends GccCompatibleCCompiler {
+ private static final IntelLinux64Compiler instance = new IntelLinux64Compiler(
+ false, new IntelLinux64Compiler(true, null, false, null), false,
+ null);
+ public static IntelLinux64Compiler getInstance() {
+ return instance;
+ }
+ private IntelLinux64Compiler(boolean isLibtool,
+ IntelLinux64Compiler libtoolCompiler, boolean newEnvironment,
+ Environment env) {
+ super("ecpc", "-V", isLibtool, libtoolCompiler, newEnvironment, env);
+ }
+ public Processor changeEnvironment(boolean newEnvironment, Environment env) {
+ if (newEnvironment || env != null) {
+ return new IntelLinux64Compiler(getLibtool(),
+ (IntelLinux64Compiler) this.getLibtoolCompiler(),
+ newEnvironment, env);
+ }
+ return this;
+ }
+ public Linker getLinker(LinkType type) {
+ return IntelLinux64Linker.getInstance().getLinker(type);
+ }
+ public int getMaximumCommandLength() {
+ return Integer.MAX_VALUE;
+ }
+}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Linker.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Linker.java
index d712e5b..6798c3f 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Linker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinux64Linker.java
@@ -40,7 +40,8 @@ public final class IntelLinux64Linker extends AbstractLdLinker {
}
private IntelLinux64Linker(String outputPrefix, String outputSuffix,
boolean isLibtool, IntelLinux64Linker libtoolLinker) {
- super("ecc", "-V", objFiles, discardFiles, outputPrefix, outputSuffix,
+// FREEHEP
+ super("ecpc", "-V", objFiles, discardFiles, outputPrefix, outputSuffix,
isLibtool, libtoolLinker);
}
public Linker getLinker(LinkType type) {
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinuxFortranCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinuxFortranCompiler.java
new file mode 100644
index 0000000..b9e4467
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/intel/IntelLinuxFortranCompiler.java
@@ -0,0 +1,37 @@
+// BEGINFREEHEP
+package net.sf.antcontrib.cpptasks.intel;
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
+import net.sf.antcontrib.cpptasks.compiler.Linker;
+import net.sf.antcontrib.cpptasks.compiler.Processor;
+import net.sf.antcontrib.cpptasks.gcc.GccCompatibleCCompiler;
+
+import org.apache.tools.ant.types.Environment;
+
+public final class IntelLinuxFortranCompiler extends GccCompatibleCCompiler {
+ private static final IntelLinuxFortranCompiler instance = new IntelLinuxFortranCompiler(
+ false, new IntelLinuxFortranCompiler(true, null, false, null), false,
+ null);
+ public static IntelLinuxFortranCompiler getInstance() {
+ return instance;
+ }
+ private IntelLinuxFortranCompiler(boolean isLibtool,
+ IntelLinuxFortranCompiler libtoolCompiler, boolean newEnvironment,
+ Environment env) {
+ super("ifort", "-V", isLibtool, libtoolCompiler, newEnvironment, env);
+ }
+ public Processor changeEnvironment(boolean newEnvironment, Environment env) {
+ if (newEnvironment || env != null) {
+ return new IntelLinuxFortranCompiler(getLibtool(),
+ (IntelLinuxFortranCompiler) getLibtoolCompiler(),
+ newEnvironment, env);
+ }
+ return this;
+ }
+ public Linker getLinker(LinkType type) {
+ return IntelLinux32Linker.getInstance().getLinker(type);
+ }
+ public int getMaximumCommandLength() {
+ return Integer.MAX_VALUE;
+ }
+}
+// ENDFREEHEP \ No newline at end of file
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCLinker.java
index 47d2155..91ec3d1 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCLinker.java
@@ -51,7 +51,8 @@ public final class ForteCCLinker extends AbstractLdLinker {
args.addElement("-g");
}
if (linkType.isStaticRuntime()) {
- args.addElement("-static");
+// FREEHEP changed -static
+ args.addElement("-staticlib=%all");
}
if (linkType.isSharedLibrary()) {
args.addElement("-G");
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCompiler.java b/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCompiler.java
new file mode 100644
index 0000000..9fb43da
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteCCompiler.java
@@ -0,0 +1,98 @@
+/* FREEHEP
+ */
+package net.sf.antcontrib.cpptasks.sun;
+import java.io.File;
+import java.util.Vector;
+
+import net.sf.antcontrib.cpptasks.CUtil;
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
+import net.sf.antcontrib.cpptasks.compiler.Linker;
+import net.sf.antcontrib.cpptasks.gcc.GccCompatibleCCompiler;
+import net.sf.antcontrib.cpptasks.OptimizationEnum;
+/**
+ * Adapter for the Sun (r) Forte (tm) C compiler
+ *
+ * @author Mark Donszelmann
+ */
+public final class ForteCCompiler extends GccCompatibleCCompiler {
+ private static final ForteCCompiler instance = new ForteCCompiler("cc");
+ /**
+ * Gets singleton instance of this class
+ */
+ public static ForteCCompiler getInstance() {
+ return instance;
+ }
+ private String identifier;
+ private File[] includePath;
+ /**
+ * Private constructor. Use ForteCCompiler.getInstance() to get singleton
+ * instance of this class.
+ */
+ private ForteCCompiler(String command) {
+ super(command, "-V", false, null, false, null);
+ }
+ public void addImpliedArgs(final Vector args,
+ final boolean debug,
+ final boolean multithreaded,
+ final boolean exceptions,
+ final LinkType linkType,
+ final Boolean rtti,
+ final OptimizationEnum optimization) {
+ args.addElement("-c");
+ if (debug) {
+ args.addElement("-g");
+ }
+ if (optimization != null) {
+ if (optimization.isSpeed()) {
+ args.addElement("-xO2");
+ }
+ }
+ if (multithreaded) {
+ args.addElement("-mt");
+ }
+ if (linkType.isSharedLibrary()) {
+ args.addElement("-KPIC");
+ }
+
+ }
+ public void addWarningSwitch(Vector args, int level) {
+ switch (level) {
+ case 0 :
+ args.addElement("-w");
+ break;
+ case 1 :
+ case 2 :
+ args.addElement("+w");
+ break;
+ case 3 :
+ case 4 :
+ case 5 :
+ args.addElement("+w2");
+ break;
+ }
+ }
+ public File[] getEnvironmentIncludePath() {
+ if (includePath == null) {
+ File ccLoc = CUtil.getExecutableLocation("cc");
+ if (ccLoc != null) {
+ File compilerIncludeDir = new File(
+ new File(ccLoc, "../include").getAbsolutePath());
+ if (compilerIncludeDir.exists()) {
+ includePath = new File[2];
+ includePath[0] = compilerIncludeDir;
+ }
+ }
+ if (includePath == null) {
+ includePath = new File[1];
+ }
+ includePath[includePath.length - 1] = new File("/usr/include");
+ }
+ return includePath;
+ }
+ public Linker getLinker(LinkType linkType) {
+ return ForteCCLinker.getInstance().getLinker(linkType);
+ }
+ public int getMaximumCommandLength() {
+ return Integer.MAX_VALUE;
+ }
+}
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteF77Compiler.java b/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteF77Compiler.java
new file mode 100644
index 0000000..2230b66
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/sun/ForteF77Compiler.java
@@ -0,0 +1,98 @@
+/* FREEHEP
+ */
+package net.sf.antcontrib.cpptasks.sun;
+import java.io.File;
+import java.util.Vector;
+
+import net.sf.antcontrib.cpptasks.CUtil;
+import net.sf.antcontrib.cpptasks.compiler.LinkType;
+import net.sf.antcontrib.cpptasks.compiler.Linker;
+import net.sf.antcontrib.cpptasks.gcc.GccCompatibleCCompiler;
+import net.sf.antcontrib.cpptasks.OptimizationEnum;
+/**
+ * Adapter for the Sun (r) Forte (tm) F77 compiler
+ *
+ * @author Mark Donszelmann
+ */
+public final class ForteF77Compiler extends GccCompatibleCCompiler {
+ private static final ForteF77Compiler instance = new ForteF77Compiler("f77");
+ /**
+ * Gets singleton instance of this class
+ */
+ public static ForteF77Compiler getInstance() {
+ return instance;
+ }
+ private String identifier;
+ private File[] includePath;
+ /**
+ * Private constructor. Use ForteF77Compiler.getInstance() to get singleton
+ * instance of this class.
+ */
+ private ForteF77Compiler(String command) {
+ super(command, "-V", false, null, false, null);
+ }
+ public void addImpliedArgs(final Vector args,
+ final boolean debug,
+ final boolean multithreaded,
+ final boolean exceptions,
+ final LinkType linkType,
+ final Boolean rtti,
+ final OptimizationEnum optimization) {
+ args.addElement("-c");
+ if (debug) {
+ args.addElement("-g");
+ }
+ if (optimization != null) {
+ if (optimization.isSpeed()) {
+ args.addElement("-xO2");
+ }
+ }
+ if (multithreaded) {
+ args.addElement("-mt");
+ }
+ if (linkType.isSharedLibrary()) {
+ args.addElement("-KPIC");
+ }
+
+ }
+ public void addWarningSwitch(Vector args, int level) {
+ switch (level) {
+ case 0 :
+ args.addElement("-w");
+ break;
+ case 1 :
+ case 2 :
+ args.addElement("+w");
+ break;
+ case 3 :
+ case 4 :
+ case 5 :
+ args.addElement("+w2");
+ break;
+ }
+ }
+ public File[] getEnvironmentIncludePath() {
+ if (includePath == null) {
+ File f77Loc = CUtil.getExecutableLocation("f77");
+ if (f77Loc != null) {
+ File compilerIncludeDir = new File(
+ new File(f77Loc, "../include").getAbsolutePath());
+ if (compilerIncludeDir.exists()) {
+ includePath = new File[2];
+ includePath[0] = compilerIncludeDir;
+ }
+ }
+ if (includePath == null) {
+ includePath = new File[1];
+ }
+ includePath[includePath.length - 1] = new File("/usr/include");
+ }
+ return includePath;
+ }
+ public Linker getLinker(LinkType linkType) {
+ return ForteCCLinker.getInstance().getLinker(linkType);
+ }
+ public int getMaximumCommandLength() {
+ return Integer.MAX_VALUE;
+ }
+}