11 #define _RPMEVR_INTERNAL
22 const char *script,
const char *
prog)
36 index = last->
index + 1;
87 const char **progArgv =
NULL;
89 char *partname =
NULL;
116 tagflags = RPMSENSE_SCRIPT_PRE;
122 tagflags = RPMSENSE_SCRIPT_POST;
128 tagflags = RPMSENSE_SCRIPT_PREUN;
134 tagflags = RPMSENSE_SCRIPT_POSTUN;
136 partname =
"%postun";
142 partname =
"%pretrans";
148 partname =
"%posttrans";
152 tagflags = RPMSENSE_SCRIPT_VERIFY;
154 partname =
"%verifyscript";
161 partname =
"%triggerprein";
168 partname =
"%triggerin";
175 partname =
"%triggerun";
182 partname =
"%triggerpostun";
187 tagflags = RPMSENSE_SCRIPT_SANITYCHECK;
189 partname =
"%sanitycheck";
195 p = strstr(spec->
line,
"--");
203 strncpy(reqargs, p + 2,
sizeof(reqargs)-1);
204 reqargs[
sizeof(reqargs)-1] =
'\0';
207 if ((rc = poptParseArgvString(spec->
line, &argc, &argv))) {
209 spec->
lineNum, partname, poptStrerror(rc));
214 while ((arg = poptGetNextOpt(optCon)) > 0) {
217 if (
prog[0] ==
'<') {
218 const char *
s =
prog;
219 while (s && s[1] && s[1] !=
'>')
223 _(
"line %d: embedded interpreter token must end "
228 }
else if (
prog[0] ==
'%') {
230 }
else if (
prog[0] !=
'/') {
232 _(
"line %d: script program must begin "
247 poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
253 if (poptPeekArg(optCon)) {
256 name = poptGetArg(optCon);
258 if (poptPeekArg(optCon)) {
283 if ((rc = poptParseArgvString(
prog, &progArgc, &progArgv))) {
285 spec->
lineNum, partname, poptStrerror(rc));
310 if (!
strcmp(progArgv[0],
"<lua>")) {
317 "BuiltinLuaScripts",
"4.2.2-1");
321 if (!
strcmp(progArgv[0],
"<augeas>")) {
323 "BuiltinAugeasScripts",
"5.3-1");
327 if (!
strcmp(progArgv[0],
"<ficl>")) {
329 "BuiltinFiclScripts",
"5.2-1");
333 if (!
strcmp(progArgv[0],
"<js>")) {
335 "BuiltinJavaScript",
"5.2-1");
338 #ifdef WITH_PERLEMBED
339 if (!
strcmp(progArgv[0],
"<perl>")) {
341 "BuiltinPerlScripts",
"5.2-1");
344 #ifdef WITH_PYTHONEMBED
345 if (!
strcmp(progArgv[0],
"<python>")) {
347 "BuiltinPythonScripts",
"5.2-1");
350 #ifdef WITH_RUBYEMBED
351 if (!
strcmp(progArgv[0],
"<ruby>")) {
353 "BuiltinRubyScripts",
"5.2-1");
357 if (!
strcmp(progArgv[0],
"<spook>")) {
359 "BuiltinSpookScripts",
"5.3-1");
363 if (!
strcmp(progArgv[0],
"<sql>")) {
365 "BuiltinSqlScripts",
"5.3-1");
369 if (!
strcmp(progArgv[0],
"<squirrel>")) {
371 "BuiltinSquirrelScripts",
"5.2-1");
375 if (!
strcmp(progArgv[0],
"<tcl>")) {
377 "BuiltinTclScripts",
"5.2-1");
380 if (progArgv[0][0] ==
'<') {
382 _(
"line %d: unsupported internal script: %s\n"),
388 && !
strcmp(progArgv[0],
"/bin/sh")))
392 progArgv[0],
NULL, (tagflags | RPMSENSE_INTERP), 0);
402 if ((rc =
parseRCPOT(spec, pkg, reqargs, reqtag, index, tagflags)))
408 he->
p.
str = *progArgv;
413 "ScriptletInterpreterArgs",
"4.0.3-1");
416 he->
p.
argv = progArgv;
458 rc = (
rpmRC) nextPart;
462 progArgv =
_free(progArgv);
464 optCon = poptFreeContext(optCon);
rpmiob rpmiobRTrim(rpmiob iob)
Trim trailing white space.
int rpmluaCheckScript(rpmlua _lua, const char *script, const char *name)
rpmlog(RPMLOG_ERR,"%s\n", buf)
char * xstrdup(const char *str)
rpmRC lookupPackage(Spec spec, const char *name, int flag, Package *pkg)
Find sub-package control structure by name.
rpmiob rpmiobFree(rpmiob iob)
Destroy a I/O buffer instance.
rpmiob rpmiobAppend(rpmiob iob, const char *s, size_t nl)
Append string to I/O buffer.
int addReqProv(Spec spec, Header h, rpmTag tagN, const char *N, const char *EVR, rpmsenseFlags Flags, rpmuint32_t index)
Add dependency to header, filtering duplicates.
static rpmuint32_t addTriggerIndex(Package pkg, const char *file, const char *script, const char *prog)
enum rpmRC_e rpmRC
RPM return codes.
Yet Another syslog(3) API clone.
memset(_r, 0, sizeof(*_r))
void * xcalloc(size_t nmemb, size_t size)
rpmParseState isPart(Spec spec)
Check line for section separator, return next parser state.
enum evrFlags_e rpmsenseFlags
struct TriggerFileEntry * triggerFiles
The structure used to store values parsed from a spec file.
int parseScript(Spec spec, int parsePart)
Parse %pre et al scriptlets from a spec file.
struct TriggerFileEntry * next
rpmiob rpmiobNew(size_t len)
Create an I/O buffer.
char * rpmiobStr(rpmiob iob)
Return I/O buffer (as string).
return strcmp(ame->name, bme->name)
This is the only module users of librpmbuild should need to include.
enum rpmParseState_e rpmParseState
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
rpmRC parseRCPOT(Spec spec, Package pkg, const char *field, rpmTag tagN, rpmuint32_t index, rpmsenseFlags tagflags)
Parse dependency relations from spec file and/or autogenerated output buffer.
The structure used to store values for a package.
int rpmlibNeedsFeature(Header h, const char *feature, const char *featureEVR)
Add rpmlib feature dependency.
int readLine(Spec spec, rpmStripFlags strip)
Read next line from spec file.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
const char * postTransFile
int rpmExpandNumeric(const char *arg)
Return macro expansion as a numeric value.
static struct poptOption optionsTable[]
const char * preTransFile
const char * sanityCheckFile