blob: 0304cf67b734d0bc999cfe3e67b974023944700c [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source 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 com.android.sdklib.build;
import static com.android.SdkConstants.DOT_DEP;
import static com.android.SdkConstants.EXT_FS;
import static com.android.SdkConstants.EXT_RS;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.List;
import java.util.Set;
/**
* Loads dependencies for Renderscript.
*/
public class RenderScriptChecker {
@NonNull
protected final List<File> mSourceFolders;
@NonNull
private final File mBinFolder;
protected Set<File> mOldOutputs;
protected Set<File> mOldInputs;
protected List<DependencyFile> mDependencyFiles;
public RenderScriptChecker(
@NonNull List<File> sourceFolders,
@NonNull File binFolder) {
mSourceFolders = sourceFolders;
mBinFolder = binFolder;
}
public void loadDependencies() throws IOException {
// get the dependency data from all files under bin/rsDeps/
File renderscriptDeps = new File(mBinFolder, RenderScriptProcessor.RS_DEPS);
File[] depsFiles = null;
if (renderscriptDeps.isDirectory()) {
depsFiles = renderscriptDeps.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String s) {
return s.endsWith(DOT_DEP);
}
});
}
int count = depsFiles != null ? depsFiles.length : 0;
mDependencyFiles = Lists.newArrayListWithCapacity(0);
mOldOutputs = Sets.newHashSet();
mOldInputs = Sets.newHashSet();
if (count > 0) {
for (File file : depsFiles) {
DependencyFile depFile = new DependencyFile(file, mSourceFolders);
depFile.parse();
mDependencyFiles.add(depFile);
// record old inputs
mOldOutputs.addAll(depFile.getOutputFiles());
// record old inputs
mOldInputs.addAll(depFile.getInputFiles());
}
}
}
@NonNull
public List<File> findInputFiles() throws IOException {
// gather source files.
SourceSearcher searcher = new SourceSearcher(mSourceFolders, EXT_RS, EXT_FS);
FileGatherer fileGatherer = new FileGatherer();
searcher.search(fileGatherer);
return fileGatherer.getFiles();
}
@Nullable
public Set<File> getOldOutputs() {
return mOldOutputs;
}
@Nullable
public Set<File> getOldInputs() {
return mOldInputs;
}
public void cleanDependencies() {
if (mDependencyFiles != null) {
for (DependencyFile depFile : mDependencyFiles) {
depFile.getFile().delete();
}
}
}
@NonNull
public List<File> getSourceFolders() {
return mSourceFolders;
}
}