diff options
Diffstat (limited to 'src')
12 files changed, 74 insertions, 54 deletions
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java b/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java index 3a5506d..3197080 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/CCTask.java @@ -874,11 +874,11 @@ public class CCTask extends Task { objectFiles.copyInto(objectFileArray); final File[] sysObjectFileArray = new File[sysObjectFiles.size()]; sysObjectFiles.copyInto(sysObjectFileArray); - final String baseName = _outfile.getName(); - final String[] fullNames = linkerConfig.getOutputFileNames(baseName, versionInfo); - final File outputFile = new File(_outfile.getParent(), fullNames[0]); + final String outputBaseNameWithDir = _outfile.getName(); // like '/use/lib/gluegen_rt' + final String outputFullName = linkerConfig.getOutputFileName(outputBaseNameWithDir, versionInfo); // like 'libgluegen-rt.so' + final File outputFile = new File(_outfile.getParent(), outputFullName); return new TargetInfo(linkerConfig, objectFileArray, - sysObjectFileArray, outputFile, linkerConfig.getRebuild()); + sysObjectFileArray, outputFile, outputFullName, linkerConfig.getRebuild()); } public File getObjdir() { return _objDir; diff --git a/src/main/java/net/sf/antcontrib/cpptasks/TargetInfo.java b/src/main/java/net/sf/antcontrib/cpptasks/TargetInfo.java index e3706ac..bfd1baa 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/TargetInfo.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/TargetInfo.java @@ -25,11 +25,12 @@ public final class TargetInfo { private static final File[] emptyFileArray = new File[0]; private final ProcessorConfiguration config; private final File output; + private final String outputBasename; private boolean rebuild; private final File[] sources; private File[] sysSources; - public TargetInfo(ProcessorConfiguration config, File[] sources, - File[] sysSources, File output, boolean rebuild) { + public TargetInfo(final ProcessorConfiguration config, final File[] sources, + final File[] sysSources, final File output, final String outputBasename, boolean rebuild) { if (config == null) { throw new NullPointerException("config"); } @@ -39,6 +40,9 @@ public final class TargetInfo { if (output == null) { throw new NullPointerException("output"); } + if (outputBasename == null) { + throw new NullPointerException("outputBasename"); + } this.config = config; this.sources = sources.clone(); if (sysSources == null) { @@ -47,6 +51,7 @@ public final class TargetInfo { this.sysSources = sysSources.clone(); } this.output = output; + this.outputBasename = outputBasename; this.rebuild = rebuild; // // if the output doesn't exist, must rebuild it @@ -83,6 +88,12 @@ public final class TargetInfo { public File getOutput() { return output; } + /** + * @return like 'libgluegen-rt.so' + */ + public String getOutputBasename() { + return outputBasename; + } public boolean getRebuild() { return rebuild; } diff --git a/src/main/java/net/sf/antcontrib/cpptasks/TargetMatcher.java b/src/main/java/net/sf/antcontrib/cpptasks/TargetMatcher.java index 7661cf8..599aaf0 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/TargetMatcher.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/TargetMatcher.java @@ -97,10 +97,12 @@ public final class TargetMatcher implements FileVisitor { final TargetInfo previousTarget = (TargetInfo) targets .get(outputFileNames[i]); if (previousTarget == null) { - targets.put(outputFileNames[i], new TargetInfo( - selectedCompiler, sourceFiles, null, new File( - outputDir, outputFileNames[i]), - selectedCompiler.getRebuild())); + targets.put( outputFileNames[i], + new TargetInfo ( + selectedCompiler, sourceFiles, null, new File( + outputDir, outputFileNames[i]), outputFileNames[i], + selectedCompiler.getRebuild() ) + ); } else { if (!previousTarget.getSources()[0].equals(sourceFiles[0])) { final StringBuffer builder = new StringBuffer( diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractLinker.java index 1ebd8cf..a5c24a4 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractLinker.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/AbstractLinker.java @@ -92,7 +92,23 @@ public abstract class AbstractLinker extends AbstractProcessor public String getLibraryKey(final File libfile) { return libfile.getName(); } - public abstract String[] getOutputFileNames(String fileName, VersionInfo versionInfo); + /** + * This implementation for a linker instance returns a unique output file + * as determined via {@link #getOutputFileName(String, VersionInfo)}. + */ + @Override + public final String[] getOutputFileNames(final String baseName, final VersionInfo versionInfo) { + return new String[] { getOutputFileName(baseName, versionInfo) }; + } + /** + * Unique output file for linker, also being used to fill a one element array + * of {@link #getOutputFileNames(String, VersionInfo)} implementation. + * @param inputFile the input file basename + * @param versionInfo the version number + * @return the unique output filename + * @see #getOutputFileNames(String, VersionInfo) + */ + public abstract String getOutputFileName(String fileName, VersionInfo versionInfo); /** 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 24aa0d4..d7b30cd 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinker.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinker.java @@ -236,8 +236,9 @@ public abstract class CommandLineLinker extends AbstractLinker } protected abstract int getMaximumCommandLength(); - public String[] getOutputFileNames(final String baseName, final VersionInfo versionInfo) { - return new String[] { baseName + outputSuffix }; + @Override + public String getOutputFileName(final String baseName, final VersionInfo versionInfo) { + return baseName + outputSuffix; } protected String[] getOutputFileSwitch(final CCTask task, final String outputFile) { diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinkerConfiguration.java b/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinkerConfiguration.java index bc66648..ce42cc4 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinkerConfiguration.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/CommandLineLinkerConfiguration.java @@ -92,7 +92,12 @@ public final class CommandLineLinkerConfiguration public final String[] getOutputFileNames(final String inputFile, final VersionInfo versionInfo) { return linker.getOutputFileNames(inputFile, versionInfo); } - public LinkerParam getParam(String name) { + @Override + public final String getOutputFileName(final String inputFile, final VersionInfo versionInfo) { + return linker.getOutputFileName(inputFile, versionInfo); + } + @Override + public LinkerParam getParam(final String name) { for (int i = 0; i < params.length; i++) { if (name.equals(params[i].getName())) return (LinkerParam) params[i]; diff --git a/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkerConfiguration.java b/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkerConfiguration.java index 114b8f1..4ef7ab3 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkerConfiguration.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/compiler/LinkerConfiguration.java @@ -18,6 +18,7 @@ package net.sf.antcontrib.cpptasks.compiler; import net.sf.antcontrib.cpptasks.CCTask; import net.sf.antcontrib.cpptasks.LinkerParam; import net.sf.antcontrib.cpptasks.TargetInfo; +import net.sf.antcontrib.cpptasks.VersionInfo; import org.apache.tools.ant.BuildException; /** @@ -30,4 +31,13 @@ public interface LinkerConfiguration extends ProcessorConfiguration { void link(CCTask task, TargetInfo linkTarget) throws BuildException; Linker getLinker(); boolean isDebug(); + /** + * Unique output file for linker, also being used to fill a one element array + * of {@link #getOutputFileNames(String, VersionInfo)} implementation. + * @param inputFile the input file basename + * @param versionInfo the version number + * @return the unique output filename + * @see #getOutputFileNames(String, VersionInfo) + */ + String getOutputFileName(final String inputFile, final VersionInfo versionInfo); } diff --git a/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractArLibrarian.java b/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractArLibrarian.java index cfaa7f3..dfec253 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractArLibrarian.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractArLibrarian.java @@ -84,14 +84,9 @@ public abstract class AbstractArLibrarian extends CommandLineLinker { public int getMaximumCommandLength() { return Integer.MAX_VALUE; } - public String[] getOutputFileNames(String baseName, VersionInfo versionInfo) { - String[] baseNames = super.getOutputFileNames(baseName, versionInfo); - if (outputPrefix.length() > 0) { - for(int i = 0; i < baseNames.length; i++) { - baseNames[i] = outputPrefix + baseNames[i]; - } - } - return baseNames; + @Override + public String getOutputFileName(final String baseName, final VersionInfo versionInfo) { + return outputPrefix + super.getOutputFileName(baseName, versionInfo); } @Override public String[] getOutputFileSwitch(final String outputFile) { 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 f99ba97..8543d4f 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java @@ -261,14 +261,9 @@ public abstract class AbstractLdLinker extends CommandLineLinker { public int getMaximumCommandLength() { return Integer.MAX_VALUE; } - public String[] getOutputFileNames(final String baseName, final VersionInfo versionInfo) { - final String[] baseNames = super.getOutputFileNames(baseName, versionInfo); - if (outputPrefix.length() > 0) { - for(int i = 0; i < baseNames.length; i++) { - baseNames[i] = outputPrefix + baseNames[i]; - } - } - return baseNames; + @Override + public String getOutputFileName(final String baseName, final VersionInfo versionInfo) { + return outputPrefix + super.getOutputFileName(baseName, versionInfo); } @Override public String[] getOutputFileSwitch(final String outputFile) { diff --git a/src/main/java/net/sf/antcontrib/cpptasks/os390/OS390Linker.java b/src/main/java/net/sf/antcontrib/cpptasks/os390/OS390Linker.java index b9aea47..7b4e581 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/os390/OS390Linker.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/os390/OS390Linker.java @@ -162,14 +162,9 @@ public final class OS390Linker extends CommandLineLinker { public int getMaximumCommandLength() { return Integer.MAX_VALUE; } - public String[] getOutputFileNames(String baseName, VersionInfo versionInfo) { - String[] baseNames = super.getOutputFileNames(baseName, versionInfo); - if (outputPrefix.length() > 0) { - for(int i = 0; i < baseNames.length; i++) { - baseNames[i] = outputPrefix + baseNames[i]; - } - } - return baseNames; + @Override + public String getOutputFileName(final String baseName, final VersionInfo versionInfo) { + return outputPrefix + super.getOutputFileName(baseName, versionInfo); } @Override protected String[] getOutputFileSwitch(final CCTask task, String outputFile) { diff --git a/src/main/java/net/sf/antcontrib/cpptasks/os400/IccLinker.java b/src/main/java/net/sf/antcontrib/cpptasks/os400/IccLinker.java index e942628..08c6055 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/os400/IccLinker.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/os400/IccLinker.java @@ -215,13 +215,8 @@ public final class IccLinker extends CommandLineLinker { } return rc; } - public String[] getOutputFileNames(String baseName, VersionInfo versionInfo) { - String[] baseNames = super.getOutputFileNames(baseName, versionInfo); - if (outputPrefix.length() > 0) { - for(int i = 0; i < baseNames.length; i++) { - baseNames[i] = outputPrefix + baseNames[i]; - } - } - return baseNames; + @Override + public String getOutputFileName(final String baseName, final VersionInfo versionInfo) { + return outputPrefix + super.getOutputFileName(baseName, versionInfo); } } diff --git a/src/main/java/net/sf/antcontrib/cpptasks/sun/C89Linker.java b/src/main/java/net/sf/antcontrib/cpptasks/sun/C89Linker.java index 3adb9e0..d1d2945 100644 --- a/src/main/java/net/sf/antcontrib/cpptasks/sun/C89Linker.java +++ b/src/main/java/net/sf/antcontrib/cpptasks/sun/C89Linker.java @@ -127,14 +127,9 @@ public final class C89Linker extends CommandLineLinker { public int getMaximumCommandLength() { return Integer.MAX_VALUE; } - public String[] getOutputFileNames(String baseName, VersionInfo versionInfo) { - String[] baseNames = super.getOutputFileNames(baseName, versionInfo); - if (outputPrefix.length() > 0) { - for(int i = 0; i < baseNames.length; i++) { - baseNames[i] = outputPrefix + baseNames[i]; - } - } - return baseNames; + @Override + public String getOutputFileName(final String baseName, final VersionInfo versionInfo) { + return outputPrefix + super.getOutputFileName(baseName, versionInfo); } @Override public String[] getOutputFileSwitch(final String outputFile) { |