@@ -56,10 +56,19 @@ void main(List<String> args) async {
5656 final library = parse (config);
5757
5858 // Generate file for the parsed bindings.
59- final gen = File (config.output);
60- library.generateFile (gen);
61- _logger
62- .info (successPen ('Finished, Bindings generated in ${gen .absolute .path }' ));
59+ final fileToBeGenerated = File (config.output);
60+
61+ // Consider regenif config has been updated
62+ final bool inputHasBeenUpdated = _inputHasBeenUpdated (
63+ fileToBeGenerated, [config.filename! , ...config.headers.entryPoints]);
64+ if (! inputHasBeenUpdated) {
65+ _logger.info ('Bindings are up-to-date. No changes to headers detected.' );
66+ return ;
67+ }
68+
69+ library.generateFile (fileToBeGenerated);
70+ _logger.info (successPen (
71+ 'Finished, Bindings generated in ${fileToBeGenerated .absolute .path }' ));
6372
6473 if (config.symbolFile != null ) {
6574 final symbolFileGen = File (config.symbolFile! .output);
@@ -70,6 +79,25 @@ void main(List<String> args) async {
7079 }
7180}
7281
82+ bool _inputHasBeenUpdated (
83+ File fileToBeGenerated, List <String > configAndHeaders) {
84+ // if file does not exist, consider it needs to be generated.
85+ if (! fileToBeGenerated.existsSync ()) {
86+ _logger.info ('Bindings file does not exist, generating bindings.' );
87+ return true ;
88+ }
89+
90+ for (final configOrHeader in configAndHeaders) {
91+ final headerMTime = File (configOrHeader).lastModifiedSync ();
92+
93+ if (fileToBeGenerated.existsSync () &&
94+ headerMTime.isAfter (fileToBeGenerated.lastModifiedSync ())) {
95+ return true ; // file needs to be regenerated.
96+ }
97+ }
98+ return false ;
99+ }
100+
73101Config getConfig (ArgResults result, PackageConfig ? packageConfig) {
74102 _logger.info ('Running in ${Directory .current }' );
75103 Config config;
0 commit comments