@@ -44,6 +44,8 @@ import (
44
44
"arduino.cc/builder/constants"
45
45
"arduino.cc/builder/gohasissues"
46
46
"arduino.cc/builder/i18n"
47
+ "arduino.cc/builder/props"
48
+ "arduino.cc/builder/types"
47
49
"arduino.cc/builder/utils"
48
50
"github.com/go-errors/errors"
49
51
)
@@ -170,85 +172,77 @@ func main() {
170
172
}
171
173
172
174
context := make (map [string ]interface {})
175
+ ctx := & types.Context {}
173
176
174
- buildOptions := make (map [string ]string )
175
177
if * buildOptionsFileFlag != "" {
178
+ buildOptions := make (props.PropertiesMap )
176
179
if _ , err := os .Stat (* buildOptionsFileFlag ); err == nil {
177
180
data , err := ioutil .ReadFile (* buildOptionsFileFlag )
178
181
if err != nil {
179
182
printCompleteError (err )
180
- defer os .Exit (1 )
181
- return
182
183
}
183
184
err = json .Unmarshal (data , & buildOptions )
184
185
if err != nil {
185
186
printCompleteError (err )
186
- defer os .Exit (1 )
187
- return
188
187
}
189
188
}
189
+ ctx .InjectBuildOptions (buildOptions )
190
190
}
191
191
192
- var err error
193
- printStackTrace := false
194
- err , printStackTrace = setContextSliceKeyOrLoadItFromOptions (context , hardwareFoldersFlag , buildOptions , constants .CTX_HARDWARE_FOLDERS , FLAG_HARDWARE , true )
195
- if err != nil {
196
- printError (err , printStackTrace )
197
- defer os .Exit (1 )
198
- return
192
+ // FLAG_HARDWARE
193
+ if hardwareFolders , err := toSliceOfUnquoted (hardwareFoldersFlag ); err != nil {
194
+ printCompleteError (err )
195
+ } else if len (hardwareFolders ) > 0 {
196
+ ctx .HardwareFolders = hardwareFolders
199
197
}
200
-
201
- err , printStackTrace = setContextSliceKeyOrLoadItFromOptions (context , toolsFoldersFlag , buildOptions , constants .CTX_TOOLS_FOLDERS , FLAG_TOOLS , true )
202
- if err != nil {
203
- printError (err , printStackTrace )
204
- defer os .Exit (1 )
205
- return
198
+ if len (ctx .HardwareFolders ) == 0 {
199
+ printErrorMessageAndFlagUsage (errors .New ("Parameter '" + FLAG_HARDWARE + "' is mandatory" ))
206
200
}
207
201
208
- err , printStackTrace = setContextSliceKeyOrLoadItFromOptions ( context , librariesFoldersFlag , buildOptions , constants . CTX_OTHER_LIBRARIES_FOLDERS , FLAG_LIBRARIES , false )
209
- if err != nil {
210
- printError (err , printStackTrace )
211
- defer os . Exit ( 1 )
212
- return
202
+ // FLAG_TOOLS
203
+ if toolsFolders , err := toSliceOfUnquoted ( toolsFoldersFlag ); err != nil {
204
+ printCompleteError (err )
205
+ } else if len ( toolsFolders ) > 0 {
206
+ ctx . ToolsFolders = toolsFolders
213
207
}
214
-
215
- err , printStackTrace = setContextSliceKeyOrLoadItFromOptions (context , librariesBuiltInFoldersFlag , buildOptions , constants .CTX_BUILT_IN_LIBRARIES_FOLDERS , FLAG_BUILT_IN_LIBRARIES , false )
216
- if err != nil {
217
- printError (err , printStackTrace )
218
- defer os .Exit (1 )
219
- return
208
+ if len (ctx .ToolsFolders ) == 0 {
209
+ printErrorMessageAndFlagUsage (errors .New ("Parameter '" + FLAG_TOOLS + "' is mandatory" ))
220
210
}
221
211
222
- err , printStackTrace = setContextSliceKeyOrLoadItFromOptions ( context , customBuildPropertiesFlag , buildOptions , constants . CTX_CUSTOM_BUILD_PROPERTIES , FLAG_PREFS , false )
223
- if err != nil {
224
- printError (err , printStackTrace )
225
- defer os . Exit ( 1 )
226
- return
212
+ // FLAG_LIBRARIES
213
+ if librariesFolders , err := toSliceOfUnquoted ( librariesFoldersFlag ); err != nil {
214
+ printCompleteError (err )
215
+ } else if len ( librariesFolders ) > 0 {
216
+ ctx . OtherLibrariesFolders = librariesFolders
227
217
}
228
218
229
- fqbn , err := gohasissues . Unquote ( * fqbnFlag )
230
- if err != nil {
219
+ // FLAG_BUILT_IN_LIBRARIES
220
+ if librariesBuiltInFolders , err := toSliceOfUnquoted ( librariesBuiltInFoldersFlag ); err != nil {
231
221
printCompleteError (err )
232
- defer os . Exit ( 1 )
233
- return
222
+ } else if len ( librariesBuiltInFolders ) > 0 {
223
+ ctx . BuiltInLibrariesFolders = librariesBuiltInFolders
234
224
}
235
225
236
- if fqbn == "" {
237
- fqbn = buildOptions [constants .CTX_FQBN ]
226
+ // FLAG_PREFS
227
+ if customBuildProperties , err := toSliceOfUnquoted (customBuildPropertiesFlag ); err != nil {
228
+ printCompleteError (err )
229
+ } else if len (customBuildProperties ) > 0 {
230
+ ctx .CustomBuildProperties = customBuildProperties
238
231
}
239
232
240
- if fqbn == "" {
233
+ // FLAG_FQBN
234
+ if fqbn , err := gohasissues .Unquote (* fqbnFlag ); err != nil {
235
+ printCompleteError (err )
236
+ } else if fqbn != "" {
237
+ ctx .FQBN = fqbn
238
+ }
239
+ if ctx .FQBN == "" {
241
240
printErrorMessageAndFlagUsage (errors .New ("Parameter '" + FLAG_FQBN + "' is mandatory" ))
242
- defer os .Exit (1 )
243
- return
244
241
}
245
- context [constants .CTX_FQBN ] = fqbn
246
242
247
243
buildPath , err := gohasissues .Unquote (* buildPathFlag )
248
244
if err != nil {
249
245
printCompleteError (err )
250
- defer os .Exit (1 )
251
- return
252
246
}
253
247
254
248
if buildPath != "" {
@@ -262,8 +256,6 @@ func main() {
262
256
err = utils .EnsureFolderExists (buildPath )
263
257
if err != nil {
264
258
printCompleteError (err )
265
- defer os .Exit (1 )
266
- return
267
259
}
268
260
}
269
261
context [constants .CTX_BUILD_PATH ] = buildPath
@@ -277,31 +269,26 @@ func main() {
277
269
sketchLocation , err := gohasissues .Unquote (sketchLocation )
278
270
if err != nil {
279
271
printCompleteError (err )
280
- defer os .Exit (1 )
281
- return
282
272
}
283
- context [ constants . CTX_SKETCH_LOCATION ] = sketchLocation
273
+ ctx . SketchLocation = sketchLocation
284
274
}
285
275
286
276
if * verboseFlag && * quietFlag {
287
277
* verboseFlag = false
288
278
* quietFlag = false
289
279
}
290
280
291
- context [ constants . CTX_VERBOSE ] = * verboseFlag
281
+ ctx . Verbose = * verboseFlag
292
282
293
- coreAPIVersion := ""
294
- if utils .MapStringStringHas (buildOptions , constants .CTX_BUILD_PROPERTIES_RUNTIME_IDE_VERSION ) {
295
- coreAPIVersion = buildOptions [constants .CTX_BUILD_PROPERTIES_RUNTIME_IDE_VERSION ]
296
- } else {
297
- // if deprecated 'ideVersionFlag' has been used...
283
+ // FLAG_IDE_VERSION
284
+ if ctx .ArduinoAPIVersion == "" {
285
+ // if deprecated "--ideVersionFlag" has been used...
298
286
if * coreAPIVersionFlag == "10600" && * ideVersionFlag != "10600" {
299
- coreAPIVersion = * ideVersionFlag
287
+ ctx . ArduinoAPIVersion = * ideVersionFlag
300
288
} else {
301
- coreAPIVersion = * coreAPIVersionFlag
289
+ ctx . ArduinoAPIVersion = * coreAPIVersionFlag
302
290
}
303
291
}
304
- context [constants .CTX_BUILD_PROPERTIES_RUNTIME_IDE_VERSION ] = coreAPIVersion
305
292
306
293
if * warningsLevelFlag != "" {
307
294
context [constants .CTX_WARNINGS_LEVEL ] = * warningsLevelFlag
@@ -312,25 +299,25 @@ func main() {
312
299
}
313
300
314
301
if * quietFlag {
315
- context [ constants . CTX_LOGGER ] = i18n.NoopLogger {}
302
+ ctx . SetLogger ( i18n.NoopLogger {})
316
303
} else if * loggerFlag == FLAG_LOGGER_MACHINE {
317
- context [ constants . CTX_LOGGER ] = i18n.MachineLogger {}
304
+ ctx . SetLogger ( i18n.MachineLogger {})
318
305
} else {
319
- context [ constants . CTX_LOGGER ] = i18n.HumanLogger {}
306
+ ctx . SetLogger ( i18n.HumanLogger {})
320
307
}
321
308
322
309
if * dumpPrefsFlag {
323
- err = builder .RunParseHardwareAndDumpBuildProperties (context )
310
+ err = builder .RunParseHardwareAndDumpBuildProperties (context , ctx )
324
311
} else if * preprocessFlag {
325
- err = builder .RunPreprocess (context )
312
+ err = builder .RunPreprocess (context , ctx )
326
313
} else {
327
314
if flag .NArg () == 0 {
328
315
fmt .Fprintln (os .Stderr , "Last parameter must be the sketch to compile" )
329
316
flag .Usage ()
330
317
defer os .Exit (1 )
331
318
return
332
319
}
333
- err = builder .RunBuilder (context )
320
+ err = builder .RunBuilder (context , ctx )
334
321
}
335
322
336
323
exitCode := 0
@@ -400,9 +387,11 @@ func printError(err error, printStackTrace bool) {
400
387
func printCompleteError (err error ) {
401
388
err = i18n .WrapError (err )
402
389
fmt .Fprintln (os .Stderr , err .(* errors.Error ).ErrorStack ())
390
+ os .Exit (1 )
403
391
}
404
392
405
393
func printErrorMessageAndFlagUsage (err error ) {
406
394
fmt .Fprintln (os .Stderr , err )
407
395
flag .Usage ()
396
+ os .Exit (1 )
408
397
}
0 commit comments