@@ -17,8 +17,12 @@ package packagemanager
17
17
18
18
import (
19
19
"fmt"
20
+ "runtime"
20
21
21
22
"github.com/arduino/arduino-cli/arduino/cores"
23
+ "github.com/arduino/arduino-cli/executils"
24
+ "github.com/arduino/go-paths-helper"
25
+ "github.com/pkg/errors"
22
26
)
23
27
24
28
// InstallPlatform installs a specific release of a platform.
@@ -28,7 +32,40 @@ func (pm *PackageManager) InstallPlatform(platformRelease *cores.PlatformRelease
28
32
"hardware" ,
29
33
platformRelease .Platform .Architecture ,
30
34
platformRelease .Version .String ())
31
- return platformRelease .Resource .Install (pm .DownloadDir , pm .TempDir , destDir )
35
+ if err := platformRelease .Resource .Install (pm .DownloadDir , pm .TempDir , destDir ); err != nil {
36
+ return errors .Errorf ("installing platform %s: %s" , platformRelease , err )
37
+ }
38
+
39
+ // Perform post install
40
+ if platformRelease .IsTrusted {
41
+ if err := pm .runPostInstallScript (destDir ); err != nil {
42
+ return errors .Errorf ("running post install script for %s: %s" , platformRelease , err )
43
+ }
44
+ }
45
+
46
+ return nil
47
+ }
48
+
49
+ func (pm * PackageManager ) runPostInstallScript (destDir * paths.Path ) error {
50
+ postInstallFilename := "post_install.sh"
51
+ if runtime .GOOS == "windows" {
52
+ postInstallFilename = "post_install.bat"
53
+ }
54
+ postInstall := destDir .Join (postInstallFilename )
55
+ if postInstall .Exist () && ! postInstall .IsDir () {
56
+ cmd , err := executils .Command (postInstall .String ())
57
+ if err != nil {
58
+ return err
59
+ }
60
+ cmd .Dir = destDir .String ()
61
+ cmd .Stdout = nil
62
+ cmd .Stderr = nil
63
+ if err := cmd .Run (); err != nil {
64
+ return err
65
+ }
66
+ }
67
+ return nil
68
+
32
69
}
33
70
34
71
// IsManagedPlatformRelease returns true if the PlatforRelease is managed by the PackageManager
0 commit comments