summaryrefslogtreecommitdiff
path: root/src/main/java/net/sf/antcontrib/cpptasks/openwatcom/OpenWatcomLibrarian.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sf/antcontrib/cpptasks/openwatcom/OpenWatcomLibrarian.java')
-rw-r--r--src/main/java/net/sf/antcontrib/cpptasks/openwatcom/OpenWatcomLibrarian.java254
1 files changed, 254 insertions, 0 deletions
diff --git a/src/main/java/net/sf/antcontrib/cpptasks/openwatcom/OpenWatcomLibrarian.java b/src/main/java/net/sf/antcontrib/cpptasks/openwatcom/OpenWatcomLibrarian.java
new file mode 100644
index 0000000..848c395
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/cpptasks/openwatcom/OpenWatcomLibrarian.java
@@ -0,0 +1,254 @@
+/*
+ *
+ * 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.openwatcom;
+
+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.compiler.Linker;
+import net.sf.antcontrib.cpptasks.types.LibraryTypeEnum;
+
+/**
+ * Adapter for the OpenWatcom Librarian.
+ *
+ * @author Curt Arnold
+ */
+public final class OpenWatcomLibrarian
+ extends CommandLineLinker {
+ /**
+ * Singleton.
+ */
+ private static final OpenWatcomLibrarian INSTANCE = new OpenWatcomLibrarian();
+ /**
+ * Singleton accessor.
+ * @return OpenWatcomLibrarian librarian instance
+ */
+ public static OpenWatcomLibrarian getInstance() {
+ return INSTANCE;
+ }
+
+ /**
+ * Constructor.
+ */
+ private OpenWatcomLibrarian() {
+ super("wlib", null, new String[] {".obj"}
+ , new String[0], ".lib", false,
+ null);
+ }
+
+ /**
+ * Add base address.
+ * @param base long base address
+ * @param args Vector command line arguments
+ */
+ protected void addBase(final long base, final Vector args) {
+ }
+
+ /**
+ * Add alternative entry point.
+ * @param entry String entry point
+ * @param args Vector command line arguments
+ */
+ protected void addEntry(final String entry, final Vector args) {
+ }
+
+ /**
+ * Add fixed parameter.
+ * @param fixed Boolean true if fixed
+ * @param args Vector command line arguments
+ */
+ protected void addFixed(final Boolean fixed, final Vector args) {
+ }
+
+ /**
+ * Add implied arguments.
+ * @param debug boolean true if debugging
+ * @param linkType LinkType link type
+ * @param args Vector command line arguments
+ */
+ protected void addImpliedArgs(final boolean debug,
+ final LinkType linkType,
+ final Vector args) {
+ }
+
+ /**
+ * Add incremental option.
+ * @param incremental boolean true if incremental
+ * @param args Vector command line arguments
+ */
+ protected void addIncremental(final boolean incremental,
+ final Vector args) {
+ }
+
+ /**
+ * Add map option.
+ * @param map boolean true to create map file
+ * @param args Vector command line argument
+ */
+ protected void addMap(final boolean map,
+ final Vector args) {
+ }
+
+ /**
+ * Add stack size option.
+ * @param stack int stack size
+ * @param args Vector command line arguments
+ */
+ protected void addStack(final int stack,
+ final Vector args) {
+ }
+
+ /**
+ * Get command file switch.
+ * @param cmdFile String command file
+ * @return String command file switch
+ */
+ protected String getCommandFileSwitch(final String cmdFile) {
+ return OpenWatcomProcessor.getCommandFileSwitch(cmdFile);
+ }
+
+
+ /**
+ * Get library search path.
+ * @return File[] library search path
+ */
+ public File[] getLibraryPath() {
+ return CUtil.getPathFromEnvironment("LIB", ";");
+ }
+
+ /**
+ * Get file selectors for specified library names.
+ * @param libnames String[] library names
+ * @param libType LibraryTypeEnum library type enum
+ * @return String[] file selection patterns
+ */
+ public String[] getLibraryPatterns(final String[] libnames,
+ final LibraryTypeEnum libType) {
+ return OpenWatcomProcessor.getLibraryPatterns(libnames, libType);
+ }
+
+ /**
+ * Get linker.
+ * @param type LinkType link type
+ * @return Linker linker
+ */
+ public Linker getLinker(final LinkType type) {
+ return OpenWatcomCLinker.getInstance().getLinker(type);
+ }
+
+ /**
+ * Gets maximum command line.
+ * @return int maximum command line
+ */
+ public int getMaximumCommandLength() {
+ return 1024;
+ }
+
+ /**
+ * Create output file switch.
+ * @param outFile String output file switch
+ * @return String[] output file switch
+ */
+ public String[] getOutputFileSwitch(final String outFile) {
+ return OpenWatcomProcessor.getOutputFileSwitch(outFile);
+ }
+
+ /**
+ * Gets case-sensisitivity of processor.
+ * @return boolean true if case sensitive
+ */
+ public boolean isCaseSensitive() {
+ return OpenWatcomProcessor.isCaseSensitive();
+ }
+
+ /**
+ * Builds a library.
+ * @param task task
+ * @param outputFile generated library
+ * @param sourceFiles object files
+ * @param config linker configuration
+ */
+ public void link(final CCTask task,
+ final File outputFile,
+ final String[] sourceFiles,
+ final CommandLineLinkerConfiguration config) {
+ //
+ // delete any existing library
+ outputFile.delete();
+ //
+ // build a new library
+ super.link(task, outputFile, sourceFiles, config);
+ }
+
+ /**
+ * Prepares argument list for exec command.
+ * @param task task
+ * @param outputDir output directory
+ * @param outputName output file name
+ * @param sourceFiles object files
+ * @param config linker configuration
+ * @return arguments for runTask
+ */
+ protected String[] prepareArguments(
+ final CCTask task,
+ final String outputDir,
+ final String outputName,
+ final String[] sourceFiles,
+ final CommandLineLinkerConfiguration config) {
+ String[] preargs = config.getPreArguments();
+ String[] endargs = config.getEndArguments();
+ StringBuffer buf = new StringBuffer();
+ Vector execArgs = new Vector(preargs.length + endargs.length + 10
+ + sourceFiles.length);
+
+ execArgs.addElement(this.getCommand());
+ String outputFileName = new File(outputDir, outputName).toString();
+ execArgs.addElement(quoteFilename(buf, outputFileName));
+
+ for (int i = 0; i < preargs.length; i++) {
+ execArgs.addElement(preargs[i]);
+ }
+
+ int objBytes = 0;
+
+ for (int i = 0; i < sourceFiles.length; i++) {
+ String last4 = sourceFiles[i]
+ .substring(sourceFiles[i].length() - 4).toLowerCase();
+ if (!last4.equals(".def")
+ && !last4.equals(".res")
+ && !last4.equals(".lib")) {
+ execArgs.addElement("+" + quoteFilename(buf, sourceFiles[i]));
+ objBytes += new File(sourceFiles[i]).length();
+ }
+ }
+
+ for (int i = 0; i < endargs.length; i++) {
+ execArgs.addElement(endargs[i]);
+ }
+
+ String[] execArguments = new String[execArgs.size()];
+ execArgs.copyInto(execArguments);
+
+ return execArguments;
+ }
+
+}