@@ -15,7 +15,10 @@ final ArgParser argParser = ArgParser()
15
15
..addOption ('library-name' )
16
16
..addOption ('api-file' )
17
17
..addMultiOption ('source-file' )
18
- ..addOption ('stamp' );
18
+ ..addOption ('stamp' )
19
+ ..addOption ('depfile' )
20
+ ..addOption ('exclude-pattern' )
21
+ ..addOption ('build-dir' );
19
22
20
23
final List <Replacer > uiPatterns = < Replacer > [
21
24
AllReplacer (RegExp (r'library\s+ui;' ), 'library dart.ui;' ),
@@ -113,6 +116,10 @@ void main(List<String> arguments) {
113
116
final ArgResults results = argParser.parse (arguments);
114
117
final Directory directory = Directory (results['output-dir' ] as String );
115
118
final String inputDirectoryPath = results['input-dir' ] as String ;
119
+ final String ? excludePattern = results['exclude-pattern' ] as String ? ;
120
+ final String stampfilePath = results['stamp' ] as String ;
121
+ final String depfilePath = results['depfile' ] as String ;
122
+ final String buildDirPath = results['build-dir' ] as String ;
116
123
117
124
String Function (String source)? preprocessor;
118
125
List <Replacer > replacementPatterns;
@@ -130,13 +137,25 @@ void main(List<String> arguments) {
130
137
preprocessor = (String source) => preprocessPartFile (source, libraryName! );
131
138
replacementPatterns = generatePartsPatterns (libraryName, isPublic);
132
139
}
133
- for (final String inputFilePath in results['source-file' ] as Iterable <String >) {
134
- String pathSuffix = inputFilePath.substring (inputDirectoryPath.length);
140
+
141
+ final List <String > inputFiles = < String > [];
142
+ final List <FileSystemEntity > entries = Directory (inputDirectoryPath).listSync (
143
+ recursive: true , followLinks: false ,
144
+ );
145
+ for (final File inputFile in entries.whereType <File >()) {
146
+ if (excludePattern != null && inputFile.path.startsWith (excludePattern)) {
147
+ continue ;
148
+ }
149
+ if (! inputFile.path.endsWith ('.dart' ) || inputFile.path.endsWith ('_test.dart' )) {
150
+ continue ;
151
+ }
152
+ inputFiles.add (path.relative (inputFile.path, from: buildDirPath));
153
+ String pathSuffix = inputFile.path.substring (inputDirectoryPath.length);
135
154
if (libraryName != null ) {
136
155
pathSuffix = path.join (libraryName, pathSuffix);
137
156
}
138
157
final String outputFilePath = path.join (directory.path, pathSuffix);
139
- processFile (inputFilePath , outputFilePath, preprocessor, replacementPatterns);
158
+ processFile (inputFile.path , outputFilePath, preprocessor, replacementPatterns);
140
159
}
141
160
142
161
if (results['api-file' ] != null ) {
@@ -159,10 +178,15 @@ void main(List<String> arguments) {
159
178
);
160
179
}
161
180
181
+ File (stampfilePath).writeAsStringSync ('stamp' );
182
+ writeDepfile (depfilePath, stampfilePath, inputFiles);
183
+ }
162
184
163
- if (results['stamp' ] != null ) {
164
- File (results['stamp' ] as String ).writeAsStringSync ('stamp' );
165
- }
185
+ void writeDepfile (String depfilePath, String stampfilePath, List <String > inputFiles) {
186
+ final StringBuffer outBuf = StringBuffer ();
187
+ outBuf.write ('$stampfilePath : ' );
188
+ outBuf.write (inputFiles.join (' ' ));
189
+ File (depfilePath).writeAsStringSync (outBuf.toString ());
166
190
}
167
191
168
192
List <String > getExtraImportsForLibrary (String libraryName) {
0 commit comments