@@ -73,11 +73,14 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
7373 return nil , & arduino.MissingSketchPathError {}
7474 }
7575 sketchPath := paths .New (req .GetSketchPath ())
76- sk , err := sketch .New (sketchPath )
77- if err != nil {
78- return nil , & arduino.CantOpenSketchError {Cause : err }
76+ builderCtx := & types.Context {}
77+ builderCtx .PackageManager = pme
78+ if pme .GetProfile () != nil {
79+ builderCtx .LibrariesManager = lm
7980 }
8081
82+ sk , newSketchErr := sketch .New (sketchPath )
83+
8184 fqbnIn := req .GetFqbn ()
8285 if fqbnIn == "" && sk != nil {
8386 fqbnIn = sk .GetDefaultFQBN ()
@@ -111,13 +114,23 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
111114 securityKeysOverride = append (securityKeysOverride , "build.keys.keychain=" + req .KeysKeychain , "build.keys.sign_key=" + req .GetSignKey (), "build.keys.encrypt_key=" + req .EncryptKey )
112115 }
113116
114- builderCtx := & types.Context {}
115- builderCtx .PackageManager = pme
116- if pme .GetProfile () != nil {
117- builderCtx .LibrariesManager = lm
118- }
119117 builderCtx .UseCachedLibrariesResolution = req .GetSkipLibrariesDiscovery ()
120118 builderCtx .FQBN = fqbn
119+ defer func () {
120+ appendBuildProperties (r , builderCtx )
121+ }()
122+ r = & rpc.CompileResponse {}
123+ if newSketchErr != nil {
124+ if req .GetShowProperties () {
125+ // Just get build properties and exit
126+ compileErr := builder .RunParseHardware (builderCtx )
127+ if compileErr != nil {
128+ compileErr = & arduino.CompileFailedError {Message : compileErr .Error ()}
129+ }
130+ return r , compileErr
131+ }
132+ return nil , & arduino.CantOpenSketchError {Cause : err }
133+ }
121134 builderCtx .Sketch = sk
122135 builderCtx .ProgressCB = progressCB
123136
@@ -183,7 +196,6 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
183196 builderCtx .OnlyUpdateCompilationDatabase = req .GetCreateCompilationDatabaseOnly ()
184197 builderCtx .SourceOverride = req .GetSourceOverride ()
185198
186- r = & rpc.CompileResponse {}
187199 defer func () {
188200 if p := builderCtx .BuildPath ; p != nil {
189201 r .BuildPath = p .String ()
@@ -196,18 +208,6 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
196208 }
197209 }()
198210
199- defer func () {
200- buildProperties := builderCtx .BuildProperties
201- if buildProperties == nil {
202- return
203- }
204- keys := buildProperties .Keys ()
205- sort .Strings (keys )
206- for _ , key := range keys {
207- r .BuildProperties = append (r .BuildProperties , key + "=" + buildProperties .Get (key ))
208- }
209- }()
210-
211211 if req .GetShowProperties () {
212212 // Just get build properties and exit
213213 compileErr := builder .RunParseHardware (builderCtx )
@@ -227,16 +227,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
227227 }
228228
229229 defer func () {
230- importedLibs := []* rpc.Library {}
231- for _ , lib := range builderCtx .ImportedLibraries {
232- rpcLib , err := lib .ToRPCLibrary ()
233- if err != nil {
234- msg := tr ("Error getting information for library %s" , lib .Name ) + ": " + err .Error () + "\n "
235- errStream .Write ([]byte (msg ))
236- }
237- importedLibs = append (importedLibs , rpcLib )
238- }
239- r .UsedLibraries = importedLibs
230+ appendUserLibraries (r , builderCtx , errStream )
240231 }()
241232
242233 // if it's a regular build, go on...
@@ -295,6 +286,32 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream
295286 return r , nil
296287}
297288
289+ func appendUserLibraries (r * rpc.CompileResponse , builderCtx * types.Context , errStream io.Writer ) {
290+ importedLibs := []* rpc.Library {}
291+ for _ , lib := range builderCtx .ImportedLibraries {
292+ rpcLib , err := lib .ToRPCLibrary ()
293+ if err != nil {
294+ msg := tr ("Error getting information for library %s" , lib .Name ) + ": " + err .Error () + "\n "
295+ errStream .Write ([]byte (msg ))
296+ }
297+ importedLibs = append (importedLibs , rpcLib )
298+ }
299+ r .UsedLibraries = importedLibs
300+ }
301+
302+ func appendBuildProperties (r * rpc.CompileResponse , builderCtx * types.Context ) bool {
303+ buildProperties := builderCtx .BuildProperties
304+ if buildProperties == nil {
305+ return true
306+ }
307+ keys := buildProperties .Keys ()
308+ sort .Strings (keys )
309+ for _ , key := range keys {
310+ r .BuildProperties = append (r .BuildProperties , key + "=" + buildProperties .Get (key ))
311+ }
312+ return false
313+ }
314+
298315// maybePurgeBuildCache runs the build files cache purge if the policy conditions are met.
299316func maybePurgeBuildCache () {
300317
0 commit comments