mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00

Fixed project generation code, and added warning to upgrade to VS 2008 SP1. Reviewed-by: dcubed, ccheung
190 lines
7.3 KiB
Java
190 lines
7.3 KiB
Java
/*
|
|
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code 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 General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*
|
|
*/
|
|
|
|
import static java.nio.file.FileVisitResult.CONTINUE;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.file.FileSystems;
|
|
import java.nio.file.FileVisitResult;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.attribute.BasicFileAttributes;
|
|
import java.util.Stack;
|
|
import java.util.Vector;
|
|
|
|
public class FileTreeCreatorVC10 extends FileTreeCreator {
|
|
|
|
public FileTreeCreatorVC10(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatformVC10 wg) {
|
|
super(startDir, allConfigs, wg);
|
|
}
|
|
|
|
@Override
|
|
public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
|
|
DirAttributes currentFileAttr = attributes.peek().clone();
|
|
boolean usePch = false;
|
|
boolean disablePch = false;
|
|
boolean useIgnore = false;
|
|
boolean isAltSrc = false; // only needed as a debugging crumb
|
|
boolean isReplacedByAltSrc = false;
|
|
String fileName = file.getFileName().toString();
|
|
|
|
// TODO hideFile
|
|
|
|
// usePch applies to all configs for a file.
|
|
if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) {
|
|
usePch = true;
|
|
}
|
|
|
|
String fileLoc = vcProjLocation.relativize(file).toString();
|
|
|
|
// isAltSrc and isReplacedByAltSrc applies to all configs for a file
|
|
if (BuildConfig.matchesRelativeAltSrcInclude(
|
|
file.toAbsolutePath().toString())) {
|
|
// current file is an alternate source file so track it
|
|
isAltSrc = true;
|
|
BuildConfig.trackRelativeAltSrcFile(
|
|
file.toAbsolutePath().toString());
|
|
} else if (BuildConfig.matchesRelativeAltSrcFile(
|
|
file.toAbsolutePath().toString())) {
|
|
// current file is a regular file that matches an alternate
|
|
// source file so yack about replacing the regular file
|
|
isReplacedByAltSrc = true;
|
|
System.out.println("INFO: alternate source file '" +
|
|
BuildConfig.getMatchingRelativeAltSrcFile(
|
|
file.toAbsolutePath().toString()) +
|
|
"' replaces '" + fileLoc + "'");
|
|
}
|
|
|
|
for (BuildConfig cfg : allConfigs) {
|
|
if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
|
|
useIgnore = true;
|
|
currentFileAttr.setIgnore(cfg);
|
|
} else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) {
|
|
useIgnore = true;
|
|
currentFileAttr.setIgnore(cfg);
|
|
}
|
|
|
|
if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) {
|
|
disablePch = true;
|
|
currentFileAttr.setDisablePch(cfg);
|
|
}
|
|
|
|
Vector<String> rv = new Vector<String>();
|
|
cfg.collectRelevantVectors(rv, "AdditionalFile");
|
|
for(String addFile : rv) {
|
|
if (addFile.equals(fileName)) {
|
|
// supress any ignore
|
|
// TODO - may need some adjustments
|
|
if (file.toAbsolutePath().toString().contains(cfg.get("Flavour"))) {
|
|
currentFileAttr.removeFromIgnored(cfg);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
String tagName = wg10.getFileTagFromSuffix(fileName);
|
|
|
|
if (!useIgnore && !disablePch && !usePch && !isReplacedByAltSrc) {
|
|
wg.tag(tagName, new String[] { "Include", fileLoc});
|
|
} else {
|
|
wg.startTag(
|
|
tagName,
|
|
new String[] { "Include", fileLoc});
|
|
|
|
for (BuildConfig cfg : allConfigs) {
|
|
boolean ignore = currentFileAttr.hasIgnore(cfg);
|
|
if (ignore) {
|
|
wg.tagData("ExcludedFromBuild", "true", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
|
|
}
|
|
if (usePch) {
|
|
wg.tagData("PrecompiledHeader", "Create", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
|
|
}
|
|
if (disablePch) {
|
|
wg.tag("PrecompiledHeader", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
|
|
}
|
|
if (isReplacedByAltSrc) {
|
|
wg.tagData("ExcludedFromBuild", "true", "Condition",
|
|
"'$(Configuration)|$(Platform)'=='" +
|
|
cfg.get("Name") + "'");
|
|
}
|
|
}
|
|
wg.endTag();
|
|
}
|
|
|
|
String filter = startDir.relativize(file.getParent().toAbsolutePath()).toString();
|
|
wg10.addFilterDependency(fileLoc, filter);
|
|
|
|
return CONTINUE;
|
|
}
|
|
|
|
@Override
|
|
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
|
|
throws IOException {
|
|
Boolean hide = false;
|
|
// TODO remove attrs, if path is matched in this dir, then it is too in every subdir.
|
|
// And we will check anyway
|
|
DirAttributes newAttr = attributes.peek().clone();
|
|
|
|
// check per config ignorePaths!
|
|
for (BuildConfig cfg : allConfigs) {
|
|
if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) {
|
|
newAttr.setIgnore(cfg);
|
|
}
|
|
|
|
// Hide is always on all configs. And additional files are never hiddden
|
|
if (cfg.matchesHidePath(path.toAbsolutePath().toString())) {
|
|
hide = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!hide) {
|
|
String name = startDir.relativize(path.toAbsolutePath()).toString();
|
|
if (!"".equals(name)) {
|
|
wg10.addFilter(name);
|
|
}
|
|
|
|
attributes.push(newAttr);
|
|
return super.preVisitDirectory(path, attrs);
|
|
} else {
|
|
return FileVisitResult.SKIP_SUBTREE;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
|
|
//end matching attributes set by ignorepath
|
|
attributes.pop();
|
|
return CONTINUE;
|
|
}
|
|
|
|
@Override
|
|
public FileVisitResult visitFileFailed(Path file, IOException exc) {
|
|
return CONTINUE;
|
|
}
|
|
|
|
public void writeFileTree() throws IOException {
|
|
Files.walkFileTree(this.startDir, this);
|
|
}
|
|
}
|