From: Michael Tremer Date: Fri, 31 May 2019 04:36:56 +0000 (+0100) Subject: libpakfire: parser: Handle package X-Git-Tag: 0.9.28~1285^2~1016 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9bac23987b08b048e8b2a5faa2c5b80d79ad18ee;p=pakfire.git libpakfire: parser: Handle package Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/parser/scanner.l b/src/libpakfire/parser/scanner.l index 6b0c573ea..202ed2172 100644 --- a/src/libpakfire/parser/scanner.l +++ b/src/libpakfire/parser/scanner.l @@ -46,9 +46,11 @@ word ({quoted_string}|({digit}|{letter}|{special})+) We automatically prepend "define" in front of some keywords, because generally the language requires it. */ -keywords (description|{whitespace}(build(_cmds)?|files|install(_cmds)?|prepare_cmds|provides|(pre)?requires|_posttrans)) -template {whitespace}template.*$ +keywords (description|{whitespace}(description|build(_cmds)?|files|filter_(provides|requires)|install(_cmds)?|prepare_cmds|provides|(pre)?requires|_posttrans)) +package {whitespace}package.*$ script {whitespace}script.*$ +template {whitespace}template.*$ + %s DEFINE @@ -58,6 +60,29 @@ script {whitespace}script.*$ {whitespace} {} \n { num_lines++; return T_EOL; } +^{package} { + // Find the name of the package + char* name = NULL; + for (unsigned int i = yyleng; i > 0; i--) { + if (isspace(yytext[i])) + break; + + name = yytext + i; + } + + size_t length = strlen("package:") + strlen(name); + + char* buffer = pakfire_malloc(length + 1); + snprintf(buffer, length + 1, "package:%s", name); + + // Put the whole string back onto the stack (backwards) + for (int i = length - 1; i >= 0; i--) { + unput(buffer[i]); + } + + pakfire_free(buffer); + } + ^{template} { // Find the name of the template char* name = NULL;