summaryrefslogtreecommitdiff
path: root/src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java')
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java21
1 files changed, 20 insertions, 1 deletions
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 043720d..ce9f2fb 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/GppLinker.java
@@ -63,7 +63,7 @@ public class GppLinker extends AbstractLdLinker {
private File[] libDirs;
private String runtimeLibrary;
// FREEEHEP
- private String gccLibrary, gfortranLibrary;
+ private String gccLibrary, gfortranLibrary, gfortranMainLibrary;
protected GppLinker(String command, String[] extensions,
String[] ignoredExtensions, String outputPrefix,
@@ -97,6 +97,22 @@ public class GppLinker extends AbstractLdLinker {
gfortranLibrary = "-lgfortran";
}
}
+
+ gfortranMainLibrary = null;
+ if (linkType.linkFortran()) {
+ if (linkType.isExecutable() && linkType.linkFortranMain() && !isDarwin()) {
+ if (linkType.isStaticRuntime()) {
+ String[] cmdin = new String[] { "gfortran",
+ "-print-file-name=libgfortranbegin.a" };
+ String[] cmdout = CaptureStreamHandler.run(cmdin);
+ if ((cmdout.length > 0) && (cmdout[0].indexOf('/') >= 0)) {
+ gfortranMainLibrary = cmdout[0];
+ }
+ } else {
+ gfortranMainLibrary = "-lgfortranbegin";
+ }
+ }
+ }
runtimeLibrary = null;
if (linkType.linkCPP()) {
@@ -137,6 +153,9 @@ public class GppLinker extends AbstractLdLinker {
if (gfortranLibrary != null) {
endargs.addElement(gfortranLibrary);
}
+ if (gfortranMainLibrary != null) {
+ endargs.addElement(gfortranMainLibrary);
+ }
if (gccLibrary != null) {
endargs.addElement(gccLibrary);
}