add a couple statics

move doc script generation after all parsing is done
this is necessary to allow each pacakge to have it's own docs

CVS patchset: 407
CVS date: 1996/02/23 02:22:18
This commit is contained in:
root 1996-02-23 02:22:18 +00:00
parent 9ef003123c
commit 211f35618e
1 changed files with 46 additions and 22 deletions

View File

@ -34,14 +34,15 @@ static int read_line(FILE *f, char *line);
static int match_arch(char *s);
static int match_os(char *s);
static void free_packagerec(struct PackageRec *p);
static void generateNames(Spec s);
static void generateNamesAndDocScript(Spec s);
static void reset_spec(void);
static int find_preamble_line(char *line, char **s);
static int check_part(char *line, char **s);
int lookup_package(Spec s, struct PackageRec **pr, char *name, int flags);
static int lookup_package(Spec s, struct PackageRec **pr,
char *name, int flags);
static void dumpPackage(struct PackageRec *p, FILE *f);
char *chop_line(char *s);
void parseForDocFiles(Spec spec, char *line);
static char *chop_line(char *s);
static void parseForDocFiles(struct PackageRec *package, char *line);
/**********************************************************************/
/* */
@ -196,6 +197,7 @@ static struct PackageRec *new_packagerec(void)
p->header = newHeader();
p->filelist = newStringBuf();
p->files = -1; /* -1 means no %files, thus no package */
p->doc = newStringBuf();
p->next = NULL;
return p;
@ -205,6 +207,7 @@ void free_packagerec(struct PackageRec *p)
{
freeHeader(p->header);
freeStringBuf(p->filelist);
freeStringBuf(p->doc);
FREE(p->subname);
FREE(p->newname);
FREE(p->icon);
@ -301,23 +304,49 @@ int lookup_package(Spec s, struct PackageRec **pr, char *name, int flags)
return 1;
}
static void generateNames(Spec s)
static void generateNamesAndDocScript(Spec s)
{
struct PackageRec *package;
char buf[1024];
char fullname[1024];
char *name, *version, *release, *packageVersion, *packageRelease, *docs;
getEntry(s->packages->header, RPMTAG_VERSION, NULL,
(void *) &version, NULL);
getEntry(s->packages->header, RPMTAG_RELEASE, NULL,
(void *) &release, NULL);
package = s->packages;
while (package) {
if (package->subname) {
sprintf(buf, "%s-%s", s->name, package->subname);
addEntry(package->header, RPMTAG_NAME, STRING_TYPE, buf, 1);
name = buf;
} else if (package->newname) {
addEntry(package->header, RPMTAG_NAME, STRING_TYPE,
package->newname, 1);
name = package->newname;
} else {
/* Must be the main package */
addEntry(package->header, RPMTAG_NAME, STRING_TYPE, s->name, 1);
name = s->name;
}
addEntry(package->header, RPMTAG_NAME, STRING_TYPE, name, 1);
/* Handle subpackage version/release overrides */
if (!getEntry(package->header, RPMTAG_VERSION, NULL,
(void *) &packageVersion, NULL)) {
packageVersion = version;
}
if (!getEntry(package->header, RPMTAG_RELEASE, NULL,
(void *) &packageRelease, NULL)) {
packageRelease = release;
}
/* Generate the doc script */
appendStringBuf(s->doc, "DOCDIR=$RPM_ROOT_DIR/$RPM_DOC_DIR/");
sprintf(fullname, "%s-%s-%s", name, packageVersion, packageRelease);
appendLineStringBuf(s->doc, fullname);
appendLineStringBuf(s->doc, "rm -rf $DOCDIR");
docs = getStringBuf(package->doc);
appendLineStringBuf(s->doc, docs);
package = package->next;
}
}
@ -531,7 +560,7 @@ static int check_part(char *line, char **s)
return p->part;
}
char *chop_line(char *s)
static char *chop_line(char *s)
{
char *p, *e;
@ -547,7 +576,7 @@ char *chop_line(char *s)
return p;
}
void parseForDocFiles(Spec spec, char *line)
static void parseForDocFiles(struct PackageRec *package, char *line)
{
if (strncmp(line, "%doc", 4)) {
return;
@ -562,10 +591,10 @@ void parseForDocFiles(Spec spec, char *line)
return;
}
appendLineStringBuf(spec->doc, "mkdir -p $DOCDIR");
appendStringBuf(spec->doc, "cp -ar ");
appendStringBuf(spec->doc, line);
appendLineStringBuf(spec->doc, " $DOCDIR");
appendLineStringBuf(package->doc, "mkdir -p $DOCDIR");
appendStringBuf(package->doc, "cp -ar ");
appendStringBuf(package->doc, line);
appendLineStringBuf(package->doc, " $DOCDIR");
}
/**********************************************************************/
@ -604,11 +633,6 @@ Spec parseSpec(FILE *f, char *specfile)
sb = newStringBuf();
reset_spec(); /* Reset the parser */
appendLineStringBuf(spec->doc, "DOCDIR=$RPM_ROOT_DIR/$RPM_DOC_DIR/"
"$RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION"
"-$RPM_PACKAGE_RELEASE");
appendLineStringBuf(spec->doc, "rm -rf $DOCDIR");
cur_part = PREAMBLE_PART;
while ((x = read_line(f, buf)) > 0) {
line = buf;
@ -828,7 +852,7 @@ Spec parseSpec(FILE *f, char *specfile)
case FILES_PART:
cur_package->files++;
appendLineStringBuf(cur_package->filelist, line);
parseForDocFiles(spec, line);
parseForDocFiles(cur_package, line);
break;
default:
error(RPMERR_INTERNAL, "Bad part");
@ -839,7 +863,7 @@ Spec parseSpec(FILE *f, char *specfile)
return NULL;
}
generateNames(spec);
generateNamesAndDocScript(spec);
return spec;
}