func loadinternal(name string) { found := 0 for i := 0; i < len(Ctxt.Libdir); i++ { if Linkshared { shlibname := fmt.Sprintf("%s/%s.shlibname", Ctxt.Libdir[i], name) if Debug['v'] != 0 { fmt.Fprintf(&Bso, "searching for %s.a in %s\n", name, shlibname) } if obj.Access(shlibname, obj.AEXIST) >= 0 { addlibpath(Ctxt, "internal", "internal", "", name, shlibname) found = 1 break } } pname := fmt.Sprintf("%s/%s.a", Ctxt.Libdir[i], name) if Debug['v'] != 0 { fmt.Fprintf(&Bso, "searching for %s.a in %s\n", name, pname) } if obj.Access(pname, obj.AEXIST) >= 0 { addlibpath(Ctxt, "internal", "internal", pname, name, "") found = 1 break } } if found == 0 { fmt.Fprintf(&Bso, "warning: unable to find %s.a\n", name) } }
func findpkg(name string) (file string, ok bool) { if islocalname(name) { if safemode != 0 || nolocalimports != 0 { return "", false } // try .a before .6. important for building libraries: // if there is an array.6 in the array.a library, // want to find all of array.a, not just array.6. file = fmt.Sprintf("%s.a", name) if obj.Access(file, 0) >= 0 { return file, true } file = fmt.Sprintf("%s.%c", name, Thearch.Thechar) if obj.Access(file, 0) >= 0 { return file, true } return "", false } // local imports should be canonicalized already. // don't want to see "encoding/../encoding/base64" // as different from "encoding/base64". var q string _ = q if path.Clean(name) != name { Yyerror("non-canonical import path %q (should be %q)", name, q) return "", false } for p := idirs; p != nil; p = p.link { file = fmt.Sprintf("%s/%s.a", p.dir, name) if obj.Access(file, 0) >= 0 { return file, true } file = fmt.Sprintf("%s/%s.%c", p.dir, name, Thearch.Thechar) if obj.Access(file, 0) >= 0 { return file, true } } if goroot != "" { suffix := "" suffixsep := "" if flag_installsuffix != "" { suffixsep = "_" suffix = flag_installsuffix } else if flag_race != 0 { suffixsep = "_" suffix = "race" } file = fmt.Sprintf("%s/pkg/%s_%s%s%s/%s.a", goroot, goos, goarch, suffixsep, suffix, name) if obj.Access(file, 0) >= 0 { return file, true } file = fmt.Sprintf("%s/pkg/%s_%s%s%s/%s.%c", goroot, goos, goarch, suffixsep, suffix, name, Thearch.Thechar) if obj.Access(file, 0) >= 0 { return file, true } } return "", false }