@@ -55,8 +55,20 @@ func PreprocessSketchWithCtags(
55
55
56
56
stdout , stderr := & bytes.Buffer {}, & bytes.Buffer {}
57
57
58
- // Run GCC preprocessor
58
+ // Check if the preprocessed file is already up-to-date
59
+ unpreprocessedSourceFile := buildPath .Join ("sketch" , sketch .MainFile .Base ()+ ".cpp.merged" )
59
60
sourceFile := buildPath .Join ("sketch" , sketch .MainFile .Base ()+ ".cpp" )
61
+ if unpreprocessedStat , err := unpreprocessedSourceFile .Stat (); err != nil {
62
+ return nil , fmt .Errorf ("%s: %w" , i18n .Tr ("unable to open unpreprocessed source file" ), err )
63
+ } else if sourceStat , err := sourceFile .Stat (); err != nil {
64
+ return nil , fmt .Errorf ("%s: %w" , i18n .Tr ("unable to open source file" ), err )
65
+ } else if unpreprocessedStat .ModTime ().Before (sourceStat .ModTime ()) {
66
+ fmt .Fprintln (stdout , i18n .Tr ("Sketch is unchanged, skipping preprocessing." ))
67
+ res := & runner.Result {Stdout : stdout .Bytes (), Stderr : stderr .Bytes ()}
68
+ return res , nil
69
+ }
70
+
71
+ // Run GCC preprocessor
60
72
result := GCC (sourceFile , ctagsTarget , includes , buildProperties ).Run (ctx )
61
73
stdout .Write (result .Stdout )
62
74
stderr .Write (result .Stderr )
0 commit comments