00001 00005 #include "system.h" 00006 00007 #include "rpmbuild.h" 00008 #include "debug.h" 00009 00010 /*@access StringBuf @*/ 00011 00012 /*@-boundswrite@*/ 00013 int parseBuildInstallClean(Spec spec, rpmParseState parsePart) 00014 { 00015 int nextPart, rc; 00016 StringBuf *sbp = NULL; 00017 const char *name = NULL; 00018 00019 /*@-branchstate@*/ 00020 if (parsePart == PART_BUILD) { 00021 sbp = &(spec->build); 00022 name = "%build"; 00023 } else if (parsePart == PART_INSTALL) { 00024 sbp = &(spec->install); 00025 name = "%install"; 00026 } else if (parsePart == PART_CLEAN) { 00027 sbp = &(spec->clean); 00028 name = "%clean"; 00029 } 00030 /*@=branchstate@*/ 00031 00032 if (*sbp != NULL) { 00033 rpmError(RPMERR_BADSPEC, _("line %d: second %s\n"), 00034 spec->lineNum, name); 00035 return RPMERR_BADSPEC; 00036 } 00037 00038 *sbp = newStringBuf(); 00039 00040 /* There are no options to %build, %install, or %clean */ 00041 if ((rc = readLine(spec, STRIP_NOTHING)) > 0) 00042 return PART_NONE; 00043 if (rc) 00044 return rc; 00045 00046 while (! (nextPart = isPart(spec->line))) { 00047 appendStringBuf(*sbp, spec->line); 00048 if ((rc = readLine(spec, STRIP_NOTHING)) > 0) 00049 return PART_NONE; 00050 if (rc) 00051 return rc; 00052 } 00053 00054 return nextPart; 00055 } 00056 /*@=boundswrite@*/