@@ -15,7 +15,10 @@ final ArgParser argParser = ArgParser()
1515 ..addOption ('library-name' )
1616 ..addOption ('api-file' )
1717 ..addMultiOption ('source-file' )
18- ..addOption ('stamp' );
18+ ..addOption ('stamp' )
19+ ..addOption ('depfile' )
20+ ..addOption ('exclude-pattern' )
21+ ..addOption ('build-dir' );
1922
2023final List <Replacer > uiPatterns = < Replacer > [
2124 AllReplacer (RegExp (r'library\s+ui;' ), 'library dart.ui;' ),
@@ -113,6 +116,10 @@ void main(List<String> arguments) {
113116 final ArgResults results = argParser.parse (arguments);
114117 final Directory directory = Directory (results['output-dir' ] as String );
115118 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 ;
116123
117124 String Function (String source)? preprocessor;
118125 List <Replacer > replacementPatterns;
@@ -130,13 +137,25 @@ void main(List<String> arguments) {
130137 preprocessor = (String source) => preprocessPartFile (source, libraryName! );
131138 replacementPatterns = generatePartsPatterns (libraryName, isPublic);
132139 }
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);
135154 if (libraryName != null ) {
136155 pathSuffix = path.join (libraryName, pathSuffix);
137156 }
138157 final String outputFilePath = path.join (directory.path, pathSuffix);
139- processFile (inputFilePath , outputFilePath, preprocessor, replacementPatterns);
158+ processFile (inputFile.path , outputFilePath, preprocessor, replacementPatterns);
140159 }
141160
142161 if (results['api-file' ] != null ) {
@@ -159,10 +178,15 @@ void main(List<String> arguments) {
159178 );
160179 }
161180
181+ File (stampfilePath).writeAsStringSync ('stamp' );
182+ writeDepfile (depfilePath, stampfilePath, inputFiles);
183+ }
162184
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 ());
166190}
167191
168192List <String > getExtraImportsForLibrary (String libraryName) {
0 commit comments