6 static void doRmSource(Spec spec);
9 static void doRmSource(Spec spec)
14 unlink(spec->specFile);
16 for (p = spec->sources; p != NULL; p = p->next) {
17 if (! (p->flags & RPMBUILD_ISNO)) {
18 const char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
24 for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
25 for (p = pkg->icon; p != NULL; p = p->next) {
26 if (! (p->flags & RPMBUILD_ISNO)) {
27 const char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
36 * The _preScript string is expanded to export values to a script environment.
39 static char *_preScriptEnvironment = "%{_preScriptEnvironment}";
41 static char *_preScriptChdir =
46 int doScript(Spec spec, int what, const char *name, StringBuf sb, int test)
50 const char *scriptName;
65 case RPMBUILD_INSTALL:
73 case RPMBUILD_RMBUILD:
76 case RPMBUILD_STRINGBUF:
79 if ((what != RPMBUILD_RMBUILD) && sb == NULL) {
83 if (makeTempFile(NULL, &scriptName, &fd)) {
86 rpmError(RPMERR_SCRIPT, _("Unable to open temp file"));
89 (void)fchmod(fdFileno(fd), 0600);
90 f = fdFdopen(fd, "w");
92 strcpy(buf, _preScriptEnvironment);
93 expandMacros(spec, spec->macros, buf, sizeof(buf));
97 fprintf(f, rpmIsVerbose() ? "set -x\n\n" : "exec > /dev/null\n\n");
99 /* XXX umask 022; cd %{_builddir} */
100 strcpy(buf, _preScriptChdir);
101 expandMacros(spec, spec->macros, buf, sizeof(buf));
104 if (what != RPMBUILD_PREP && what != RPMBUILD_RMBUILD) {
105 if (spec->buildSubdir) {
106 fprintf(f, "cd %s\n", spec->buildSubdir);
109 if (what == RPMBUILD_RMBUILD) {
110 if (spec->buildSubdir) {
111 fprintf(f, "rm -rf %s\n", spec->buildSubdir);
114 fprintf(f, "%s", getStringBuf(sb));
116 fprintf(f, "\nexit 0\n");
125 rpmMessage(RPMMESS_NORMAL, _("Executing: %s\n"), name);
126 if (!(pid = fork())) {
127 buildShell = rpmGetVar(RPMVAR_BUILDSHELL);
128 execl(buildShell, buildShell, "-e", scriptName, scriptName, NULL);
129 rpmError(RPMERR_SCRIPT, _("Exec of %s failed (%s)"),
131 #if 0 /* XXX don't erase the failing script */
135 return RPMERR_SCRIPT;
138 if (! WIFEXITED(status) || WEXITSTATUS(status)) {
139 rpmError(RPMERR_SCRIPT, _("Bad exit status from %s (%s)"),
145 return RPMERR_SCRIPT;
154 int buildSpec(Spec spec, int what, int test)
158 if (!spec->inBuildArchitectures && spec->buildArchitectureCount) {
159 /* When iterating over buildArchitectures, do the source */
160 /* packaging on the first run, and skip RMSOURCE altogether */
162 while (x < spec->buildArchitectureCount) {
163 if ((rc = buildSpec(spec->buildArchitectureSpecs[x],
164 (what & ~RPMBUILD_RMSOURCE) |
165 (x ? 0 : (what & RPMBUILD_PACKAGESOURCE)),
172 if (what & RPMBUILD_PREP) {
173 if ((rc = doScript(spec, RPMBUILD_PREP, NULL, NULL, test))) {
177 if (what & RPMBUILD_BUILD) {
178 if ((rc = doScript(spec, RPMBUILD_BUILD, NULL, NULL, test))) {
182 if (what & RPMBUILD_INSTALL) {
183 if ((rc = doScript(spec, RPMBUILD_INSTALL, NULL, NULL, test))) {
188 if (what & RPMBUILD_PACKAGESOURCE) {
189 if ((rc = processSourceFiles(spec))) {
194 if ((what & RPMBUILD_INSTALL) || (what & RPMBUILD_PACKAGEBINARY) ||
195 (what & RPMBUILD_FILECHECK)) {
196 if ((rc = processBinaryFiles(spec, what & RPMBUILD_INSTALL,
202 if (what & RPMBUILD_PACKAGESOURCE && !test) {
203 if ((rc = packageSources(spec))) {
207 if (what & RPMBUILD_PACKAGEBINARY && !test) {
208 if ((rc = packageBinaries(spec))) {
213 if (what & RPMBUILD_CLEAN) {
214 if ((rc = doScript(spec, RPMBUILD_CLEAN, NULL, NULL, test))) {
218 if (what & RPMBUILD_RMBUILD) {
219 if ((rc = doScript(spec, RPMBUILD_RMBUILD, NULL, NULL, test))) {
225 if (what & RPMBUILD_RMSOURCE) {