39
38
reportToDashboard = flag.Bool("dashboard", true, "report public packages at "+dashboardURL)
40
39
logPkgs = flag.Bool("log", true, "log installed packages to $GOROOT/goinstall.log for use by -a")
41
40
update = flag.Bool("u", false, "update already-downloaded packages")
41
doInstall = flag.Bool("install", true, "build and install")
42
42
clean = flag.Bool("clean", false, "clean the package directory before installing")
43
nuke = flag.Bool("nuke", false, "clean the package directory and target before installing")
44
useMake = flag.Bool("make", true, "use make to build and install")
43
45
verbose = flag.Bool("v", false, "verbose")
160
162
fmt.Fprintf(os.Stderr, "\t%s\n", pkg)
165
parents[pkg] = parent
163
166
visit[pkg] = visiting
164
parents[pkg] = parent
166
vlogf("%s: visit\n", pkg)
168
171
// Check whether package is local or remote.
169
172
// If remote, download or update it.
170
proot, pkg, err := findPackageRoot(pkg)
173
tree, pkg, err := build.FindTree(pkg)
171
174
// Don't build the standard library.
172
if err == nil && proot.goroot && isStandardPath(pkg) {
175
if err == nil && tree.Goroot && isStandardPath(pkg) {
173
176
if parent == "" {
174
177
errorf("%s: can not goinstall the standard library\n", pkg)
176
vlogf("%s: skipping standard library\n", pkg)
179
printf("%s: skipping standard library\n", pkg)
181
183
// Download remote packages if not found or forced with -u flag.
182
184
remote := isRemote(pkg)
183
if remote && (err == ErrPackageNotFound || (err == nil && *update)) {
184
vlogf("%s: download\n", pkg)
185
err = download(pkg, proot.srcDir())
186
if remote && (err == build.ErrNotFound || (err == nil && *update)) {
187
printf("%s: download\n", pkg)
188
dashReport, err = download(pkg, tree.SrcDir())
188
191
errorf("%s: %v\n", pkg, err)
192
dir := filepath.Join(proot.srcDir(), pkg)
194
dir := filepath.Join(tree.SrcDir(), pkg)
194
196
// Install prerequisites.
195
dirInfo, err := scanDir(dir, parent == "")
197
dirInfo, err := build.ScanDir(dir, parent == "")
197
199
errorf("%s: %v\n", pkg, err)
201
if len(dirInfo.goFiles) == 0 {
202
if len(dirInfo.GoFiles)+len(dirInfo.CgoFiles) == 0 {
202
203
errorf("%s: package has no files\n", pkg)
206
for _, p := range dirInfo.imports {
206
for _, p := range dirInfo.Imports {
212
215
// Install this package.
214
isCmd := dirInfo.pkgName == "main"
215
if err := domake(dir, pkg, proot, isCmd); err != nil {
216
errorf("installing: %v\n", err)
217
} else if remote && *logPkgs {
218
// mark package as installed in $GOROOT/goinstall.log
217
err := domake(dir, pkg, tree, dirInfo.IsCommand())
219
errorf("%s: install: %v\n", pkg, err)
223
script, err := build.Build(tree, pkg, dirInfo)
225
errorf("%s: install: %v\n", pkg, err)
229
printf("%s: nuke\n", pkg)
232
printf("%s: clean\n", pkg)
237
printf("%s: install\n", pkg)
238
if err := script.Run(); err != nil {
239
errorf("%s: install: %v\n", pkg, err)
243
printf("%s: up-to-date\n", pkg)
248
maybeReportToDashboard(pkg)
251
// mark package as installed in $GOROOT/goinstall.log