/** * Copyright (C) 2009 STMicroelectronics * * This file is part of "Mind Compiler" is free software: you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Contact: mind@ow2.org * * Authors: Matthieu Leclercq * Contributors: */ package org.ow2.mind.compilation; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; public abstract class AbstractLinkerCommand implements LinkerCommand { protected final Map<Object, Object> context; protected String cmd; protected String fullCmd; protected final List<String> flags = new ArrayList<String>(); protected final List<File> inputFiles = new ArrayList<File>(); protected final List<String> libs = new ArrayList<String>(); protected File outputFile; protected String optimizationLevel; protected String linkerScript; protected boolean forced; private List<File> outputFiles; protected AbstractLinkerCommand(final String cmd, final Map<Object, Object> context) { this.cmd = cmd; this.context = context; } public String getCommand() { return cmd; } public void setCommand(final String command) { this.cmd = command; } public LinkerCommand addFlag(final String flag) { if (flag != null) flags.add(flag); return this; } public LinkerCommand addFlags(final Collection<String> flags) { if (flags != null) this.flags.addAll(flags); return this; } public LinkerCommand addFlags(final String... flags) { if (flags != null) { for (final String flag : flags) this.flags.add(flag); } return this; } public LinkerCommand addInputFile(final File inputFile) { inputFiles.add(inputFile); return this; } public LinkerCommand addInputFiles(final Collection<File> inputFiles) { if (inputFiles != null) this.inputFiles.addAll(inputFiles); return this; } public LinkerCommand addInputFiles(final File... inputFiles) { if (inputFiles != null) { for (final File inputFile : inputFiles) { this.inputFiles.add(inputFile); } } return this; } public LinkerCommand addLib(final String libName) { libs.add(libName); return this; } public LinkerCommand setLinkerScript(final String linkerScript) { this.linkerScript = linkerScript; return this; } public LinkerCommand setOptimizationLevel(final String level) { this.optimizationLevel = level; return this; } public LinkerCommand setOutputFile(final File outputFile) { this.outputFile = outputFile; return this; } public Collection<File> getInputFiles() { return inputFiles; } public Collection<File> getOutputFiles() { return outputFiles; } public boolean forceExec() { return forced; } public void prepare() { outputFiles = Arrays.asList(outputFile); } }