rpm  4.5
parseBuildInstallClean.c
Go to the documentation of this file.
1 
5 #include "system.h"
6 
7 #include "rpmbuild.h"
8 #include "debug.h"
9 
10 /*@access StringBuf @*/
11 
12 /*@-boundswrite@*/
14 {
15  int nextPart, rc;
16  StringBuf *sbp = NULL;
17  const char *name = NULL;
18 
19  /*@-branchstate@*/
20  if (parsePart == PART_BUILD) {
21  sbp = &spec->build;
22  name = "%build";
23  } else if (parsePart == PART_INSTALL) {
24  sbp = &spec->install;
25  name = "%install";
26  } else if (parsePart == PART_CHECK) {
27  sbp = &spec->check;
28  name = "%check";
29  } else if (parsePart == PART_CLEAN) {
30  sbp = &spec->clean;
31  name = "%clean";
32  }
33  /*@=branchstate@*/
34 
35  if (*sbp != NULL) {
36  rpmError(RPMERR_BADSPEC, _("line %d: second %s\n"),
37  spec->lineNum, name);
38  return RPMERR_BADSPEC;
39  }
40 
41  *sbp = newStringBuf();
42 
43  /* Make sure the buildroot is removed where needed. */
44  if (parsePart == PART_INSTALL) {
45  const char * s = rpmExpand("%{!?__spec_install_pre:%{?buildroot:rm -rf '%{buildroot}'\n}}\n", NULL);
46  if (s && *s)
47  appendStringBuf(*sbp, s);
48  s = _free(s);
49  } else if (parsePart == PART_CLEAN) {
50  const char * s = rpmExpand("%{?__spec_clean_body}%{!?__spec_clean_body:%{?buildroot:rm -rf '%{buildroot}'\n}}\n", NULL);
51  if (s && *s)
52  appendStringBuf(*sbp, s);
53  s = _free(s);
54  }
55 
56  /* There are no options to %build, %install, %check, or %clean */
57  if ((rc = readLine(spec, STRIP_NOTHING)) > 0)
58  return PART_NONE;
59  if (rc)
60  return rc;
61 
62  while (! (nextPart = isPart(spec->line))) {
63  if (sbp)
64  appendStringBuf(*sbp, spec->line);
65  if ((rc = readLine(spec, STRIP_NOTHING)) > 0)
66  return PART_NONE;
67  if (rc)
68  return rc;
69  }
70 
71  return nextPart;
72 }
73 /*@=boundswrite@*/