+// _createNewCrossSDK Private function to create a new Cross SDK
+func (s *SDKs) _createNewCrossSDK(sdk xsapiv1.SDK, scriptDir string, installing bool, force bool) (*CrossSDK, error) {
+
+ cSdk, err := NewCrossSDK(s.Context, sdk, scriptDir)
+ if err != nil {
+ return cSdk, err
+ }
+
+ // Allow to overwrite not installed SDK or when force is set
+ if _, exist := s.Sdks[cSdk.sdk.ID]; exist {
+ if !force && cSdk.sdk.Path != "" && common.Exists(cSdk.sdk.Path) {
+ return cSdk, fmt.Errorf("SDK ID %s already installed in %s", cSdk.sdk.ID, cSdk.sdk.Path)
+ }
+ if !force && cSdk.sdk.Status != xsapiv1.SdkStatusNotInstalled {
+ return cSdk, fmt.Errorf("Duplicate SDK ID %s (use force to overwrite)", cSdk.sdk.ID)
+ }
+ }
+
+ // Sanity check
+ errMsg := "Invalid SDK definition "
+ if installing && cSdk.sdk.Path == "" {
+ return cSdk, fmt.Errorf(errMsg + "(path not set)")
+ }
+ if installing && cSdk.sdk.URL == "" {
+ return cSdk, fmt.Errorf(errMsg + "(url not set)")
+ }
+
+ // Add to list
+ s.Sdks[cSdk.sdk.ID] = cSdk
+
+ return cSdk, err
+}
+