1
0
mirror of https://github.com/golang/go synced 2024-11-19 14:54:43 -07:00

document gopack.

change string in usage message.

R=rsc
http://go/go-review/1017023
This commit is contained in:
Rob Pike 2009-11-03 22:36:31 -08:00
parent c6dd8c18f0
commit 701440043b
2 changed files with 60 additions and 39 deletions

View File

@ -218,12 +218,12 @@ main(int argc, char *argv[])
case 'v': vflag = 1; break;
case 'x': setcom(xcmd); break;
default:
fprint(2, "ar: bad option `%c'\n", *cp);
fprint(2, "gopack: bad option `%c'\n", *cp);
exits("error");
}
}
if (aflag && bflag) {
fprint(2, "ar: only one of 'a' and 'b' can be specified\n");
fprint(2, "gopack: only one of 'a' and 'b' can be specified\n");
usage();
}
if(aflag || bflag) {
@ -235,7 +235,7 @@ main(int argc, char *argv[])
}
if(comfun == 0) {
if(uflag == 0) {
fprint(2, "ar: one of [%s] must be specified\n", man);
fprint(2, "gopack: one of [%s] must be specified\n", man);
usage();
}
setcom(rcmd);
@ -247,7 +247,7 @@ main(int argc, char *argv[])
cp = 0;
while (argc--) {
if (*argv) {
fprint(2, "ar: %s not found\n", *argv);
fprint(2, "gopack: %s not found\n", *argv);
cp = "error";
}
argv++;
@ -264,7 +264,7 @@ setcom(void (*fun)(char *, int, char**))
{
if(comfun != 0) {
fprint(2, "ar: only one of [%s] allowed\n", man);
fprint(2, "gopack: only one of [%s] allowed\n", man);
usage();
}
comfun = fun;
@ -316,7 +316,7 @@ rcmd(char *arname, int count, char **files)
bfile = Bopen(file, OREAD);
if (!bfile) {
if (count != 0) {
fprint(2, "ar: cannot open %s\n", file);
fprint(2, "gopack: cannot open %s\n", file);
errors++;
}
scanobj(&bar, ap, bp->size);
@ -325,7 +325,7 @@ rcmd(char *arname, int count, char **files)
}
d = dirfstat(Bfildes(bfile));
if(d == nil)
fprint(2, "ar: cannot stat %s: %r\n", file);
fprint(2, "gopack: cannot stat %s: %r\n", file);
if (uflag && (d==nil || d->mtime <= bp->date)) {
scanobj(&bar, ap, bp->size);
arcopy(&bar, ap, bp);
@ -350,7 +350,7 @@ rcmd(char *arname, int count, char **files)
files[i] = 0;
bfile = Bopen(file, OREAD);
if (!bfile) {
fprint(2, "ar: cannot open %s\n", file);
fprint(2, "gopack: cannot open %s\n", file);
errors++;
} else {
mesg('a', file);
@ -418,7 +418,7 @@ xcmd(char *arname, int count, char **files)
mode = strtoul(bp->hdr.mode, 0, 8) & 0777;
f = create(file, OWRITE, mode);
if(f < 0) {
fprint(2, "ar: %s cannot create\n", file);
fprint(2, "gopack: %s cannot create\n", file);
skip(&bar, bp->size);
} else {
mesg('x', file);
@ -512,7 +512,7 @@ mcmd(char *arname, int count, char **files)
}
close(fd);
if (poname[0] && aend == 0)
fprint(2, "ar: %s not found - files moved to end.\n", poname);
fprint(2, "gopack: %s not found - files moved to end.\n", poname);
install(arname, astart, amiddle, aend, 0);
}
void
@ -545,13 +545,13 @@ qcmd(char *arname, int count, char **files)
Biobuf *bfile;
if(aflag || bflag) {
fprint(2, "ar: abi not allowed with q\n");
fprint(2, "gopack: abi not allowed with q\n");
exits("error");
}
fd = openar(arname, ORDWR, 1);
if (fd < 0) {
if(!cflag)
fprint(2, "ar: creating %s\n", arname);
fprint(2, "gopack: creating %s\n", arname);
fd = arcreate(arname);
}
Binit(&bar, fd, OREAD);
@ -565,7 +565,7 @@ qcmd(char *arname, int count, char **files)
files[i] = 0;
bfile = Bopen(file, OREAD);
if(!bfile) {
fprint(2, "ar: cannot open %s\n", file);
fprint(2, "gopack: cannot open %s\n", file);
errors++;
} else {
mesg('q', file);
@ -598,25 +598,25 @@ scanobj(Biobuf *b, Arfile *ap, long size)
obj = objtype(b, 0);
if (obj < 0) { /* not an object file */
if (!gflag || strcmp(file, pkgdef) != 0) { /* don't clear allobj if it's pkg defs */
fprint(2, "ar: non-object file %s\n", file);
fprint(2, "gopack: non-object file %s\n", file);
allobj = 0;
}
d = dirfstat(Bfildes(b));
if (d != nil && d->length == 0)
fprint(2, "ar: zero length file %s\n", file);
fprint(2, "gopack: zero length file %s\n", file);
free(d);
Bseek(b, offset, 0);
return;
}
if (lastobj >= 0 && obj != lastobj) {
fprint(2, "ar: inconsistent object file %s\n", file);
fprint(2, "gopack: inconsistent object file %s\n", file);
allobj = 0;
Bseek(b, offset, 0);
return;
}
lastobj = obj;
if (!readar(b, obj, offset+size, 0)) {
fprint(2, "ar: invalid symbol reference in file %s\n", file);
fprint(2, "gopack: invalid symbol reference in file %s\n", file);
allobj = 0;
Bseek(b, offset, 0);
return;
@ -675,7 +675,7 @@ scanpkg(Biobuf *b, long size)
continue;
goto foundstart;
}
// fprint(2, "ar: warning: no package import section in %s\n", file);
// fprint(2, "gopack: warning: no package import section in %s\n", file);
return;
foundstart:
@ -711,7 +711,7 @@ foundstart:
end = Boffset(b); // before closing $$
}
bad:
fprint(2, "ar: bad package import section in %s\n", file);
fprint(2, "gopack: bad package import section in %s\n", file);
return;
foundend:
@ -724,7 +724,7 @@ foundend:
pkgstmt = arstrdup(pkg);
} else {
if (strcmp(pkg, pkgstmt) != 0) {
fprint(2, "ar: inconsistent package name\n");
fprint(2, "gopack: inconsistent package name\n");
return;
}
}
@ -733,7 +733,7 @@ foundend:
data = armalloc(pkgsize);
Bseek(b, start, 0);
if (Bread(b, data, pkgsize) != pkgsize) {
fprint(2, "ar: error reading package import section in %s\n", file);
fprint(2, "gopack: error reading package import section in %s\n", file);
return;
}
loadpkgdata(data, pkgsize);
@ -823,11 +823,11 @@ openar(char *arname, int mode, int errok)
fd = open(arname, mode);
if(fd >= 0){
if(read(fd, mbuf, SARMAG) != SARMAG || strncmp(mbuf, ARMAG, SARMAG)) {
fprint(2, "ar: %s not in archive format\n", arname);
fprint(2, "gopack: %s not in archive format\n", arname);
exits("error");
}
}else if(!errok){
fprint(2, "ar: cannot open %s: %r\n", arname);
fprint(2, "gopack: cannot open %s: %r\n", arname);
exits("error");
}
return fd;
@ -843,7 +843,7 @@ arcreate(char *arname)
fd = create(arname, OWRITE, 0664);
if(fd < 0){
fprint(2, "ar: cannot create %s: %r\n", arname);
fprint(2, "gopack: cannot create %s: %r\n", arname);
exits("error");
}
if(write(fd, ARMAG, SARMAG) != SARMAG)
@ -857,28 +857,28 @@ arcreate(char *arname)
void
wrerr(void)
{
perror("ar: write error");
perror("gopack: write error");
exits("error");
}
void
rderr(void)
{
perror("ar: read error");
perror("gopack: read error");
exits("error");
}
void
phaseerr(int offset)
{
fprint(2, "ar: phase error at offset %d\n", offset);
fprint(2, "gopack: phase error at offset %d\n", offset);
exits("error");
}
void
usage(void)
{
fprint(2, "usage: ar [%s][%s] archive files ...\n", opt, man);
fprint(2, "usage: gopack [%s][%s] archive files ...\n", opt, man);
exits("error");
}
@ -921,7 +921,7 @@ armove(Biobuf *b, Arfile *ap, Armember *bp)
d = dirfstat(Bfildes(b));
if (d == nil) {
fprint(2, "ar: cannot stat %s\n", file);
fprint(2, "gopack: cannot stat %s\n", file);
return;
}
trim(file, bp->hdr.name, sizeof(bp->hdr.name));
@ -990,7 +990,7 @@ install(char *arname, Arfile *astart, Arfile *amiddle, Arfile *aend, int createf
rfork(RFNOTEG);
if(createflag)
fprint(2, "ar: creating %s\n", arname);
fprint(2, "gopack: creating %s\n", arname);
fd = arcreate(arname);
if(allobj)
@ -1371,7 +1371,7 @@ page(Arfile *ap)
ap->fname = mktemp(ap->fname);
ap->fd = create(ap->fname, ORDWR|ORCLOSE, 0600);
if (ap->fd < 0) {
fprint(2,"ar: can't create temp file\n");
fprint(2,"gopack: can't create temp file\n");
return 0;
}
ap->paged = 1;
@ -1435,7 +1435,7 @@ armalloc(int n)
return cp;
}
} while (getspace());
fprint(2, "ar: out of memory\n");
fprint(2, "gopack: out of memory\n");
exits("malloc");
return 0;
}
@ -1527,7 +1527,7 @@ loadpkgdata(char *data, int len)
x->def = def;
x->file = file;
} else if(strcmp(x->prefix, prefix) != 0) {
fprint(2, "ar: conflicting definitions for %s\n", name);
fprint(2, "gopack: conflicting definitions for %s\n", name);
fprint(2, "%s:\t%s %s ...\n", x->file, x->prefix, name);
fprint(2, "%s:\t%s %s ...\n", file, prefix, name);
errors++;
@ -1536,7 +1536,7 @@ loadpkgdata(char *data, int len)
} else if((ndef = forwardfix(x->def, def)) != nil) {
x->def = ndef;
} else {
fprint(2, "ar: conflicting definitions for %s\n", name);
fprint(2, "gopack: conflicting definitions for %s\n", name);
fprint(2, "%s:\t%s %s %s\n", x->file, x->prefix, name, x->def);
fprint(2, "%s:\t%s %s %s\n", file, prefix, name, def);
errors++;
@ -1572,7 +1572,7 @@ parsepkgdata(char **pp, char *ep, char **prefixp, char **namep, char **defp)
else if(strncmp(p, "const ", 6) == 0)
p += 6;
else {
fprint(2, "ar: confused in pkg data near <<%.20s>>\n", p);
fprint(2, "gopack: confused in pkg data near <<%.20s>>\n", p);
errors++;
return -1;
}
@ -1605,7 +1605,7 @@ parsepkgdata(char **pp, char *ep, char **prefixp, char **namep, char **defp)
// indented we could do something more complicated,
// but for now just diagnose the problem and assume
// 6g will keep indenting for us.
fprint(2, "ar: %s: expected methods to be indented %p %p %.10s\n", file, edef, meth, meth);
fprint(2, "gopack: %s: expected methods to be indented %p %p %.10s\n", file, edef, meth, meth);
errors++;
return -1;
}
@ -1644,7 +1644,7 @@ parsemethod(char **pp, char *ep, char **methp)
while(p < ep && *p != '\n')
p++;
if(p >= ep) {
fprint(2, "ar: lost end of line in method definition\n");
fprint(2, "gopack: lost end of line in method definition\n");
*pp = ep;
return -1;
}
@ -1712,7 +1712,7 @@ getpkgdef(char **datap, int *lenp)
}
}
if(j != nimport) {
fprint(2, "ar: import count mismatch (internal error)\n");
fprint(2, "gopack: import count mismatch (internal error)\n");
exits("oops");
}
len += 3; // $$\n
@ -1742,7 +1742,7 @@ getpkgdef(char **datap, int *lenp)
}
p = strappend(p, "$$\n");
if(p != data+len) {
fprint(2, "ar: internal math error\n");
fprint(2, "gopack: internal math error\n");
exits("oops");
}

21
src/cmd/gopack/doc.go Normal file
View File

@ -0,0 +1,21 @@
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
The gopack program is a variant of the Plan 9 ar tool documented at
http://plan9.bell-labs.com/magic/man2html/1/ar
It adds a special Go-specific section __.PKGDEF that collects all the
Go type information from the files in the archive; that section is
used by the compiler when importing the package during compilation.
Usage: gopack [uvnbailo][mrxtdpq] archive files ...
The new option 'g' causes gopack to maintain the __.PKGDEF section
as files are added to the archive.
*/
package documentation