8 #define _RPMEVR_INTERNAL
20 const char *script,
const char *
prog)
34 index = last->
index + 1;
39 tfe->
script = (script && *script !=
'\0') ?
xstrdup(script) : NULL;
54 static const char *
name = NULL;
56 static const char *
prog = NULL;
58 static const char *
file = NULL;
61 { NULL,
'p', POPT_ARG_STRING, &
prog,
'p', NULL, NULL},
62 { NULL,
'n', POPT_ARG_STRING, &
name,
'n', NULL, NULL},
63 { NULL,
'f', POPT_ARG_STRING, &
file,
'f', NULL, NULL},
64 { 0, 0, 0, 0, 0, NULL, NULL}
83 const char **progArgv = NULL;
85 char *partname = NULL;
99 const char **argv = NULL;
100 poptContext optCon = NULL;
113 tagflags = RPMSENSE_SCRIPT_PRE;
119 tagflags = RPMSENSE_SCRIPT_POST;
125 tagflags = RPMSENSE_SCRIPT_PREUN;
131 tagflags = RPMSENSE_SCRIPT_POSTUN;
133 partname =
"%postun";
139 partname =
"%pretrans";
145 partname =
"%posttrans";
149 tagflags = RPMSENSE_SCRIPT_VERIFY;
151 partname =
"%verifyscript";
158 partname =
"%triggerprein";
165 partname =
"%triggerin";
172 partname =
"%triggerun";
179 partname =
"%triggerpostun";
186 p = strstr(spec->
line,
"--");
194 strcpy(reqargs, p + 2);
197 if ((rc = poptParseArgvString(spec->
line, &argc, &argv))) {
199 spec->
lineNum, partname, poptStrerror(rc));
203 optCon = poptGetContext(NULL, argc, argv,
optionsTable, 0);
204 while ((arg = poptGetNextOpt(optCon)) > 0) {
207 if (
prog[0] ==
'<') {
210 _(
"line %d: internal script must end "
215 }
else if (
prog[0] ==
'%') {
217 }
else if (
prog[0] !=
'/') {
219 _(
"line %d: script program must begin "
234 poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
240 if (poptPeekArg(optCon)) {
243 name = poptGetArg(optCon);
245 if (poptPeekArg(optCon)) {
270 if ((rc = poptParseArgvString(
prog, &progArgc, &progArgv))) {
272 spec->
lineNum, partname, poptStrerror(rc));
297 if (!strcmp(progArgv[0],
"<lua>")) {
299 if (rpmluaCheckScript(lua, p, partname) !=
RPMRC_OK) {
304 "BuiltinLuaScripts",
"4.2.2-1");
307 if (progArgv[0][0] ==
'<') {
309 _(
"line %d: unsupported internal script: %s\n"),
315 progArgv[0], NULL, (tagflags | RPMSENSE_INTERP), 0);
325 if ((rc =
parseRCPOT(spec, pkg, reqargs, reqtag, index, tagflags)))
330 *progArgv, progArgc);
333 "ScriptletInterpreterArgs",
"4.0.3-1");
371 progArgv =
_free(progArgv);
373 optCon = poptFreeContext(optCon);