6801
|
1 import static java.nio.file.FileVisitResult.CONTINUE;
|
|
2
|
|
3 import java.io.IOException;
|
|
4 import java.nio.file.FileSystems;
|
|
5 import java.nio.file.FileVisitResult;
|
|
6 import java.nio.file.Files;
|
|
7 import java.nio.file.Path;
|
|
8 import java.nio.file.attribute.BasicFileAttributes;
|
|
9 import java.util.Stack;
|
|
10 import java.util.Vector;
|
|
11
|
|
12 public class FileTreeCreatorVC7 extends FileTreeCreator {
|
|
13
|
|
14 public FileTreeCreatorVC7(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatform wg) {
|
|
15 super(startDir, allConfigs, null);
|
|
16 }
|
|
17
|
|
18 @Override
|
|
19 public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
|
|
20 DirAttributes currentFileAttr = attributes.peek().clone();
|
|
21 boolean usePch = false;
|
|
22 boolean disablePch = false;
|
|
23 boolean useIgnore = false;
|
|
24 String fileName = file.getFileName().toString();
|
|
25
|
|
26 // usePch applies to all configs for a file.
|
|
27 if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) {
|
|
28 usePch = true;
|
|
29 }
|
|
30
|
|
31 for (BuildConfig cfg : allConfigs) {
|
|
32 if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
|
|
33 useIgnore = true;
|
|
34 currentFileAttr.setIgnore(cfg);
|
|
35 } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) {
|
|
36 useIgnore = true;
|
|
37 currentFileAttr.setIgnore(cfg);
|
|
38 }
|
|
39
|
|
40 if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) {
|
|
41 disablePch = true;
|
|
42 currentFileAttr.setDisablePch(cfg);
|
|
43 }
|
|
44
|
|
45 Vector<String> rv = new Vector<String>();
|
|
46 cfg.collectRelevantVectors(rv, "AdditionalFile");
|
|
47 for(String addFile : rv) {
|
|
48 if (addFile.equals(fileName)) {
|
|
49 // supress any ignore
|
|
50 currentFileAttr.removeFromIgnored(cfg);
|
|
51 }
|
|
52 }
|
|
53 }
|
|
54
|
|
55 if (!useIgnore && !disablePch && !usePch) {
|
|
56 wg.tag("File", new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});
|
|
57 } else {
|
|
58 wg.startTag(
|
|
59 "File",
|
|
60 new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});
|
|
61
|
|
62 for (BuildConfig cfg : allConfigs) {
|
|
63 boolean ignore = currentFileAttr.hasIgnore(cfg);
|
|
64 String [] fileConfAttr;
|
|
65
|
|
66 if (ignore) {
|
|
67 fileConfAttr = new String[] {"Name", cfg.get("Name"), "ExcludedFromBuild", "TRUE" };
|
|
68 } else {
|
|
69 fileConfAttr = new String[] {"Name", cfg.get("Name")};
|
|
70 }
|
|
71
|
|
72 if (!disablePch && !usePch && !ignore) {
|
|
73 continue;
|
|
74 } else if (!disablePch && !usePch) {
|
|
75 wg.tag("FileConfiguration", fileConfAttr);
|
|
76 } else {
|
|
77 wg.startTag("FileConfiguration", fileConfAttr);
|
|
78 if (usePch) {
|
|
79 // usePch always applies to all configs, might not always be so.
|
|
80 wg.tag("Tool", new String[] {
|
|
81 "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
|
|
82 "1" });
|
|
83 assert(!disablePch);
|
|
84 }
|
|
85 if (disablePch) {
|
|
86 if (currentFileAttr.hasDisablePch(cfg)) {
|
|
87 wg.tag("Tool", new String[] {
|
|
88 "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
|
|
89 "0" });
|
|
90 }
|
|
91 assert(!usePch);
|
|
92 }
|
|
93 wg.endTag();
|
|
94 }
|
|
95 }
|
|
96 wg.endTag();
|
|
97 }
|
|
98
|
|
99 return CONTINUE;
|
|
100 }
|
|
101
|
|
102 @Override
|
|
103 public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
|
|
104 throws IOException {
|
|
105 Boolean hide = false;
|
|
106 DirAttributes newAttr = attributes.peek().clone();
|
|
107
|
|
108 String rPath;
|
|
109 if (path.toAbsolutePath().toString().equals(this.startDir.toAbsolutePath().toString())){
|
|
110 rPath = startDir.toString();
|
|
111 } else {
|
|
112 rPath = path.getFileName().toString();
|
|
113 }
|
|
114
|
|
115 // check per config ignorePaths!
|
|
116 for (BuildConfig cfg : allConfigs) {
|
|
117 if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) {
|
|
118 newAttr.setIgnore(cfg);
|
|
119 }
|
|
120
|
|
121 // Hide is always on all configs. And additional files are never hiddden
|
|
122 if (cfg.matchesHidePath(path.toAbsolutePath().toString())) {
|
|
123 hide = true;
|
|
124 break;
|
|
125 }
|
|
126 }
|
|
127
|
|
128 if (!hide) {
|
|
129 wg.startTag("Filter", new String[] {
|
|
130 "Name", rPath});
|
|
131
|
|
132 attributes.push(newAttr);
|
|
133 return super.preVisitDirectory(path, attrs);
|
|
134 } else {
|
|
135 return FileVisitResult.SKIP_SUBTREE;
|
|
136 }
|
|
137 }
|
|
138
|
|
139 @Override
|
|
140 public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
|
|
141 //end matching attributes set by ignorepath
|
|
142 wg.endTag();
|
|
143 attributes.pop();
|
|
144
|
|
145 return CONTINUE;
|
|
146 }
|
|
147
|
|
148 @Override
|
|
149 public FileVisitResult visitFileFailed(Path file, IOException exc) {
|
|
150 return CONTINUE;
|
|
151 }
|
|
152
|
|
153 public void writeFileTree() throws IOException {
|
|
154 Files.walkFileTree(this.startDir, this);
|
|
155 }
|
|
156 } |