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 FileTreeCreatorVC10 extends FileTreeCreator {
|
|
13
|
|
14 public FileTreeCreatorVC10(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatformVC10 wg) {
|
|
15 super(startDir, allConfigs, wg);
|
|
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 // TODO hideFile
|
|
27
|
|
28 // usePch applies to all configs for a file.
|
|
29 if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) {
|
|
30 usePch = true;
|
|
31 }
|
|
32
|
|
33 for (BuildConfig cfg : allConfigs) {
|
|
34 if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
|
|
35 useIgnore = true;
|
|
36 currentFileAttr.setIgnore(cfg);
|
|
37 } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) {
|
|
38 useIgnore = true;
|
|
39 currentFileAttr.setIgnore(cfg);
|
|
40 }
|
|
41
|
|
42 if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) {
|
|
43 disablePch = true;
|
|
44 currentFileAttr.setDisablePch(cfg);
|
|
45 }
|
|
46
|
|
47 Vector<String> rv = new Vector<String>();
|
|
48 cfg.collectRelevantVectors(rv, "AdditionalFile");
|
|
49 for(String addFile : rv) {
|
|
50 if (addFile.equals(fileName)) {
|
|
51 // supress any ignore
|
|
52 // TODO - may need some adjustments
|
|
53 if (file.toAbsolutePath().toString().contains(cfg.get("Flavour"))) {
|
|
54 currentFileAttr.removeFromIgnored(cfg);
|
|
55 }
|
|
56 }
|
|
57 }
|
|
58 }
|
|
59
|
|
60 String tagName = wg.getFileTagFromSuffix(fileName);
|
|
61 String fileLoc = vcProjLocation.relativize(file).toString();
|
|
62
|
|
63 if (!useIgnore && !disablePch && !usePch) {
|
|
64 wg.tag(tagName, new String[] { "Include", fileLoc});
|
|
65 } else {
|
|
66 wg.startTag(
|
|
67 tagName,
|
|
68 new String[] { "Include", fileLoc});
|
|
69
|
|
70 for (BuildConfig cfg : allConfigs) {
|
|
71 boolean ignore = currentFileAttr.hasIgnore(cfg);
|
|
72 if (ignore) {
|
|
73 wg.tagData("ExcludedFromBuild", "true", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
|
|
74 }
|
|
75 if (usePch) {
|
|
76 wg.tagData("PrecompiledHeader", "Create", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
|
|
77 }
|
|
78 if (disablePch) {
|
|
79 wg.tag("PrecompiledHeader", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
|
|
80 }
|
|
81 }
|
|
82 wg.endTag();
|
|
83 }
|
|
84
|
|
85 String filter = startDir.relativize(file.getParent().toAbsolutePath()).toString();
|
|
86 wg.addFilterDependency(fileLoc, filter);
|
|
87
|
|
88 return CONTINUE;
|
|
89 }
|
|
90
|
|
91 @Override
|
|
92 public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
|
|
93 throws IOException {
|
|
94 Boolean hide = false;
|
|
95 // TODO remove attrs, if path is matched in this dir, then it is too in every subdir.
|
|
96 // And we will check anyway
|
|
97 DirAttributes newAttr = attributes.peek().clone();
|
|
98
|
|
99 // check per config ignorePaths!
|
|
100 for (BuildConfig cfg : allConfigs) {
|
|
101 if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) {
|
|
102 newAttr.setIgnore(cfg);
|
|
103 }
|
|
104
|
|
105 // Hide is always on all configs. And additional files are never hiddden
|
|
106 if (cfg.matchesHidePath(path.toAbsolutePath().toString())) {
|
|
107 hide = true;
|
|
108 break;
|
|
109 }
|
|
110 }
|
|
111
|
|
112 if (!hide) {
|
|
113 String name = startDir.relativize(path.toAbsolutePath()).toString();
|
|
114 if (!"".equals(name)) {
|
|
115 wg.addFilter(name);
|
|
116 }
|
|
117
|
|
118 attributes.push(newAttr);
|
|
119 return super.preVisitDirectory(path, attrs);
|
|
120 } else {
|
|
121 return FileVisitResult.SKIP_SUBTREE;
|
|
122 }
|
|
123 }
|
|
124
|
|
125 @Override
|
|
126 public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
|
|
127 //end matching attributes set by ignorepath
|
|
128 attributes.pop();
|
|
129 return CONTINUE;
|
|
130 }
|
|
131
|
|
132 @Override
|
|
133 public FileVisitResult visitFileFailed(Path file, IOException exc) {
|
|
134 return CONTINUE;
|
|
135 }
|
|
136
|
|
137 public void writeFileTree() throws IOException {
|
|
138 Files.walkFileTree(this.startDir, this);
|
|
139 }
|
|
140
|
|
141
|
|
142 } |