6 static void doRmSource(Spec spec)
12 unlink(spec->specFile);
15 for (p = spec->sources; p != NULL; p = p->next) {
16 if (! (p->flags & RPMBUILD_ISNO)) {
17 const char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
23 for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
24 for (p = pkg->icon; p != NULL; p = p->next) {
25 if (! (p->flags & RPMBUILD_ISNO)) {
26 const char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
35 * The _preScript string is expanded to export values to a script environment.
38 static char *_preScriptEnvironment = "%{_preScriptEnvironment}";
40 static char *_preScriptChdir =
45 int doScript(Spec spec, int what, const char *name, StringBuf sb, int test)
49 const char *scriptName;
64 case RPMBUILD_INSTALL:
72 case RPMBUILD_RMBUILD:
75 case RPMBUILD_STRINGBUF:
79 if ((what != RPMBUILD_RMBUILD) && sb == NULL)
82 if (makeTempFile(spec->rootdir, &scriptName, &fd)) {
85 rpmError(RPMERR_SCRIPT, _("Unable to open temp file"));
89 (void)fchmod(Fileno(fd), 0600); /* XXX fubar on ufdio */
92 /* XXX FIXME: build/build.c Fdopen assertion failure, makeTempFile uses fdio */
93 xfd = Fdopen(fd, "w.fdio");
95 xfd = Fdopen(fd, "w.fpio");
99 strcpy(buf, _preScriptEnvironment);
100 expandMacros(spec, spec->macros, buf, sizeof(buf));
104 fprintf(fp, rpmIsVerbose() ? "set -x\n\n" : "exec > /dev/null\n\n");
106 /* XXX umask 022; cd %{_builddir} */
107 strcpy(buf, _preScriptChdir);
108 expandMacros(spec, spec->macros, buf, sizeof(buf));
111 if (what != RPMBUILD_PREP && what != RPMBUILD_RMBUILD) {
112 if (spec->buildSubdir)
113 fprintf(fp, "cd %s\n", spec->buildSubdir);
115 if (what == RPMBUILD_RMBUILD) {
116 if (spec->buildSubdir)
117 fprintf(fp, "rm -rf %s\n", spec->buildSubdir);
119 fprintf(fp, "%s", getStringBuf(sb));
120 fprintf(fp, "\nexit 0\n");
129 rpmMessage(RPMMESS_NORMAL, _("Executing: %s\n"), name);
130 if (!(pid = fork())) {
131 const char *buildShell = rpmGetPath("%{_buildshell}", NULL);
134 Chroot(spec->rootdir);
137 switch (urlIsURL(scriptName)) {
139 scriptName += sizeof("file://") - 1;
140 scriptName = strchr(scriptName, '/');
143 execl(buildShell, buildShell, "-e", scriptName, scriptName, NULL);
149 rpmError(RPMERR_SCRIPT, _("Exec of %s failed (%s)"), scriptName, name);
154 if (! WIFEXITED(status) || WEXITSTATUS(status)) {
155 rpmError(RPMERR_SCRIPT, _("Bad exit status from %s (%s)"),
161 return RPMERR_SCRIPT;
170 int buildSpec(Spec spec, int what, int test)
174 if (!spec->inBuildArchitectures && spec->buildArchitectureCount) {
175 /* When iterating over buildArchitectures, do the source */
176 /* packaging on the first run, and skip RMSOURCE altogether */
177 for (x = 0; x < spec->buildArchitectureCount; x++) {
178 if ((rc = buildSpec(spec->buildArchitectureSpecs[x],
179 (what & ~RPMBUILD_RMSOURCE) |
180 (x ? 0 : (what & RPMBUILD_PACKAGESOURCE)),
186 if ((what & RPMBUILD_PREP) &&
187 (rc = doScript(spec, RPMBUILD_PREP, NULL, NULL, test)))
190 if ((what & RPMBUILD_BUILD) &&
191 (rc = doScript(spec, RPMBUILD_BUILD, NULL, NULL, test)))
194 if ((what & RPMBUILD_INSTALL) &&
195 (rc = doScript(spec, RPMBUILD_INSTALL, NULL, NULL, test)))
198 if ((what & RPMBUILD_PACKAGESOURCE) &&
199 (rc = processSourceFiles(spec)))
202 if (((what & RPMBUILD_INSTALL) || (what & RPMBUILD_PACKAGEBINARY) ||
203 (what & RPMBUILD_FILECHECK)) &&
204 (rc = processBinaryFiles(spec, what & RPMBUILD_INSTALL, test)))
207 if (((what & RPMBUILD_PACKAGESOURCE) && !test) &&
208 (rc = packageSources(spec)))
211 if (((what & RPMBUILD_PACKAGEBINARY) && !test) &&
212 (rc = packageBinaries(spec)))
215 if ((what & RPMBUILD_CLEAN) &&
216 (rc = doScript(spec, RPMBUILD_CLEAN, NULL, NULL, test)))
219 if ((what & RPMBUILD_RMBUILD) &&
220 (rc = doScript(spec, RPMBUILD_RMBUILD, NULL, NULL, test)))
224 if (what & RPMBUILD_RMSOURCE)
227 if (what & RPMBUILD_RMSPEC)
228 unlink(spec->specFile);