瀏覽代碼

Work around crash issues when building OSX binary

Maran 11 年之前
父節點
當前提交
223432fa1e
共有 2 個文件被更改,包括 30 次插入2 次删除
  1. 29 2
      ethereal/flags.go
  2. 1 0
      utils/cmd.go

+ 29 - 2
ethereal/flags.go

@@ -1,13 +1,15 @@
 package main
 
 import (
+	"bitbucket.org/kardianos/osext"
 	"flag"
 	"fmt"
 	"github.com/ethereum/eth-go/ethlog"
-	"github.com/ethereum/go-ethereum/utils"
 	"os"
 	"os/user"
 	"path"
+	"path/filepath"
+	"runtime"
 )
 
 var Identifier string
@@ -34,6 +36,31 @@ var LogLevel int
 // flags specific to gui client
 var AssetPath string
 
+//TODO: If we re-use the one defined in cmd.go the binary osx image crashes. If somebody finds out why we can dry this up.
+func defaultAssetPath() string {
+	var assetPath string
+	// If the current working directory is the go-ethereum dir
+	// assume a debug build and use the source directory as
+	// asset directory.
+	pwd, _ := os.Getwd()
+	if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "ethereal") {
+		assetPath = path.Join(pwd, "assets")
+	} else {
+		switch runtime.GOOS {
+		case "darwin":
+			// Get Binary Directory
+			exedir, _ := osext.ExecutableFolder()
+			assetPath = filepath.Join(exedir, "../Resources")
+		case "linux":
+			assetPath = "/usr/share/ethereal"
+		case "windows":
+			assetPath = "./assets"
+		default:
+			assetPath = "."
+		}
+	}
+	return assetPath
+}
 func defaultDataDir() string {
 	usr, _ := user.Current()
 	return path.Join(usr.HomeDir, ".ethereal")
@@ -66,7 +93,7 @@ func Init() {
 	flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
 	flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
 
-	flag.StringVar(&AssetPath, "asset_path", utils.DefaultAssetPath(), "absolute path to GUI assets directory")
+	flag.StringVar(&AssetPath, "asset_path", defaultAssetPath(), "absolute path to GUI assets directory")
 
 	flag.Parse()
 }

+ 1 - 0
utils/cmd.go

@@ -191,6 +191,7 @@ func DefaultAssetPath() string {
 	}
 	return assetPath
 }
+
 func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, SecretFile string, ExportDir string, NonInteractive bool) {
 	ethcrypto.InitWords(DefaultAssetPath()) // Init mnemonic word list