Skip to content

Commit 76dd0e0

Browse files
committed
set srcDir when importing dependencies
1 parent 4b53e1b commit 76dd0e0

File tree

3 files changed

+32
-20
lines changed

3 files changed

+32
-20
lines changed

build/build.go

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"go/parser"
88
"go/scanner"
99
"go/token"
10+
"go/types"
1011
"io/ioutil"
1112
"os"
1213
"os/exec"
@@ -58,6 +59,10 @@ func NewBuildContext(installSuffix string, buildTags []string) *build.Context {
5859
// If an error occurs, Import returns a non-nil error and a nil
5960
// *PackageData.
6061
func Import(path string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error) {
62+
return importWithSrcDir(path, "", mode, installSuffix, buildTags)
63+
}
64+
65+
func importWithSrcDir(path string, srcDir string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error) {
6166
buildContext := NewBuildContext(installSuffix, buildTags)
6267
if path == "runtime" || path == "syscall" {
6368
buildContext.GOARCH = build.Default.GOARCH
@@ -66,7 +71,7 @@ func Import(path string, mode build.ImportMode, installSuffix string, buildTags
6671
buildContext.InstallSuffix += "_" + installSuffix
6772
}
6873
}
69-
pkg, err := buildContext.Import(path, "", mode)
74+
pkg, err := buildContext.Import(path, srcDir, mode)
7075
if err != nil {
7176
return nil, err
7277
}
@@ -292,10 +297,10 @@ type PackageData struct {
292297
}
293298

294299
type Session struct {
295-
options *Options
296-
Packages map[string]*PackageData
297-
ImportContext *compiler.ImportContext
298-
Watcher *fsnotify.Watcher
300+
options *Options
301+
Packages map[string]*PackageData
302+
Types map[string]*types.Package
303+
Watcher *fsnotify.Watcher
299304
}
300305

301306
func NewSession(options *Options) *Session {
@@ -311,7 +316,7 @@ func NewSession(options *Options) *Session {
311316
options: options,
312317
Packages: make(map[string]*PackageData),
313318
}
314-
s.ImportContext = compiler.NewImportContext(s.BuildImportPath)
319+
s.Types = map[string]*types.Package{"unsafe": types.Unsafe}
315320
if options.Watch {
316321
if out, err := exec.Command("ulimit", "-n").Output(); err == nil {
317322
if n, err := strconv.Atoi(strings.TrimSpace(string(out))); err == nil && n < 1024 {
@@ -381,18 +386,22 @@ func (s *Session) BuildFiles(filenames []string, pkgObj string, packagePath stri
381386
if err := s.BuildPackage(pkg); err != nil {
382387
return err
383388
}
384-
if s.ImportContext.Packages["main"].Name() != "main" {
389+
if s.Types["main"].Name() != "main" {
385390
return fmt.Errorf("cannot build/run non-main package")
386391
}
387392
return s.WriteCommandPackage(pkg, pkgObj)
388393
}
389394

390395
func (s *Session) BuildImportPath(path string) (*compiler.Archive, error) {
396+
return s.buildImportPathWithSrcDir(path, "")
397+
}
398+
399+
func (s *Session) buildImportPathWithSrcDir(path string, srcDir string) (*compiler.Archive, error) {
391400
if pkg, found := s.Packages[path]; found {
392401
return pkg.Archive, nil
393402
}
394403

395-
pkg, err := Import(path, 0, s.InstallSuffix(), s.options.BuildTags)
404+
pkg, err := importWithSrcDir(path, srcDir, 0, s.InstallSuffix(), s.options.BuildTags)
396405
if s.Watcher != nil && pkg != nil { // add watch even on error
397406
s.Watcher.Add(pkg.Dir)
398407
}
@@ -477,7 +486,7 @@ func (s *Session) BuildPackage(pkg *PackageData) error {
477486
}
478487
defer objFile.Close()
479488

480-
pkg.Archive, err = compiler.ReadArchive(pkg.PkgObj, pkg.ImportPath, objFile, s.ImportContext.Packages)
489+
pkg.Archive, err = compiler.ReadArchive(pkg.PkgObj, pkg.ImportPath, objFile, s.Types)
481490
if err != nil {
482491
return err
483492
}
@@ -492,7 +501,13 @@ func (s *Session) BuildPackage(pkg *PackageData) error {
492501
return err
493502
}
494503

495-
pkg.Archive, err = compiler.Compile(pkg.ImportPath, files, fileSet, s.ImportContext, s.options.Minify)
504+
importContext := &compiler.ImportContext{
505+
Packages: s.Types,
506+
Import: func(path string) (*compiler.Archive, error) {
507+
return s.buildImportPathWithSrcDir(path, pkg.Dir)
508+
},
509+
}
510+
pkg.Archive, err = compiler.Compile(pkg.ImportPath, files, fileSet, importContext, s.options.Minify)
496511
if err != nil {
497512
return err
498513
}
@@ -575,7 +590,7 @@ func (s *Session) WriteCommandPackage(pkg *PackageData, pkgObj string) error {
575590
sourceMapFilter.MappingCallback = NewMappingCallback(m, s.options.GOROOT, s.options.GOPATH)
576591
}
577592

578-
deps, err := compiler.ImportDependencies(pkg.Archive, s.ImportContext.Import)
593+
deps, err := compiler.ImportDependencies(pkg.Archive, s.BuildImportPath)
579594
if err != nil {
580595
return err
581596
}

compiler/package.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,6 @@ type ImportContext struct {
9494
Import func(string) (*Archive, error)
9595
}
9696

97-
func NewImportContext(importFunc func(string) (*Archive, error)) *ImportContext {
98-
return &ImportContext{
99-
Packages: map[string]*types.Package{"unsafe": types.Unsafe},
100-
Import: importFunc,
101-
}
102-
}
103-
10497
// packageImporter implements go/types.Importer interface.
10598
type packageImporter struct {
10699
importContext *ImportContext

tool.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,11 @@ func main() {
373373
ImportPath: "main",
374374
},
375375
}
376-
mainPkg.Archive, err = compiler.Compile("main", []*ast.File{mainFile}, fset, s.ImportContext, options.Minify)
376+
importContext := &compiler.ImportContext{
377+
Packages: s.Types,
378+
Import: s.BuildImportPath,
379+
}
380+
mainPkg.Archive, err = compiler.Compile("main", []*ast.File{mainFile}, fset, importContext, options.Minify)
377381
if err != nil {
378382
return err
379383
}
@@ -557,7 +561,7 @@ func (fs serveCommandFileSystem) Open(name string) (http.File, error) {
557561
m := &sourcemap.Map{File: base + ".js"}
558562
sourceMapFilter.MappingCallback = gbuild.NewMappingCallback(m, fs.options.GOROOT, fs.options.GOPATH)
559563

560-
deps, err := compiler.ImportDependencies(pkg.Archive, s.ImportContext.Import)
564+
deps, err := compiler.ImportDependencies(pkg.Archive, s.BuildImportPath)
561565
if err != nil {
562566
return err
563567
}

0 commit comments

Comments
 (0)