[4.0] Use strip (instead of eu-strip) to support --strip-debug of *.so at build time
[platform/upstream/rpm.git] / rpmbuild.c
index 6d3ad90..4fb4289 100644 (file)
@@ -49,11 +49,11 @@ static struct rpmBuildArguments_s rpmBTArgs;
 extern int _fsm_debug;
 
 static rpmSpecFlags spec_flags = 0;    /*!< Bit(s) to control spec parsing. */
-static rpmVerifyFlags qva_flags = 0;   /*!< Bit(s) to control verification */
 static int noDeps = 0;                 /*!< from --nodeps */
 static int shortCircuit = 0;           /*!< from --short-circuit */
 static char buildMode = 0;             /*!< Build mode (one of "btBC") */
 static char buildChar = 0;             /*!< Build stage (one of "abcilps ") */
+static rpmBuildFlags nobuildAmount = 0;        /*!< Build stage disablers */
 static ARGV_t build_targets = NULL;    /*!< Target platform(s) */
 
 static void buildArgCallback( poptContext con,
@@ -105,18 +105,6 @@ static void buildArgCallback( poptContext con,
        argvSplit(&build_targets, arg, ",");
        break;
 
-    case RPMCLI_POPT_NODIGEST:
-       qva_flags |= VERIFY_DIGEST;
-       break;
-
-    case RPMCLI_POPT_NOSIGNATURE:
-       qva_flags |= VERIFY_SIGNATURE;
-       break;
-
-    case RPMCLI_POPT_NOHDRCHK:
-       qva_flags |= VERIFY_HDRCHK;
-       break;
-
     case RPMCLI_POPT_FORCE:
        spec_flags |= RPMSPEC_FORCE;
        break;
@@ -195,12 +183,10 @@ static struct poptOption rpmBuildPoptTable[] = {
        N_("generate package header(s) compatible with (legacy) rpm v3 packaging"),
        NULL},
 
- { "nodigest", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NODIGEST,
-        N_("don't verify package digest(s)"), NULL },
- { "nohdrchk", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NOHDRCHK,
-        N_("don't verify database header(s) when retrieved"), NULL },
- { "nosignature", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NOSIGNATURE,
-        N_("don't verify package signature(s)"), NULL },
+ { "noclean", '\0', POPT_BIT_SET, &nobuildAmount, RPMBUILD_CLEAN,
+       N_("do not execute %clean stage of the build"), NULL },
+ { "nocheck", '\0', POPT_BIT_SET, &nobuildAmount, RPMBUILD_CHECK,
+       N_("do not execute %check stage of the build"), NULL },
 
  { "nolang", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_NOLANG,
        N_("do not accept i18N msgstr's from specfile"), NULL},
@@ -242,30 +228,17 @@ static struct poptOption optionsTable[] = {
    POPT_TABLEEND
 };
 
-static int checkSpec(rpmts ts, Header h)
+static int checkSpec(rpmts ts, rpmSpec spec)
 {
-    rpmps ps;
     int rc;
+    rpmps ps = rpmSpecCheckDeps(ts, spec);
 
-    if (!headerIsEntry(h, RPMTAG_REQUIRENAME)
-     && !headerIsEntry(h, RPMTAG_CONFLICTNAME))
-       return 0;
-
-    rc = rpmtsAddInstallElement(ts, h, NULL, 0, NULL);
-
-    rc = rpmtsCheck(ts);
-
-    ps = rpmtsProblems(ts);
-    if (rc == 0 && rpmpsNumProblems(ps) > 0) {
+    if (ps) {
        rpmlog(RPMLOG_ERR, _("Failed build dependencies:\n"));
        rpmpsPrint(NULL, ps);
-       rc = 1;
     }
-    ps = rpmpsFree(ps);
-
-    /* XXX nuke the added package. */
-    rpmtsClean(ts);
-
+    rc = (ps != NULL);
+    rpmpsFree(ps);
     return rc;
 }
 
@@ -278,7 +251,7 @@ static int isSpecFile(const char * specfile)
     int checking;
 
     f = fopen(specfile, "r");
-    if (f == NULL || ferror(f)) {
+    if (f == NULL) {
        rpmlog(RPMLOG_ERR, _("Unable to open spec file %s: %s\n"),
                specfile, strerror(errno));
        return 0;
@@ -322,7 +295,7 @@ static char * getTarSpec(const char *arg)
     char *specDir;
     char *specBase;
     char *tmpSpecFile;
-    const char **try;
+    const char **spec;
     char tarbuf[BUFSIZ];
     int gotspec = 0, res;
     static const char *tryspec[] = { "Specfile", "\\*.spec", NULL };
@@ -332,12 +305,12 @@ static char * getTarSpec(const char *arg)
 
     (void) close(mkstemp(tmpSpecFile));
 
-    for (try = tryspec; *try != NULL; try++) {
+    for (spec = tryspec; *spec != NULL; spec++) {
        FILE *fp;
        char *cmd;
 
        cmd = rpmExpand("%{uncompress: ", arg, "} | ",
-                       "%{__tar} xOvf - --wildcards ", *try,
+                       "%{__tar} xOvf - --wildcards ", *spec,
                        " 2>&1 > ", tmpSpecFile, NULL);
 
        if (!(fp = popen(cmd, "r"))) {
@@ -400,10 +373,6 @@ static int buildForTarget(rpmts ts, const char * arg, BTA_t ba)
     int justRm = ((buildAmount & ~(RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)) == 0);
     rpmSpecFlags specFlags = spec_flags;
 
-#ifndef        DYING
-    rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS);
-#endif
-
     if (ba->buildRootOverride)
        buildRootURL = rpmGenPath(NULL, ba->buildRootOverride, NULL);
 
@@ -439,7 +408,7 @@ static int buildForTarget(rpmts ts, const char * arg, BTA_t ba)
     if (*specFile != '/') {
        char *cwd = rpmGetCwd();
        char *s = NULL;
-       rasprintf(&s, "%s/%s", cwd, arg);
+       rasprintf(&s, "%s/%s", cwd, specFile);
        free(cwd);
        free(specFile);
        specFile = s;
@@ -481,11 +450,11 @@ static int buildForTarget(rpmts ts, const char * arg, BTA_t ba)
     }
 
     /* Check build prerequisites if necessary, unless disabled */
-    if (!justRm && !noDeps && checkSpec(ts, spec->sourceHeader)) {
+    if (!justRm && !noDeps && checkSpec(ts, spec)) {
        goto exit;
     }
 
-    if (rpmSpecBuild(ba, spec)) {
+    if (rpmSpecBuild(spec, ba)) {
        goto exit;
     }
     
@@ -509,11 +478,11 @@ static int build(rpmts ts, const char * arg, BTA_t ba, const char * rcfile)
     rpmVSFlags vsflags, ovsflags;
 
     vsflags = rpmExpandNumeric("%{_vsflags_build}");
-    if (qva_flags & VERIFY_DIGEST)
+    if (rpmcliQueryFlags & VERIFY_DIGEST)
        vsflags |= _RPMVSF_NODIGESTS;
-    if (qva_flags & VERIFY_SIGNATURE)
+    if (rpmcliQueryFlags & VERIFY_SIGNATURE)
        vsflags |= _RPMVSF_NOSIGNATURES;
-    if (qva_flags & VERIFY_HDRCHK)
+    if (rpmcliQueryFlags & VERIFY_HDRCHK)
        vsflags |= RPMVSF_NOHDRCHK;
     ovsflags = rpmtsSetVSFlags(ts, vsflags);
 
@@ -544,7 +513,7 @@ static int build(rpmts ts, const char * arg, BTA_t ba, const char * rcfile)
     }
 
 exit:
-    vsflags = rpmtsSetVSFlags(ts, ovsflags);
+    rpmtsSetVSFlags(ts, ovsflags);
     /* Restore original configuration. */
     rpmFreeMacros(NULL);
     rpmFreeRpmrc();
@@ -600,6 +569,7 @@ int main(int argc, char *argv[])
            ba->buildAmount |= RPMBUILD_CLEAN;
            ba->buildAmount |= RPMBUILD_RMBUILD;
        }
+       ba->buildAmount &= ~(nobuildAmount);
 
        while ((pkg = poptGetArg(optCon))) {
            char * specFile = NULL;
@@ -647,6 +617,7 @@ int main(int argc, char *argv[])
            ba->buildAmount |= RPMBUILD_PACKAGESOURCE;
            break;
        }
+       ba->buildAmount &= ~(nobuildAmount);
 
        while ((pkg = poptGetArg(optCon))) {
            ba->rootdir = rpmcliRootDir;
@@ -660,10 +631,11 @@ int main(int argc, char *argv[])
        break;
     }
 
-    ts = rpmtsFree(ts);
-    finishPipe();
-    ba->buildRootOverride = _free(ba->buildRootOverride);
-    build_targets = argvFree(build_targets);
+    rpmtsFree(ts);
+    if (finishPipe())
+       ec = EXIT_FAILURE;
+    free(ba->buildRootOverride);
+    argvFree(build_targets);
 
     rpmcliFini(optCon);