summaryrefslogtreecommitdiff
path: root/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java')
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java28
1 files changed, 21 insertions, 7 deletions
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 32e6e7e..f1eb2d7 100644
--- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
+++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
@@ -108,12 +108,18 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
File libdir = set.getDir(null);
String[] libs = set.getLibs();
if (libdir != null) {
+ String relPath = libdir.getAbsolutePath();
+ File outputFile = task.getOutfile();
+ if (outputFile != null && outputFile.getParentFile() != null) {
+ relPath = CUtil.getRelativePath(
+ outputFile.getParentFile().getAbsolutePath(), libdir);
+ }
if (set.getType() != null &&
"framework".equals(set.getType().getValue()) &&
isDarwin()) {
- endargs.addElement("-F" + libdir.getAbsolutePath());
+ endargs.addElement("-F" + relPath);
} else {
- endargs.addElement("-L" + libdir.getAbsolutePath());
+ endargs.addElement("-L" + relPath);
}
}
//
@@ -123,7 +129,7 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
if (set.getType() != null && "static".equals(set.getType().getValue())) {
// BEGINFREEHEP not on MacOS X
if (!isDarwin()) {
- endargs.addElement("-Bstatic");
+ endargs.addElement(getStaticLibFlag());
previousLibraryType = set.getType();
}
//ENDFREEHEP
@@ -132,7 +138,7 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
if (set.getType() == null ||
!"framework".equals(set.getType().getValue()) &&
!isDarwin()) {
- endargs.addElement("-Bdynamic");
+ endargs.addElement(getDynamicLibFlag());
previousLibraryType = set.getType();
}
}
@@ -163,7 +169,7 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
// 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("-Bdynamic");
+ endargs.addElement(getDynamicLibFlag());
}
// ENDFREEHEP
@@ -286,8 +292,8 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
* linker output file
* @param sourceFiles
* linker input files (.obj, .o, .res)
- * @param args
- * linker arguments
+ * @param config
+ * linker configuration
* @return arguments for runTask
*/
public String[] prepareArguments(CCTask task, String outputDir,
@@ -342,4 +348,12 @@ public abstract class AbstractLdLinker extends CommandLineLinker {
return super.prepareArguments(task, outputDir, outputFile,
finalSources, config);
}
+
+ protected String getDynamicLibFlag() {
+ return "-Bdynamic";
+ }
+
+ protected String getStaticLibFlag() {
+ return "-Bstatic";
+ }
}