00001
00006 #include "system.h"
00007
00008 #include <rpmio.h>
00009 #include <rpmiotypes.h>
00010 #include <rpmlog.h>
00011
00012 #include <rpmtypes.h>
00013 #include <rpmtag.h>
00014
00015 #include <rpmbuild.h>
00016
00017 #include "build.h"
00018
00019 #include <rpmcli.h>
00020
00021 #include "debug.h"
00022
00023
00024 struct rpmBuildArguments_s rpmBTArgs;
00025
00026 #define POPT_USECATALOG -1011
00027 #define POPT_NOLANG -1012
00028 #define POPT_RMSOURCE -1013
00029 #define POPT_RMBUILD -1014
00030
00031
00032 #define POPT_NOBUILD -1017
00033 #define POPT_SHORTCIRCUIT -1018
00034 #define POPT_RMSPEC -1019
00035 #define POPT_SIGN -1020
00036
00037 #define POPT_REBUILD 0x4220
00038 #define POPT_RECOMPILE 0x4320
00039 #define POPT_BA 0x6261
00040 #define POPT_BB 0x6262
00041 #define POPT_BC 0x6263
00042 #define POPT_BI 0x6269
00043 #define POPT_BL 0x626c
00044 #define POPT_BP 0x6270
00045 #define POPT_BS 0x6273
00046 #define POPT_BT 0x6274
00047 #define POPT_BF 0x6266
00048 #define POPT_TA 0x7461
00049 #define POPT_TB 0x7462
00050 #define POPT_TC 0x7463
00051 #define POPT_TI 0x7469
00052 #define POPT_TL 0x746c
00053 #define POPT_TP 0x7470
00054 #define POPT_TS 0x7473
00055
00056
00057 int _rpmbuildFlags = 3;
00058
00059
00060
00061 int noLang = 0;
00062
00063
00064
00065 static int signIt = 0;
00066
00067
00068 static int useCatalog = 0;
00069
00072 static void buildArgCallback( poptContext con,
00073 enum poptCallbackReason reason,
00074 const struct poptOption * opt,
00075 const char * arg,
00076 const void * data)
00077 {
00078 BTA_t rba = &rpmBTArgs;
00079
00080 switch (opt->val) {
00081 case POPT_REBUILD:
00082 case POPT_RECOMPILE:
00083 case POPT_BA:
00084 case POPT_BB:
00085 case POPT_BC:
00086 case POPT_BI:
00087 case POPT_BL:
00088 case POPT_BP:
00089 case POPT_BS:
00090 case POPT_BT:
00091 case POPT_BF:
00092 case POPT_TA:
00093 case POPT_TB:
00094 case POPT_TC:
00095 case POPT_TI:
00096 case POPT_TL:
00097 case POPT_TP:
00098 case POPT_TS:
00099 if (rba->buildMode == '\0' && rba->buildChar == '\0') {
00100 rba->buildMode = (char)((((unsigned int)opt->val) >> 8) & 0xff);
00101 rba->buildChar = (char)(opt->val & 0xff);
00102 }
00103 break;
00104
00105 case POPT_NOBUILD: rba->noBuild = 1; break;
00106 case POPT_NOLANG: rba->noLang = 1; break;
00107 case POPT_SHORTCIRCUIT: rba->shortCircuit = 1; break;
00108 case POPT_SIGN: rba->sign = 1; break;
00109 case POPT_USECATALOG: rba->useCatalog = 1; break;
00110 case POPT_RMSOURCE: rba->buildAmount |= RPMBUILD_RMSOURCE; break;
00111 case POPT_RMSPEC: rba->buildAmount |= RPMBUILD_RMSPEC; break;
00112 case POPT_RMBUILD: rba->buildAmount |= RPMBUILD_RMBUILD; break;
00113
00114 case RPMCLI_POPT_NODIGEST:
00115 rba->qva_flags |= VERIFY_DIGEST;
00116 break;
00117
00118 case RPMCLI_POPT_NOSIGNATURE:
00119 rba->qva_flags |= VERIFY_SIGNATURE;
00120 break;
00121
00122 case RPMCLI_POPT_NOHDRCHK:
00123 rba->qva_flags |= VERIFY_HDRCHK;
00124 break;
00125
00126 case RPMCLI_POPT_NODEPS:
00127 rba->noDeps = 1;
00128 break;
00129
00130 }
00131 }
00132
00135
00136
00137 struct poptOption rpmBuildPoptTable[] = {
00138
00139 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
00140 buildArgCallback, 0, NULL, NULL },
00141
00142
00143 { "bp", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_BP,
00144 N_("build through %prep (unpack sources and apply patches) from <specfile>"),
00145 N_("<specfile>") },
00146 { "bc", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_BC,
00147 N_("build through %build (%prep, then compile) from <specfile>"),
00148 N_("<specfile>") },
00149 { "bi", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_BI,
00150 N_("build through %install (%prep, %build, then install) from <specfile>"),
00151 N_("<specfile>") },
00152 { "bl", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_BL,
00153 N_("verify %files section from <specfile>"),
00154 N_("<specfile>") },
00155 { "ba", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_BA,
00156 N_("build source and binary packages from <specfile>"),
00157 N_("<specfile>") },
00158 { "bb", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_BB,
00159 N_("build binary package only from <specfile>"),
00160 N_("<specfile>") },
00161 { "bs", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_BS,
00162 N_("build source package only from <specfile>"),
00163 N_("<specfile>") },
00164
00165 { "bt", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BT,
00166 N_("track versions of sources from <specfile>"),
00167 N_("<specfile>") },
00168 { "bf", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BF,
00169 N_("fetch missing source and patch files"),
00170 N_("<specfile>") },
00171
00172 { "tp", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_TP,
00173 N_("build through %prep (unpack sources and apply patches) from <tarball>"),
00174 N_("<tarball>") },
00175 { "tc", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_TC,
00176 N_("build through %build (%prep, then compile) from <tarball>"),
00177 N_("<tarball>") },
00178 { "ti", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_TI,
00179 N_("build through %install (%prep, %build, then install) from <tarball>"),
00180 N_("<tarball>") },
00181 { "tl", 0, POPT_ARGFLAG_ONEDASH|POPT_ARGFLAG_DOC_HIDDEN, NULL, POPT_TL,
00182 N_("verify %files section from <tarball>"),
00183 N_("<tarball>") },
00184 { "ta", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_TA,
00185 N_("build source and binary packages from <tarball>"),
00186 N_("<tarball>") },
00187 { "tb", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_TB,
00188 N_("build binary package only from <tarball>"),
00189 N_("<tarball>") },
00190 { "ts", 0, POPT_ARGFLAG_ONEDASH, NULL, POPT_TS,
00191 N_("build source package only from <tarball>"),
00192 N_("<tarball>") },
00193
00194 { "rebuild", '\0', 0, NULL, POPT_REBUILD,
00195 N_("build binary package from <source package>"),
00196 N_("<source package>") },
00197 { "recompile", '\0', 0, NULL, POPT_RECOMPILE,
00198 N_("build through %install (%prep, %build, then install) from <source package>"),
00199 N_("<source package>") },
00200
00201 { "clean", '\0', 0, NULL, POPT_RMBUILD,
00202 N_("remove build tree when done"), NULL},
00203 { "nobuild", '\0', 0, NULL, POPT_NOBUILD,
00204 N_("do not execute any stages of the build"), NULL },
00205 { "nodeps", '\0', 0, NULL, RPMCLI_POPT_NODEPS,
00206 N_("do not verify build dependencies"), NULL },
00207 { "noautoprov", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN, &_rpmbuildFlags, 1,
00208 N_("disable automagic Provides: extraction"), NULL },
00209 { "noautoreq", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN, &_rpmbuildFlags, 2,
00210 N_("disable automagic Requires: extraction"), NULL },
00211 { "notinlsb", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &_rpmbuildFlags, 4,
00212 N_("disable tags forbidden by LSB"), NULL },
00213
00214 { "nodigest", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NODIGEST,
00215 N_("don't verify package digest(s)"), NULL },
00216 { "nohdrchk", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOHDRCHK,
00217 N_("don't verify database header(s) when retrieved"), NULL },
00218 { "nosignature", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOSIGNATURE,
00219 N_("don't verify package signature(s)"), NULL },
00220
00221 { "nolang", '\0', POPT_ARGFLAG_DOC_HIDDEN, &noLang, POPT_NOLANG,
00222 N_("do not accept i18n msgstr's from specfile"), NULL},
00223 { "rmsource", '\0', 0, NULL, POPT_RMSOURCE,
00224 N_("remove sources when done"), NULL},
00225 { "rmspec", '\0', 0, NULL, POPT_RMSPEC,
00226 N_("remove specfile when done"), NULL},
00227 { "short-circuit", '\0', 0, NULL, POPT_SHORTCIRCUIT,
00228 N_("skip straight to specified stage (only for c,i)"), NULL },
00229 { "sign", '\0', POPT_ARGFLAG_DOC_HIDDEN, &signIt, POPT_SIGN,
00230 N_("generate PGP/GPG signature"), NULL },
00231 { "target", '\0', POPT_ARG_STRING, NULL, RPMCLI_POPT_TARGETPLATFORM,
00232 N_("override target platform"), N_("CPU-VENDOR-OS") },
00233 { "usecatalog", '\0', POPT_ARGFLAG_DOC_HIDDEN, &useCatalog, POPT_USECATALOG,
00234 N_("look up i18n strings in specfile catalog"), NULL},
00235
00236 POPT_TABLEEND
00237 };
00238