summaryrefslogtreecommitdiff
path: root/src/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
diff options
context:
space:
mode:
authorMark Donszelmann <Mark.Donszelmann@gmail.com>2009-11-05 23:27:33 +0100
committerMark Donszelmann <Mark.Donszelmann@gmail.com>2009-11-05 23:27:33 +0100
commit254c4886d58979eebd0e352f4d16e391736f2a33 (patch)
tree8feca0cc1caa5177dd52a7b9b2dfd63502c941fd /src/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
parentef6f25ba42792d2d811fd6826c0dd528ad77b1e9 (diff)
downloadcpptasks-parallel-254c4886d58979eebd0e352f4d16e391736f2a33.tar.gz
cpptasks-parallel-254c4886d58979eebd0e352f4d16e391736f2a33.tar.bz2
cpptasks-parallel-254c4886d58979eebd0e352f4d16e391736f2a33.tar.xz
cpptasks-parallel-254c4886d58979eebd0e352f4d16e391736f2a33.zip
Reorganized source directories in line with cpptasks-1.0b5, for easier tracking
Diffstat (limited to 'src/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java')
-rw-r--r--src/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java345
1 files changed, 0 insertions, 345 deletions
diff --git a/src/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java b/src/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
deleted file mode 100644
index 32e6e7e..0000000
--- a/src/net/sf/antcontrib/cpptasks/gcc/AbstractLdLinker.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- *
- * Copyright 2002-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.
- */
-package net.sf.antcontrib.cpptasks.gcc;
-import java.io.File;
-import java.util.Vector;
-
-import net.sf.antcontrib.cpptasks.CCTask;
-import net.sf.antcontrib.cpptasks.CUtil;
-import net.sf.antcontrib.cpptasks.compiler.CommandLineLinker;
-import net.sf.antcontrib.cpptasks.compiler.CommandLineLinkerConfiguration;
-import net.sf.antcontrib.cpptasks.compiler.LinkType;
-import net.sf.antcontrib.cpptasks.VersionInfo;
-import net.sf.antcontrib.cpptasks.types.LibrarySet;
-import net.sf.antcontrib.cpptasks.types.LibraryTypeEnum;
-
-/**
- * Abstract adapter for ld-like linkers
- *
- * @author Curt Arnold
- */
-public abstract class AbstractLdLinker extends CommandLineLinker {
- private String outputPrefix;
- protected AbstractLdLinker(String command, String identifierArg,
- String[] extensions, String[] ignoredExtensions,
- String outputPrefix, String outputSuffix, boolean isLibtool,
- AbstractLdLinker libtoolLinker) {
- super(command, identifierArg, extensions, ignoredExtensions,
- outputSuffix, isLibtool, libtoolLinker);
- this.outputPrefix = outputPrefix;
- }
- public void addBase(long base, Vector args) {
- if (base >= 0) {
- args.addElement("--image-base");
- args.addElement(Long.toHexString(base));
- }
- }
- public void addFixed(Boolean fixed, Vector args) {
- }
- protected void addImpliedArgs(boolean debug, LinkType linkType, Vector args) {
- if (debug) {
- args.addElement("-g");
- }
- if (isDarwin()) {
- if (linkType.isPluginModule()) {
- args.addElement("-bundle");
-// BEGINFREEHEP
- } else if (linkType.isJNIModule()) {
- args.addElement("-dynamic");
- args.addElement("-bundle");
-// ENDFREEHEP
- } else {
- if (linkType.isSharedLibrary()) {
-// FREEHEP no longer needed for 10.4+
-// args.addElement("-prebind");
- args.addElement("-dynamiclib");
- }
- }
- } else {
- if (linkType.isStaticRuntime()) {
- args.addElement("-static");
- }
- if (linkType.isPluginModule()) {
- args.addElement("-shared");
- } else {
- if (linkType.isSharedLibrary()) {
- args.addElement("-shared");
- }
- }
- }
- }
- public void addIncremental(boolean incremental, Vector args) {
- if (incremental) {
- args.addElement("-i");
- }
- }
- protected int addLibraryPatterns(String[] libnames, StringBuffer buf,
- String prefix, String extension, String[] patterns, int offset) {
- for (int i = 0; i < libnames.length; i++) {
- buf.setLength(0);
- buf.append(prefix);
- buf.append(libnames[i]);
- buf.append(extension);
- patterns[offset + i] = buf.toString();
- }
- return offset + libnames.length;
- }
- public String[] addLibrarySets(CCTask task, LibrarySet[] libsets,
- Vector preargs, Vector midargs, Vector endargs) {
- Vector libnames = new Vector();
- super.addLibrarySets(task, libsets, preargs, midargs, endargs);
- LibraryTypeEnum previousLibraryType = null;
- for (int i = 0; i < libsets.length; i++) {
- LibrarySet set = libsets[i];
- File libdir = set.getDir(null);
- String[] libs = set.getLibs();
- if (libdir != null) {
- if (set.getType() != null &&
- "framework".equals(set.getType().getValue()) &&
- isDarwin()) {
- endargs.addElement("-F" + libdir.getAbsolutePath());
- } else {
- endargs.addElement("-L" + libdir.getAbsolutePath());
- }
- }
- //
- // if there has been a change of library type
- //
- if (set.getType() != previousLibraryType) {
- if (set.getType() != null && "static".equals(set.getType().getValue())) {
-// BEGINFREEHEP not on MacOS X
- if (!isDarwin()) {
- endargs.addElement("-Bstatic");
- previousLibraryType = set.getType();
- }
-//ENDFREEHEP
- } else {
-// FREEHEP not on MacOS X, recheck this!
- if (set.getType() == null ||
- !"framework".equals(set.getType().getValue()) &&
- !isDarwin()) {
- endargs.addElement("-Bdynamic");
- previousLibraryType = set.getType();
- }
- }
- }
- StringBuffer buf = new StringBuffer("-l");
- if (set.getType() != null &&
- "framework".equals(set.getType().getValue()) &&
- isDarwin()) {
- buf.setLength(0);
-// 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++) {
- //
- // reset the buffer to just "-l"
- //
- buf.setLength(initialLength);
- //
- // add the library name
- buf.append(libs[j]);
- libnames.addElement(libs[j]);
- //
- // add the argument to the list
- 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("-Bdynamic");
- }
-// ENDFREEHEP
-
- String rc[] = new String[libnames.size()];
- for (int i = 0; i < libnames.size(); i++) {
- rc[i] = (String) libnames.elementAt(i);
- }
- return rc;
- }
- public void addMap(boolean map, Vector args) {
- if (map) {
- args.addElement("-M");
- }
- }
- public void addStack(int stack, Vector args) {
- if (stack > 0) {
- args.addElement("--stack");
- args.addElement(Integer.toString(stack));
- }
- }
- /* (non-Javadoc)
- * @see net.sf.antcontrib.cpptasks.compiler.CommandLineLinker#addEntry(int, java.util.Vector)
- */
- protected void addEntry(String entry, Vector args) {
- if (entry != null) {
- args.addElement("-e");
- args.addElement(entry);
- }
- }
-
- public String getCommandFileSwitch(String commandFile) {
- throw new IllegalStateException("ld does not support command files");
- }
- /**
- * Returns library path.
- *
- */
- protected File[] getEnvironmentIncludePath() {
- return CUtil.getPathFromEnvironment("LIB", ":");
- }
- public String getLibraryKey(File libfile) {
- String libname = libfile.getName();
- int lastDot = libname.lastIndexOf('.');
- if (lastDot >= 0) {
- return libname.substring(0, lastDot);
- }
- return libname;
- }
- /**
- * Returns library path.
- *
- */
- public File[] getLibraryPath() {
- return new File[0];
- }
- public String[] getLibraryPatterns(String[] libnames, LibraryTypeEnum libType) {
- StringBuffer buf = new StringBuffer();
- int patternCount = libnames.length;
- if (libType == null) {
- patternCount *= 2;
- }
- String[] patterns = new String[patternCount];
- int offset = 0;
- if (libType == null || "static".equals(libType.getValue())) {
- offset = addLibraryPatterns(libnames, buf, "lib", ".a", patterns, 0);
- }
- if (libType != null && "framework".equals(libType.getValue()) && isDarwin()) {
- for(int i = 0; i < libnames.length; i++) {
- buf.setLength(0);
- buf.append(libnames[i]);
- buf.append(".framework/");
- buf.append(libnames[i]);
- patterns[offset++] = buf.toString();
- }
- } else {
- if (libType == null || !"static".equals(libType.getValue())) {
- if (isHPUX()) {
- offset = addLibraryPatterns(libnames, buf, "lib", ".sl", patterns,
- offset);
- } else {
- offset = addLibraryPatterns(libnames, buf, "lib", ".so", patterns,
- offset);
- }
- }
- }
- return patterns;
- }
- public int getMaximumCommandLength() {
-// FREEHEP
- return isWindows() ? 20000 : 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;
- }
- public String[] getOutputFileSwitch(String outputFile) {
- return GccProcessor.getOutputFileSwitch("-o", outputFile);
- }
-
- public boolean isCaseSensitive() {
- return true;
- }
- protected boolean isHPUX() {
- String osname = System.getProperty("os.name").toLowerCase();
- if (osname.indexOf("hp") >= 0 && osname.indexOf("ux") >= 0) {
- return true;
- }
- return false;
- }
- /**
- * Prepares argument list for exec command. Will return null if command
- * line would exceed allowable command line buffer.
- *
- * @param outputFile
- * linker output file
- * @param sourceFiles
- * linker input files (.obj, .o, .res)
- * @param args
- * linker arguments
- * @return arguments for runTask
- */
- public String[] prepareArguments(CCTask task, String outputDir,
- String outputFile, String[] sourceFiles,
- CommandLineLinkerConfiguration config) {
- //
- // need to suppress sources that correspond to
- // library set entries since they are already
- // in the argument list
- String[] libnames = config.getLibraryNames();
- if (libnames == null || libnames.length == 0) {
- return super.prepareArguments(task, outputDir, outputFile,
- sourceFiles, config);
- }
- //
- //
- // null out any sources that correspond to library names
- //
- String[] localSources = (String[]) sourceFiles.clone();
- int extra = 0;
- for (int i = 0; i < libnames.length; i++) {
- String libname = libnames[i];
- for (int j = 0; j < localSources.length; j++) {
- if (localSources[j] != null
- && localSources[j].indexOf(libname) > 0
- && localSources[j].indexOf("lib") > 0) {
- String filename = new File(localSources[j]).getName();
- if (filename.startsWith("lib")
- && filename.substring(3).startsWith(libname)) {
- String extension = filename
- .substring(libname.length() + 3);
- if (extension.equals(".a") || extension.equals(".so")
- || extension.equals(".sl")) {
- localSources[j] = null;
- extra++;
- }
- }
- }
- }
- }
- if (extra == 0) {
- return super.prepareArguments(task, outputDir, outputFile,
- sourceFiles, config);
- }
- String[] finalSources = new String[localSources.length - extra];
- int index = 0;
- for (int i = 0; i < localSources.length; i++) {
- if (localSources[i] != null) {
- finalSources[index++] = localSources[i];
- }
- }
- return super.prepareArguments(task, outputDir, outputFile,
- finalSources, config);
- }
-}