/* | |
* | |
* 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; | |
import java.io.File; | |
import net.sf.antcontrib.cpptasks.compiler.ProcessorConfiguration; | |
/** | |
* A description of a file built or to be built | |
*/ | |
public final class TargetInfo { | |
private static final File[] emptyFileArray = new File[0]; | |
private/* final */ProcessorConfiguration config; | |
private/* final */File output; | |
private boolean rebuild; | |
private/* final */File[] sources; | |
private File[] sysSources; | |
public TargetInfo(ProcessorConfiguration config, File[] sources, | |
File[] sysSources, File output, boolean rebuild) { | |
if (config == null) { | |
throw new NullPointerException("config"); | |
} | |
if (sources == null) { | |
throw new NullPointerException("sources"); | |
} | |
if (output == null) { | |
throw new NullPointerException("output"); | |
} | |
this.config = config; | |
this.sources = (File[]) sources.clone(); | |
if (sysSources == null) { | |
this.sysSources = emptyFileArray; | |
} else { | |
this.sysSources = (File[]) sysSources.clone(); | |
} | |
this.output = output; | |
this.rebuild = rebuild; | |
// | |
// if the output doesn't exist, must rebuild it | |
// | |
if (!output.exists()) { | |
rebuild = true; | |
} | |
} | |
public String[] getAllSourcePaths() { | |
String[] paths = new String[sysSources.length + sources.length]; | |
for (int i = 0; i < sysSources.length; i++) { | |
paths[i] = sysSources[i].toString(); | |
} | |
int offset = sysSources.length; | |
for (int i = 0; i < sources.length; i++) { | |
paths[offset + i] = sources[i].toString(); | |
} | |
return paths; | |
} | |
public File[] getAllSources() { | |
File[] allSources = new File[sources.length + sysSources.length]; | |
for (int i = 0; i < sysSources.length; i++) { | |
allSources[i] = sysSources[i]; | |
} | |
int offset = sysSources.length; | |
for (int i = 0; i < sources.length; i++) { | |
allSources[i + offset] = sources[i]; | |
} | |
return allSources; | |
} | |
public ProcessorConfiguration getConfiguration() { | |
return config; | |
} | |
public File getOutput() { | |
return output; | |
} | |
public boolean getRebuild() { | |
return rebuild; | |
} | |
/** | |
* Returns an array of SourceHistory objects (contains relative path and | |
* last modified time) for the source[s] of this target | |
*/ | |
public SourceHistory[] getSourceHistories(String basePath) { | |
SourceHistory[] histories = new SourceHistory[sources.length]; | |
for (int i = 0; i < sources.length; i++) { | |
String relativeName = CUtil.getRelativePath(basePath, sources[i]); | |
long lastModified = sources[i].lastModified(); | |
histories[i] = new SourceHistory(relativeName, lastModified); | |
} | |
return histories; | |
} | |
public String[] getSourcePaths() { | |
String[] paths = new String[sources.length]; | |
for (int i = 0; i < sources.length; i++) { | |
paths[i] = sources[i].toString(); | |
} | |
return paths; | |
} | |
public File[] getSources() { | |
File[] clone = (File[]) sources.clone(); | |
return clone; | |
} | |
public String[] getSysSourcePaths() { | |
String[] paths = new String[sysSources.length]; | |
for (int i = 0; i < sysSources.length; i++) { | |
paths[i] = sysSources[i].toString(); | |
} | |
return paths; | |
} | |
public File[] getSysSources() { | |
File[] clone = (File[]) sysSources.clone(); | |
return clone; | |
} | |
public void mustRebuild() { | |
this.rebuild = true; | |
} | |
} |