@@ -55,8 +55,20 @@ func PreprocessSketchWithCtags(
5555
5656 stdout , stderr := & bytes.Buffer {}, & bytes.Buffer {}
5757
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" )
5960 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
6072 result := GCC (sourceFile , ctagsTarget , includes , buildProperties ).Run (ctx )
6173 stdout .Write (result .Stdout )
6274 stderr .Write (result .Stderr )
0 commit comments