]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: parser: Handle package
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 31 May 2019 04:36:56 +0000 (05:36 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 31 May 2019 04:36:56 +0000 (05:36 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/parser/scanner.l

index 6b0c573ea27d0f8bba4228fb11298ace3d101128..202ed2172c5f1fbd28d3d4fa448a5dd28618b064 100644 (file)
@@ -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; }
 
+<INITIAL>^{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);
+                               }
+
 <INITIAL>^{template} {
                                        // Find the name of the template
                                        char* name = NULL;