@@ -102,7 +102,7 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
102
102
103
103
// Install tools first
104
104
for _ , tool := range toolsToInstall {
105
- if err := pme .InstallTool (tool , taskCB ); err != nil {
105
+ if err := pme .InstallTool (tool , taskCB , skipPostInstall ); err != nil {
106
106
return err
107
107
}
108
108
}
@@ -171,7 +171,10 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
171
171
if ! skipPostInstall {
172
172
log .Info ("Running post_install script" )
173
173
taskCB (& rpc.TaskProgress {Message : tr ("Configuring platform." )})
174
- if err := pme .RunPostInstallScript (platformRelease ); err != nil {
174
+ if ! platformRelease .IsInstalled () {
175
+ return errors .New (tr ("platform not installed" ))
176
+ }
177
+ if err := pme .RunPostInstallScript (platformRelease .InstallDir ); err != nil {
175
178
taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure platform: %s" , err )})
176
179
}
177
180
} else {
@@ -222,22 +225,19 @@ func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease)
222
225
}
223
226
224
227
// RunPostInstallScript runs the post_install.sh (or post_install.bat) script for the
225
- // specified platformRelease.
226
- func (pme * Explorer ) RunPostInstallScript (platformRelease * cores.PlatformRelease ) error {
227
- if ! platformRelease .IsInstalled () {
228
- return errors .New (tr ("platform not installed" ))
229
- }
228
+ // specified platformRelease or toolRelease.
229
+ func (pme * Explorer ) RunPostInstallScript (installDir * paths.Path ) error {
230
230
postInstallFilename := "post_install.sh"
231
231
if runtime .GOOS == "windows" {
232
232
postInstallFilename = "post_install.bat"
233
233
}
234
- postInstall := platformRelease . InstallDir .Join (postInstallFilename )
234
+ postInstall := installDir .Join (postInstallFilename )
235
235
if postInstall .Exist () && postInstall .IsNotDir () {
236
236
cmd , err := executils .NewProcessFromPath (pme .GetEnvVarsForSpawnedProcess (), postInstall )
237
237
if err != nil {
238
238
return err
239
239
}
240
- cmd .SetDirFromPath (platformRelease . InstallDir )
240
+ cmd .SetDirFromPath (installDir )
241
241
if err := cmd .Run (); err != nil {
242
242
return err
243
243
}
@@ -299,7 +299,7 @@ func (pme *Explorer) UninstallPlatform(platformRelease *cores.PlatformRelease, t
299
299
}
300
300
301
301
// InstallTool installs a specific release of a tool.
302
- func (pme * Explorer ) InstallTool (toolRelease * cores.ToolRelease , taskCB rpc.TaskProgressCB ) error {
302
+ func (pme * Explorer ) InstallTool (toolRelease * cores.ToolRelease , taskCB rpc.TaskProgressCB , skipPostInstall bool ) error {
303
303
log := pme .log .WithField ("Tool" , toolRelease )
304
304
305
305
if toolRelease .IsInstalled () {
@@ -325,6 +325,22 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task
325
325
log .WithError (err ).Warn ("Cannot install tool" )
326
326
return & arduino.FailedInstallError {Message : tr ("Cannot install tool %s" , toolRelease ), Cause : err }
327
327
}
328
+ if d , err := destDir .Abs (); err == nil {
329
+ toolRelease .InstallDir = d
330
+ } else {
331
+ return err
332
+ }
333
+ // Perform post install
334
+ if ! skipPostInstall {
335
+ log .Info ("Running tool post_install script" )
336
+ taskCB (& rpc.TaskProgress {Message : tr ("Configuring tool." )})
337
+ if err := pme .RunPostInstallScript (toolRelease .InstallDir ); err != nil {
338
+ taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure tool: %s" , err )})
339
+ }
340
+ } else {
341
+ log .Info ("Skipping tool configuration." )
342
+ taskCB (& rpc.TaskProgress {Message : tr ("Skipping tool configuration." )})
343
+ }
328
344
log .Info ("Tool installed" )
329
345
taskCB (& rpc.TaskProgress {Message : tr ("%s installed" , toolRelease ), Completed : true })
330
346
0 commit comments