@@ -102,7 +102,7 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
102102
103103 // Install tools first
104104 for _ , tool := range toolsToInstall {
105- if err := pme .InstallTool (tool , taskCB ); err != nil {
105+ if err := pme .InstallTool (tool , taskCB , skipPostInstall ); err != nil {
106106 return err
107107 }
108108 }
@@ -171,7 +171,10 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
171171 if ! skipPostInstall {
172172 log .Info ("Running post_install script" )
173173 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 {
175178 taskCB (& rpc.TaskProgress {Message : tr ("WARNING cannot configure platform: %s" , err )})
176179 }
177180 } else {
@@ -222,22 +225,19 @@ func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease)
222225}
223226
224227// 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 {
230230 postInstallFilename := "post_install.sh"
231231 if runtime .GOOS == "windows" {
232232 postInstallFilename = "post_install.bat"
233233 }
234- postInstall := platformRelease . InstallDir .Join (postInstallFilename )
234+ postInstall := installDir .Join (postInstallFilename )
235235 if postInstall .Exist () && postInstall .IsNotDir () {
236236 cmd , err := executils .NewProcessFromPath (pme .GetEnvVarsForSpawnedProcess (), postInstall )
237237 if err != nil {
238238 return err
239239 }
240- cmd .SetDirFromPath (platformRelease . InstallDir )
240+ cmd .SetDirFromPath (installDir )
241241 if err := cmd .Run (); err != nil {
242242 return err
243243 }
@@ -299,7 +299,7 @@ func (pme *Explorer) UninstallPlatform(platformRelease *cores.PlatformRelease, t
299299}
300300
301301// 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 {
303303 log := pme .log .WithField ("Tool" , toolRelease )
304304
305305 if toolRelease .IsInstalled () {
@@ -325,6 +325,22 @@ func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.Task
325325 log .WithError (err ).Warn ("Cannot install tool" )
326326 return & arduino.FailedInstallError {Message : tr ("Cannot install tool %s" , toolRelease ), Cause : err }
327327 }
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+ }
328344 log .Info ("Tool installed" )
329345 taskCB (& rpc.TaskProgress {Message : tr ("%s installed" , toolRelease ), Completed : true })
330346
0 commit comments