7a90f6b538fc6703d07da748c0a5b5d4b20fd0a1
[src/xds/xds-server.git] / lib / xdsserver / sdk.go
1 /*
2  * Copyright (C) 2017 "IoT.bzh"
3  * Author Sebastien Douheret <sebastien@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package xdsserver
19
20 import (
21         "fmt"
22         "path/filepath"
23
24         "github.com/iotbzh/xds-server/lib/xsapiv1"
25         uuid "github.com/satori/go.uuid"
26 )
27
28 // CrossSDK Hold SDK config
29 type CrossSDK struct {
30         sdk xsapiv1.SDK
31 }
32
33 // NewCrossSDK creates a new instance of Syncthing
34 func NewCrossSDK(path string) (*CrossSDK, error) {
35         // Assume that we have .../<profile>/<version>/<arch>
36         s := CrossSDK{
37                 sdk: xsapiv1.SDK{Path: path},
38         }
39
40         s.sdk.Arch = filepath.Base(path)
41
42         d := filepath.Dir(path)
43         s.sdk.Version = filepath.Base(d)
44
45         d = filepath.Dir(d)
46         s.sdk.Profile = filepath.Base(d)
47
48         // Use V3 to ensure that we get same uuid on restart
49         s.sdk.ID = uuid.NewV3(uuid.FromStringOrNil("sdks"), s.sdk.Profile+"_"+s.sdk.Arch+"_"+s.sdk.Version).String()
50         s.sdk.Name = s.sdk.Arch + "  (" + s.sdk.Version + ")"
51
52         envFile := filepath.Join(path, "environment-setup*")
53         ef, err := filepath.Glob(envFile)
54         if err != nil {
55                 return nil, fmt.Errorf("Cannot retrieve environment setup file: %v", err)
56         }
57         if len(ef) != 1 {
58                 return nil, fmt.Errorf("No environment setup file found match %s", envFile)
59         }
60         s.sdk.EnvFile = ef[0]
61
62         return &s, nil
63 }
64
65 // Get Return SDK definition
66 func (s *CrossSDK) Get() *xsapiv1.SDK {
67         return &s.sdk
68 }
69
70 // GetEnvCmd returns the command used to initialized the environment
71 func (s *CrossSDK) GetEnvCmd() []string {
72         return []string{"source", s.sdk.EnvFile}
73 }