Skip to content

Commit a251ee6

Browse files
committed
fixed damn symlinks
1 parent 8b3a8f4 commit a251ee6

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

tool.go

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ var typesConfig = &types.Config{
3030
Packages: make(map[string]*types.Package),
3131
}
3232

33+
var currentDirectory, goRoot, goPath string
34+
3335
func init() {
3436
typesConfig.Import = func(imports map[string]*types.Package, path string) (*types.Package, error) {
3537
if _, found := packages[path]; found {
@@ -47,6 +49,18 @@ func init() {
4749

4850
return imports[path], nil
4951
}
52+
53+
var err error
54+
currentDirectory, err = os.Getwd()
55+
if err != nil {
56+
fmt.Println(err)
57+
os.Exit(1)
58+
}
59+
currentDirectory, err = filepath.EvalSymlinks(currentDirectory)
60+
if err != nil {
61+
fmt.Println(err)
62+
os.Exit(1)
63+
}
5064
}
5165

5266
func buildImport(path string, mode build.ImportMode) (*build.Package, error) {
@@ -65,7 +79,7 @@ func buildImport(path string, mode build.ImportMode) (*build.Package, error) {
6579
if path == "hash/crc32" {
6680
pkg.GoFiles = []string{"crc32.go", "crc32_generic.go"}
6781
}
68-
if _, err := os.Stat(pkg.PkgObj); os.IsNotExist(err) && filepath.HasPrefix(pkg.PkgObj, build.Default.GOROOT) {
82+
if _, err := os.Stat(pkg.PkgObj); os.IsNotExist(err) && strings.HasPrefix(pkg.PkgObj, build.Default.GOROOT) {
6983
// fall back to GOPATH
7084
gopathPkgObj := build.Default.GOPATH + pkg.PkgObj[len(build.Default.GOROOT):]
7185
if _, err := os.Stat(gopathPkgObj); err == nil {
@@ -108,28 +122,24 @@ func tool() error {
108122
buildFlags.Parse(flag.Args()[1:])
109123

110124
if buildFlags.NArg() == 0 {
111-
wd, err := os.Getwd()
112-
if err != nil {
113-
return err
114-
}
115125
buildContext := &build.Context{
116126
GOROOT: build.Default.GOROOT,
117127
GOPATH: build.Default.GOPATH,
118128
GOOS: build.Default.GOOS,
119129
GOARCH: "js",
120130
Compiler: "gc",
121131
}
122-
buildPkg, err := buildContext.ImportDir(wd, 0)
132+
buildPkg, err := buildContext.ImportDir(currentDirectory, 0)
123133
if err != nil {
124134
return err
125135
}
126136
pkg := &Package{Package: buildPkg}
127-
pkg.ImportPath = wd
137+
pkg.ImportPath = currentDirectory
128138
if err := buildPackage(pkg); err != nil {
129139
return err
130140
}
131141
if pkgObj == "" {
132-
pkgObj = filepath.Base(wd) + ".js"
142+
pkgObj = filepath.Base(currentDirectory) + ".js"
133143
}
134144
if err := writeCommandPackage(pkg, pkgObj); err != nil {
135145
return err
@@ -178,15 +188,14 @@ func tool() error {
178188
installMode = true
179189
pkgs := installFlags.Args()
180190
if len(pkgs) == 0 {
181-
wd, err := os.Getwd()
191+
srcDir, err := filepath.EvalSymlinks(filepath.Join(build.Default.GOPATH, "src"))
182192
if err != nil {
183193
return err
184194
}
185-
srcDir := filepath.Join(build.Default.GOPATH, "src")
186-
if !filepath.HasPrefix(wd, srcDir) {
187-
return fmt.Errorf("gopherjs install: no install location for directory %s outside GOPATH", wd)
195+
if !strings.HasPrefix(currentDirectory, srcDir) {
196+
return fmt.Errorf("gopherjs install: no install location for directory %s outside GOPATH", currentDirectory)
188197
}
189-
pkgPath, err := filepath.Rel(srcDir, wd)
198+
pkgPath, err := filepath.Rel(srcDir, currentDirectory)
190199
if err != nil {
191200
return err
192201
}
@@ -367,15 +376,11 @@ The commands are:
367376
}
368377

369378
func buildFiles(filenames []string, pkgObj string) error {
370-
wd, err := os.Getwd()
371-
if err != nil {
372-
return err
373-
}
374379
pkg := &Package{
375380
Package: &build.Package{
376381
Name: "main",
377382
ImportPath: "main",
378-
Dir: wd,
383+
Dir: currentDirectory,
379384
GoFiles: filenames,
380385
},
381386
}
@@ -453,7 +458,6 @@ func buildPackage(pkg *Package) error {
453458
}
454459
}
455460

456-
wd, _ := os.Getwd()
457461
files := make([]*ast.File, 0)
458462
var errList translator.ErrorList
459463
for _, name := range pkg.GoFiles {
@@ -469,7 +473,7 @@ func buildPackage(pkg *Package) error {
469473
if err != nil {
470474
return err
471475
}
472-
if relname, err := filepath.Rel(wd, name); err == nil {
476+
if relname, err := filepath.Rel(currentDirectory, name); err == nil {
473477
name = relname
474478
if name[0] != '.' {
475479
name = "." + string(filepath.Separator) + name

0 commit comments

Comments
 (0)