diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index fb3f2bc..ab96034 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,19 @@ ctags-5.5.4.tar.gz ctags-5.6.tar.gz ctags-5.7.tar.gz ctags-5.8.tar.gz +/ctags-p5.9.20210307.0.tar.gz +/ctags-p5.9.20210509.0.tar.gz +/ctags-p5.9.20210725.0.tar.gz +/ctags-p5.9.20220206.0.tar.gz +/ctags-p5.9.20220313.0.tar.gz +/ctags-p5.9.20220424.0.tar.gz +/ctags-p5.9.20220508.0.tar.gz +/ctags-p5.9.20220619.0.tar.gz +/ctags-p5.9.20220724.0.tar.gz +/ctags-p5.9.20220911.0.tar.gz +/ctags-p5.9.20221016.0.tar.gz +/ctags-p5.9.20221120.0.tar.gz +/universal-ctags-6.0.0.tar.gz +/universal-ctags-6.1.0.tar.gz +/universal-ctags-6.2.0.tar.gz +/universal-ctags-6.2.1.tar.gz diff --git a/ctags-5.7-destdir.patch b/ctags-5.7-destdir.patch deleted file mode 100644 index 0aeafab..0000000 --- a/ctags-5.7-destdir.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff -up ctags-5.7/Makefile.in.destdir ctags-5.7/Makefile.in ---- ctags-5.7/Makefile.in.destdir 2006-10-12 05:26:40.000000000 +0200 -+++ ctags-5.7/Makefile.in 2008-02-15 17:10:23.000000000 +0100 -@@ -59,7 +59,7 @@ include $(srcdir)/source.mak - - VPATH = $(srcdir) - --INSTALL = cp -+INSTALL = cp -p - INSTALL_PROG = $(INSTALL) - INSTALL_DATA = $(INSTALL) - -@@ -138,7 +141,8 @@ install-ebin: $(DEST_ETAGS) - install-lib: $(DEST_READ_LIB) $(DEST_READ_INC) - - $(DEST_CTAGS): $(CTAGS_EXEC) $(bindir) FORCE -- $(INSTALL_PROG) $(CTAGS_EXEC) $@ && chmod 755 $@ -+ $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir) -+ $(INSTALL_PROG) $(CTAGS_EXEC) $(DESTDIR)$@ && chmod 755 $(DESTDIR)$@ - - $(DEST_ETAGS): - - if [ -x $(DEST_CTAGS) ]; then \ -@@ -153,7 +157,8 @@ install-cman: $(DEST_CMAN) - install-eman: $(DEST_EMAN) - - $(DEST_CMAN): $(man1dir) $(MANPAGE) FORCE -- - $(INSTALL_DATA) $(srcdir)/$(MANPAGE) $@ && chmod 644 $@ -+ $(srcdir)/mkinstalldirs $(DESTDIR)$(man1dir) -+ - $(INSTALL_DATA) $(srcdir)/$(MANPAGE) $(DESTDIR)$@ && chmod 644 $(DESTDIR)$@ - - $(DEST_EMAN): - - if [ -f $(DEST_CMAN) ]; then \ -@@ -164,9 +169,11 @@ $(DEST_EMAN): - # install the library - # - $(DEST_READ_LIB): $(READ_LIB) $(libdir) FORCE -+ $(srcdir)/mkinstalldirs $(DESTDIR)$(libdir) - $(INSTALL_PROG) $(READ_LIB) $@ && chmod 644 $@ - - $(DEST_READ_INC): $(READ_INC) $(incdir) FORCE -+ $(srcdir)/mkinstalldirs $(DESTDIR)$(incdir) - $(INSTALL_PROG) $(READ_INC) $@ && chmod 644 $@ - - diff --git a/ctags-5.7-segment-fault.patch b/ctags-5.7-segment-fault.patch deleted file mode 100644 index 60e8809..0000000 --- a/ctags-5.7-segment-fault.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff -ruN -x '*~' ctags-5.7/vim.c ctags-5.7/vim.c ---- ctags-5.7/vim.c 2006-10-26 12:06:21.000000000 +0900 -+++ ctags-5.7/vim.c 2009-08-28 22:21:31.000000000 +0900 -@@ -328,7 +328,7 @@ - */ - const unsigned char *cp = line; - -- if ( (int) *cp == '\\' ) -+ if ( cp && ( (int) *cp == '\\' ) ) - { - /* - * We are recursively calling this function is the command -@@ -350,9 +350,10 @@ - while (*cp && isspace ((int) *cp)) - ++cp; - } -- else if ( (!strncmp ((const char*) line, "comp", (size_t) 4) == 0) && -- (!strncmp ((const char*) line, "comc", (size_t) 4) == 0) && -- (strncmp ((const char*) line, "com", (size_t) 3) == 0) ) -+ else if ( line && -+ (!strncmp ((const char*) line, "comp", (size_t) 4) == 0) && -+ (!strncmp ((const char*) line, "comc", (size_t) 4) == 0) && -+ (strncmp ((const char*) line, "com", (size_t) 3) == 0) ) - { - cp += 2; - if ((int) *++cp == 'm' && (int) *++cp == 'a' && -@@ -394,6 +395,14 @@ - while (*cp && !isspace ((int) *cp)) - ++cp; - } -+ else if (!isalnum ((int) *cp)) -+ { -+ /* -+ * Broken syntax: throw away this line -+ */ -+ cmdProcessed = TRUE; -+ goto cleanUp; -+ } - } while ( *cp && !isalnum ((int) *cp) ); - - if ( ! *cp ) diff --git a/ctags-5.8-css.patch b/ctags-5.8-css.patch deleted file mode 100644 index 2744d33..0000000 --- a/ctags-5.8-css.patch +++ /dev/null @@ -1,260 +0,0 @@ -diff -up ctags-5.8/css.c.me ctags-5.8/css.c ---- ctags-5.8/css.c.me 2012-02-08 13:59:35.000000000 +0100 -+++ ctags-5.8/css.c 2012-02-08 13:55:16.000000000 +0100 -@@ -0,0 +1,226 @@ -+/*************************************************************************** -+ * css.c -+ * Character-based parser for Css definitions -+ * Author - Iago Rubio -+ **************************************************************************/ -+#include "general.h" -+ -+#include -+#include -+ -+#include "parse.h" -+#include "read.h" -+ -+ -+typedef enum eCssKinds { -+ K_NONE = -1, K_CLASS, K_SELECTOR, K_ID -+} cssKind; -+ -+static kindOption CssKinds [] = { -+ { TRUE, 'c', "class", "classes" }, -+ { TRUE, 's', "selector", "selectors" }, -+ { TRUE, 'i', "id", "identities" } -+}; -+ -+typedef enum _CssParserState { // state of parsing -+ P_STATE_NONE, // default state -+ P_STATE_IN_COMMENT, // into a comment, only multi line in CSS -+ P_STATE_IN_SINGLE_STRING, // into a single quoted string -+ P_STATE_IN_DOUBLE_STRING, // into a double quoted string -+ P_STATE_IN_DEFINITION, // on the body of the style definition, nothing for us -+ P_STATE_IN_MEDIA, // on a @media declaration, can be multi-line -+ P_STATE_IN_IMPORT, // on a @import declaration, can be multi-line -+ P_STATE_IN_NAMESPACE, // on a @namespace declaration -+ P_STATE_IN_PAGE, // on a @page declaration -+ P_STATE_IN_FONTFACE, // on a @font-face declaration -+ P_STATE_AT_END // end of parsing -+} CssParserState; -+ -+static void makeCssSimpleTag( vString *name, cssKind kind, boolean delete ) -+{ -+ vStringTerminate (name); -+ makeSimpleTag (name, CssKinds, kind); -+ vStringClear (name); -+ if( delete ) -+ vStringDelete (name); -+} -+ -+static boolean isCssDeclarationAllowedChar( const unsigned char *cp ) -+{ -+ return isalnum ((int) *cp) || -+ isspace ((int) *cp) || -+ *cp == '_' || // allowed char -+ *cp == '-' || // allowed char -+ *cp == '+' || // allow all sibling in a single tag -+ *cp == '>' || // allow all child in a single tag -+ *cp == '{' || // allow the start of the declaration -+ *cp == '.' || // allow classes and selectors -+ *cp == ',' || // allow multiple declarations -+ *cp == ':' || // allow pseudo classes -+ *cp == '*' || // allow globs as P + * -+ *cp == '#'; // allow ids -+} -+ -+static CssParserState parseCssDeclaration( const unsigned char **position, cssKind kind ) -+{ -+ vString *name = vStringNew (); -+ const unsigned char *cp = *position; -+ -+ // pick to the end of line including children and sibling -+ // if declaration is multiline go for the next line -+ while ( isCssDeclarationAllowedChar(cp) || -+ *cp == '\0' ) // track the end of line into the loop -+ { -+ if( (int) *cp == '\0' ) -+ { -+ cp = fileReadLine (); -+ if( cp == NULL ){ -+ makeCssSimpleTag(name, kind, TRUE); -+ *position = cp; -+ return P_STATE_AT_END; -+ } -+ } -+ else if( *cp == ',' ) -+ { -+ makeCssSimpleTag(name, kind, TRUE); -+ *position = ++cp; -+ return P_STATE_NONE; -+ } -+ else if( *cp == '{' ) -+ { -+ makeCssSimpleTag(name, kind, TRUE); -+ *position = ++cp; -+ return P_STATE_IN_DEFINITION; -+ } -+ -+ vStringPut (name, (int) *cp); -+ ++cp; -+ } -+ -+ makeCssSimpleTag(name, kind, TRUE); -+ *position = cp; -+ -+ return P_STATE_NONE; -+} -+ -+static CssParserState parseCssLine( const unsigned char *line, CssParserState state ) -+{ -+ vString *aux; -+ -+ while( *line != '\0' ) // fileReadLine returns NULL terminated strings -+ { -+ while (isspace ((int) *line)) -+ ++line; -+ switch( state ) -+ { -+ case P_STATE_NONE: -+ // pick first char if alphanumeric is a selector -+ if( isalnum ((int) *line) ) -+ state = parseCssDeclaration( &line, K_SELECTOR ); -+ else if( *line == '.' ) // a class -+ state = parseCssDeclaration( &line, K_CLASS ); -+ else if( *line == '#' ) // an id -+ state = parseCssDeclaration( &line, K_ID ); -+ else if( *line == '@' ) // at-rules, we'll ignore them -+ { -+ ++line; -+ aux = vStringNew(); -+ while( !isspace((int) *line) ) -+ { -+ vStringPut (aux, (int) *line); -+ ++line; -+ } -+ vStringTerminate (aux); -+ if( strcmp( aux->buffer, "media" ) == 0 ) -+ state = P_STATE_IN_MEDIA; -+ else if ( strcmp( aux->buffer, "import" ) == 0 ) -+ state = P_STATE_IN_IMPORT; -+ else if ( strcmp( aux->buffer, "namespace" ) == 0 ) -+ state = P_STATE_IN_NAMESPACE; -+ else if ( strcmp( aux->buffer, "page" ) == 0 ) -+ state = P_STATE_IN_PAGE; -+ else if ( strcmp( aux->buffer, "font-face" ) == 0 ) -+ state = P_STATE_IN_FONTFACE; -+ vStringDelete (aux); -+ } -+ else if( *line == '*' && *(line-1) == '/' ) // multi-line comment -+ state = P_STATE_IN_COMMENT; -+ break; -+ case P_STATE_IN_COMMENT: -+ if( *line == '/' && *(line-1) == '*') -+ state = P_STATE_NONE; -+ break; -+ case P_STATE_IN_SINGLE_STRING: -+ if( *line == '\'' && *(line-1) != '\\' ) -+ state = P_STATE_IN_DEFINITION; // PAGE, FONTFACE and DEFINITION are treated the same way -+ break; -+ case P_STATE_IN_DOUBLE_STRING: -+ if( *line=='"' && *(line-1) != '\\' ) -+ state = P_STATE_IN_DEFINITION; // PAGE, FONTFACE and DEFINITION are treated the same way -+ break; -+ case P_STATE_IN_MEDIA: -+ // skip to start of media body or line end -+ while( *line != '{' ) -+ { -+ if( *line == '\0' ) -+ break; -+ ++line; -+ } -+ if( *line == '{' ) -+ state = P_STATE_NONE; -+ break; -+ case P_STATE_IN_IMPORT: -+ case P_STATE_IN_NAMESPACE: -+ // skip to end of declaration or line end -+ while( *line != ';' ) -+ { -+ if( *line == '\0' ) -+ break; -+ ++line; -+ } -+ if( *line == ';' ) -+ state = P_STATE_NONE; -+ break; -+ case P_STATE_IN_PAGE: -+ case P_STATE_IN_FONTFACE: -+ case P_STATE_IN_DEFINITION: -+ if( *line == '}' ) -+ state = P_STATE_NONE; -+ else if( *line == '\'' ) -+ state = P_STATE_IN_SINGLE_STRING; -+ else if( *line == '"' ) -+ state = P_STATE_IN_DOUBLE_STRING; -+ break; -+ case P_STATE_AT_END: -+ return state; -+ break; -+ } -+ line++; -+ } -+ return state; -+} -+ -+static void findCssTags (void) -+{ -+ const unsigned char *line; -+ CssParserState state = P_STATE_NONE; -+ -+ while ( (line = fileReadLine ()) != NULL ) -+ { -+ state = parseCssLine( line, state ); -+ if( state==P_STATE_AT_END ) return; -+ } -+} -+ -+/* parser definition */ -+extern parserDefinition* CssParser (void) -+{ -+ static const char *const extensions [] = { "css", NULL }; -+ parserDefinition* def = parserNew ("CSS"); -+ def->kinds = CssKinds; -+ def->kindCount = KIND_COUNT (CssKinds); -+ def->extensions = extensions; -+ def->parser = findCssTags; -+ return def; -+} -+ -diff -up ctags-5.8/parsers.h.me ctags-5.8/parsers.h ---- ctags-5.8/parsers.h.me 2012-02-08 13:56:46.000000000 +0100 -+++ ctags-5.8/parsers.h 2012-02-08 13:57:25.000000000 +0100 -@@ -26,6 +26,7 @@ - CppParser, \ - CsharpParser, \ - CobolParser, \ -+ CssParser, \ - DosBatchParser, \ - EiffelParser, \ - ErlangParser, \ -diff -up ctags-5.8/source.mak.me ctags-5.8/source.mak ---- ctags-5.8/source.mak.me 2012-02-08 13:58:02.000000000 +0100 -+++ ctags-5.8/source.mak 2012-02-08 13:58:42.000000000 +0100 -@@ -17,6 +17,7 @@ SOURCES = \ - beta.c \ - c.c \ - cobol.c \ -+ css.c \ - dosbatch.c \ - eiffel.c \ - entry.c \ -@@ -79,6 +80,7 @@ OBJECTS = \ - beta.$(OBJEXT) \ - c.$(OBJEXT) \ - cobol.$(OBJEXT) \ -+ css.$(OBJEXT) \ - dosbatch.$(OBJEXT) \ - eiffel.$(OBJEXT) \ - entry.$(OBJEXT) \ diff --git a/ctags-5.8-cssparse.patch b/ctags-5.8-cssparse.patch deleted file mode 100644 index f70c374..0000000 --- a/ctags-5.8-cssparse.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff -up ctags-5.8/css.c.me ctags-5.8/css.c ---- ctags-5.8/css.c.me 2012-10-18 22:03:20.126163700 +0200 -+++ ctags-5.8/css.c 2012-10-18 22:04:03.237107358 +0200 -@@ -73,10 +73,11 @@ static CssParserState parseCssDeclaratio - { - if( (int) *cp == '\0' ) - { -+ /* assign position to the end of line. */ -+ *position = cp; - cp = fileReadLine (); - if( cp == NULL ){ - makeCssSimpleTag(name, kind, TRUE); -- *position = cp; - return P_STATE_AT_END; - } - } diff --git a/ctags-5.8-format-security.patch b/ctags-5.8-format-security.patch deleted file mode 100644 index ccd3986..0000000 --- a/ctags-5.8-format-security.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur ctags-5.8.orig/lregex.c ctags-5.8/lregex.c ---- ctags-5.8.orig/lregex.c 2007-09-10 04:36:48.000000000 +0200 -+++ ctags-5.8/lregex.c 2014-04-14 21:09:17.716000000 +0200 -@@ -408,7 +408,7 @@ - const char* regexfile = parameter + 1; - FILE* const fp = fopen (regexfile, "r"); - if (fp == NULL) -- error (WARNING | PERROR, regexfile); -+ error (WARNING | PERROR, "%s", regexfile); - else - { - vString* const regex = vStringNew (); diff --git a/ctags-5.8-memmove.patch b/ctags-5.8-memmove.patch deleted file mode 100644 index 5608f04..0000000 --- a/ctags-5.8-memmove.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -r -u ctags-5.8.orig/routines.c ctags-5.8/routines.c ---- ctags-5.8.orig/routines.c 2013-06-13 10:42:08.048576327 -0400 -+++ ctags-5.8/routines.c 2013-06-13 10:48:25.150366836 -0400 -@@ -757,13 +757,13 @@ - else if (cp [0] != PATH_SEPARATOR) - cp = slashp; - #endif -- strcpy (cp, slashp + 3); -+ memmove (cp, slashp + 3, strlen(slashp + 3) + 1); - slashp = cp; - continue; - } - else if (slashp [2] == PATH_SEPARATOR || slashp [2] == '\0') - { -- strcpy (slashp, slashp + 2); -+ memmove (slashp, slashp + 2, strlen(slashp + 2) + 1); - continue; - } - } diff --git a/ctags-5.8-ocaml-crash.patch b/ctags-5.8-ocaml-crash.patch deleted file mode 100644 index 8263cca..0000000 --- a/ctags-5.8-ocaml-crash.patch +++ /dev/null @@ -1,251 +0,0 @@ -diff -up ctags-5.8/ocaml.c.me ctags-5.8/ocaml.c ---- ctags-5.8/ocaml.c.me 2012-08-02 12:42:21.652211192 +0200 -+++ ctags-5.8/ocaml.c 2012-08-02 13:06:59.751283639 +0200 -@@ -72,6 +72,7 @@ typedef enum { - OcaKEYWORD_if, - OcaKEYWORD_in, - OcaKEYWORD_let, -+ OcaKEYWORD_value, - OcaKEYWORD_match, - OcaKEYWORD_method, - OcaKEYWORD_module, -@@ -145,7 +146,7 @@ static const ocaKeywordDesc OcamlKeyword - { "try" , OcaKEYWORD_try }, - { "type" , OcaKEYWORD_type }, - { "val" , OcaKEYWORD_val }, -- { "value" , OcaKEYWORD_let }, /* just to handle revised syntax */ -+ { "value" , OcaKEYWORD_value }, /* just to handle revised syntax */ - { "virtual" , OcaKEYWORD_virtual }, - { "while" , OcaKEYWORD_while }, - { "with" , OcaKEYWORD_with }, -@@ -297,7 +298,6 @@ static void eatComment (lexingState * st - if (st->cp == NULL) - return; - c = st->cp; -- continue; - } - /* we've reached the end of the comment */ - else if (*c == ')' && lastIsStar) -@@ -308,13 +308,33 @@ static void eatComment (lexingState * st - { - st->cp = c; - eatComment (st); -+ - c = st->cp; -+ if (c == NULL) -+ return; -+ - lastIsStar = FALSE; -+ c++; - } -+ /* OCaml has a rule which says : -+ * -+ * "Comments do not occur inside string or character literals. -+ * Nested comments are handled correctly." -+ * -+ * So if we encounter a string beginning, we must parse it to -+ * get a good comment nesting (bug ID: 3117537) -+ */ -+ else if (*c == '"') -+ { -+ st->cp = c; -+ eatString (st); -+ c = st->cp; -+ } - else -+ { - lastIsStar = '*' == *c; -- -- c++; -+ c++; -+ } - } - - st->cp = c; -@@ -554,8 +574,7 @@ static int getLastNamedIndex ( void ) - - for (i = stackIndex - 1; i >= 0; --i) - { -- if (stack[i].contextName->buffer && -- strlen (stack[i].contextName->buffer) > 0) -+ if (vStringLength (stack[i].contextName) > 0) - { - return i; - } -@@ -866,6 +885,11 @@ static void prepareTag (tagEntryInfo * t - tag->kindName = OcamlKinds[kind].name; - tag->kind = OcamlKinds[kind].letter; - -+ if (kind == K_MODULE) -+ { -+ tag->lineNumberEntry = TRUE; -+ tag->lineNumber = 1; -+ } - parentIndex = getLastNamedIndex (); - if (parentIndex >= 0) - { -@@ -880,9 +904,12 @@ static void prepareTag (tagEntryInfo * t - * more information to it in the future */ - static void addTag (vString * const ident, int kind) - { -- tagEntryInfo toCreate; -- prepareTag (&toCreate, ident, kind); -- makeTagEntry (&toCreate); -+ if (OcamlKinds [kind].enabled && ident != NULL && vStringLength (ident) > 0) -+ { -+ tagEntryInfo toCreate; -+ prepareTag (&toCreate, ident, kind); -+ makeTagEntry (&toCreate); -+ } - } - - boolean needStrongPoping = FALSE; -@@ -942,15 +969,17 @@ static void typeRecord (vString * const - } - - /* handle : -- * exception ExceptionName ... */ -+ * exception ExceptionName of ... */ - static void exceptionDecl (vString * const ident, ocaToken what) - { - if (what == OcaIDENTIFIER) - { - addTag (ident, K_EXCEPTION); - } -- /* don't know what to do on else... */ -- -+ else /* probably ill-formed, give back to global scope */ -+ { -+ globalScope (ident, what); -+ } - toDoNext = &globalScope; - } - -@@ -1006,7 +1035,6 @@ static void constructorValidation (vStri - */ - static void typeDecl (vString * const ident, ocaToken what) - { -- - switch (what) - { - /* parameterized */ -@@ -1046,7 +1074,6 @@ static void typeDecl (vString * const id - * let typeRecord handle it. */ - static void typeSpecification (vString * const ident, ocaToken what) - { -- - switch (what) - { - case OcaIDENTIFIER: -@@ -1243,8 +1270,14 @@ static void localLet (vString * const id - * than the let definitions. - * Used after a match ... with, or a function ... or fun ... - * because their syntax is similar. */ --static void matchPattern (vString * const UNUSED (ident), ocaToken what) -+static void matchPattern (vString * const ident, ocaToken what) - { -+ /* keep track of [], as it -+ * can be used in patterns and can -+ * mean the end of match expression in -+ * revised syntax */ -+ static int braceCount = 0; -+ - switch (what) - { - case Tok_To: -@@ -1252,6 +1285,14 @@ static void matchPattern (vString * cons - toDoNext = &mayRedeclare; - break; - -+ case Tok_BRL: -+ braceCount++; -+ break; -+ -+ case OcaKEYWORD_value: -+ popLastNamed (); -+ globalScope (ident, what); -+ break; - - case OcaKEYWORD_in: - popLastNamed (); -@@ -1269,6 +1310,11 @@ static void mayRedeclare (vString * cons - { - switch (what) - { -+ case OcaKEYWORD_value: -+ /* let globalScope handle it */ -+ globalScope (ident, what); -+ break; -+ - case OcaKEYWORD_let: - case OcaKEYWORD_val: - toDoNext = localLet; -@@ -1388,6 +1434,7 @@ static void classSpecif (vString * const - * nearly a copy/paste of globalLet. */ - static void methodDecl (vString * const ident, ocaToken what) - { -+ - switch (what) - { - case Tok_PARL: -@@ -1435,6 +1482,7 @@ vString *lastModule; - */ - static void moduleSpecif (vString * const ident, ocaToken what) - { -+ - switch (what) - { - case OcaKEYWORD_functor: -@@ -1566,7 +1614,7 @@ static void globalScope (vString * const - { - /* Do not touch, this is used only by the global scope - * to handle an 'and' */ -- static parseNext previousParser = NULL; -+ static parseNext previousParser = &globalScope; - - switch (what) - { -@@ -1608,6 +1656,7 @@ static void globalScope (vString * const - /* val is mixed with let as global - * to be able to handle mli & new syntax */ - case OcaKEYWORD_val: -+ case OcaKEYWORD_value: - case OcaKEYWORD_let: - cleanupPreviousParser (); - toDoNext = &globalLet; -@@ -1617,7 +1666,7 @@ static void globalScope (vString * const - case OcaKEYWORD_exception: - cleanupPreviousParser (); - toDoNext = &exceptionDecl; -- previousParser = NULL; -+ previousParser = &globalScope; - break; - - /* must be a #line directive, discard the -@@ -1769,7 +1818,7 @@ static void computeModuleName ( void ) - if (isLowerAlpha (moduleName->buffer[0])) - moduleName->buffer[0] += ('A' - 'a'); - -- makeSimpleTag (moduleName, OcamlKinds, K_MODULE); -+ addTag (moduleName, K_MODULE); - vStringDelete (moduleName); - } - -@@ -1779,6 +1828,7 @@ static void initStack ( void ) - int i; - for (i = 0; i < OCAML_MAX_STACK_SIZE; ++i) - stack[i].contextName = vStringNew (); -+ stackIndex = 0; - } - - static void clearStack ( void ) -@@ -1794,8 +1844,8 @@ static void findOcamlTags (void) - lexingState st; - ocaToken tok; - -- computeModuleName (); - initStack (); -+ computeModuleName (); - tempIdent = vStringNew (); - lastModule = vStringNew (); - lastClass = vStringNew (); diff --git a/ctags-CVE-2014-7204.patch b/ctags-CVE-2014-7204.patch deleted file mode 100644 index 81c5e6e..0000000 --- a/ctags-CVE-2014-7204.patch +++ /dev/null @@ -1,89 +0,0 @@ ---- ctags/jscript.c.orig 2008-10-13 00:27:38.000000000 +0200 -+++ ctags/jscript.c 2014-09-30 13:49:34.837349283 +0200 -@@ -1,5 +1,5 @@ - /* -- * $Id: jscript.c 666 2008-05-15 17:47:31Z dfishburn $ -+ * $Id: jscript.c 791 2012-10-24 01:13:13Z dfishburn $ - * - * Copyright (c) 2003, Darren Hiebert - * -@@ -215,6 +215,7 @@ - * Tag generation functions - */ - -+/* - static void makeConstTag (tokenInfo *const token, const jsKind kind) - { - if (JsKinds [kind].enabled && ! token->ignoreTag ) -@@ -238,12 +239,13 @@ - - if (JsKinds [kind].enabled && ! token->ignoreTag ) - { -- /* -+ * - * If a scope has been added to the token, change the token - * string to include the scope when making the tag. -- */ -+ * - if ( vStringLength(token->scope) > 0 ) - { -+ * - fulltag = vStringNew (); - vStringCopy(fulltag, token->scope); - vStringCatS (fulltag, "."); -@@ -251,8 +253,54 @@ - vStringTerminate(fulltag); - vStringCopy(token->string, fulltag); - vStringDelete (fulltag); -+ * -+ jsKind parent_kind = JSTAG_CLASS; -+ -+ * -+ * if we're creating a function (and not a method), -+ * guess we're inside another function -+ * -+ if (kind == JSTAG_FUNCTION) -+ parent_kind = JSTAG_FUNCTION; -+ -+ e.extensionFields.scope[0] = JsKinds [parent_kind].name; -+ e.extensionFields.scope[1] = vStringValue (token->scope); - } -- makeConstTag (token, kind); -+ * makeConstTag (token, kind); * -+ makeTagEntry (&e); -+ } -+} -+*/ -+ -+static void makeJsTag (tokenInfo *const token, const jsKind kind) -+{ -+ if (JsKinds [kind].enabled && ! token->ignoreTag ) -+ { -+ const char *const name = vStringValue (token->string); -+ tagEntryInfo e; -+ initTagEntry (&e, name); -+ -+ e.lineNumber = token->lineNumber; -+ e.filePosition = token->filePosition; -+ e.kindName = JsKinds [kind].name; -+ e.kind = JsKinds [kind].letter; -+ -+ if ( vStringLength(token->scope) > 0 ) -+ { -+ jsKind parent_kind = JSTAG_CLASS; -+ -+ /* -+ * If we're creating a function (and not a method), -+ * guess we're inside another function -+ */ -+ if (kind == JSTAG_FUNCTION) -+ parent_kind = JSTAG_FUNCTION; -+ -+ e.extensionFields.scope[0] = JsKinds [parent_kind].name; -+ e.extensionFields.scope[1] = vStringValue (token->scope); -+ } -+ -+ makeTagEntry (&e); - } - } - diff --git a/ctags.spec b/ctags.spec index ca5c8ac..f4e4435 100644 --- a/ctags.spec +++ b/ctags.spec @@ -1,20 +1,23 @@ Summary: A C programming language indexing and/or cross-reference tool Name: ctags -Version: 5.8 -Release: 24%{?dist} -License: GPLv2+ and LGPLv2+ and Public Domain -Group: Development/Tools -URL: http://ctags.sourceforge.net/ -Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz -Patch0: ctags-5.7-destdir.patch -Patch1: ctags-5.7-segment-fault.patch -Patch2: ctags-5.8-css.patch -Patch3: ctags-5.8-ocaml-crash.patch -Patch4: ctags-5.8-cssparse.patch -Patch5: ctags-5.8-memmove.patch -Patch6: ctags-5.8-format-security.patch -Patch7: ctags-CVE-2014-7204.patch +Version: 6.2.1 +Release: 1%{?dist} +License: GPL-2.0-or-later +URL: https://ctags.io/ +Source0: https://github.com/universal-ctags/ctags/releases/download/v%{version}/universal-%{name}-%{version}.tar.gz + +BuildRequires: autoconf +BuildRequires: automake BuildRequires: gcc +BuildRequires: jansson-devel +BuildRequires: libseccomp-devel +BuildRequires: libxml2-devel +BuildRequires: libyaml-devel +BuildRequires: make +BuildRequires: pkgconfig +BuildRequires: python3-docutils + +Obsoletes: %{name}-etags <= 5.8 %description Ctags generates an index (or tag) file of C language objects found in @@ -33,66 +36,143 @@ objects found in source files. Install ctags if you are going to use your system for C programming. -%package etags -Summary: Exuberant Ctags for emacs tag format -Group: Development/Tools -Requires: ctags = %{version}-%{release} -Requires: /usr/sbin/alternatives - -%description etags -This package will generate tags in a format which GNU Emacs understand, -it's a alternativ implementation of the GNU etags program. -Note: some command line options is not compatible with GNU etags. - - %prep -%setup -q -%patch0 -p1 -b .destdir -%patch1 -p1 -b .crash -%patch2 -p1 -b .css-support -%patch3 -p1 -b .ocaml-crash -%patch4 -p1 -b .cssparse-crash -%patch5 -p1 -b .memmove -%patch6 -p1 -b .fmt-sec -%patch7 -p1 -b .CVE-2014-7204 +%autosetup -p1 -n universal-%{name}-%{version} %build +./autogen.sh %configure -make %{?_smp_mflags} +%make_build %install -rm -rf %{buildroot} +%make_install -make DESTDIR=%{buildroot} install - -pushd %{buildroot}%{_bindir} -ln -s ctags etags.ctags -popd - -pushd %{buildroot}%{_mandir}/man1 -ln -s ctags.1.gz etags.ctags.1.gz -popd - -%posttrans etags -/usr/sbin/alternatives --install /usr/bin/etags emacs.etags /usr/bin/etags.ctags 20 \ - --slave /usr/share/man/man1/etags.1.gz emacs.etags.man /usr/share/man/man1/ctags.1.gz - -%postun etags -/usr/sbin/alternatives --remove etags /usr/bin/etags.ctags || : +%check +#make check %files %license COPYING -%doc EXTENDING.html FAQ NEWS README +%doc README.md %{_bindir}/%{name} -%{_mandir}/man1/%{name}.1* - -%files etags -%license COPYING -%{_bindir}/etags.%{name} -%{_mandir}/man1/etags.%{name}.1* +%{_bindir}/optscript +%{_bindir}/readtags +%{_mandir}/man1/* +%{_mandir}/man5/* +%{_mandir}/man7/* %changelog +* Wed Nov 12 2025 Than Ngo - 6.2.1-1 +- Update to 6.2.1 + +* Wed Sep 24 2025 Than Ngo - 6.2.0-1 +- Fix rhbz#2397816 - Update to 6.2.0 + +* Thu Jul 24 2025 Than Ngo - 6.1.0-4 +- Fix rhbz#2382883 - convert STI tests to TMT +- Fix test failure due to different outputs + +* Wed Jul 23 2025 Fedora Release Engineering - 6.1.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu Jan 16 2025 Fedora Release Engineering - 6.1.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Oct 23 2024 Than Ngo - 6.1.0-1 +- update to 6.1.0 + +* Tue Oct 22 2024 Richard W.M. Jones - 6.0.0-7 +- Rebuild for Jansson 2.14 + (https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/3PYINSQGKQ4BB25NQUI2A2UCGGLAG5ND/) + +* Wed Jul 17 2024 Fedora Release Engineering - 6.0.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Wed Jan 24 2024 Fedora Release Engineering - 6.0.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 6.0.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 6.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Feb 14 2023 Than Ngo - 6.0.0-2 +- migrated to SPDX license + +* Wed Feb 01 2023 Than Ngo - 6.0.0-1 +- update to 6.0.0 + +* Thu Jan 19 2023 Fedora Release Engineering - 5.9-10.20221120.0 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Nov 21 2022 Than Ngo - 5.9-9.20221120.0 +- update to 5.9.20221120.0 + +* Tue Oct 18 2022 Than Ngo - 5.9-9.20221016.0 +- update to 5.9.20221016.0 + +* Mon Sep 12 2022 Than Ngo - 5.9-9.20220911.0 +- update to 5.9.20220911.0 + +* Wed Jul 27 2022 Than Ngo - 5.9-8.20220724.0 +- update to 5.9.20220724.0 + +* Wed Jul 20 2022 Fedora Release Engineering - 5.9-7.20220619.0 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 23 2022 Than Ngo - 5.9-6.20220619.0 +- update to 5.9.6.20220619.0 + +* Thu May 12 2022 Than Ngo - 5.9-6.20220508.0 +- update to 5.9.20220508.0 + +* Tue Apr 26 2022 Than Ngo - 5.9-5.20220424.0 +- 20220424.0 + +* Mon Mar 21 2022 Than Ngo - 5.9-4.20220313.0 +- update to 5.9-4.20220313.0 + +* Tue Feb 08 2022 Than Ngo - 5.9-3.20220206.0 +- update to p5.9.20220206.0 + +* Thu Jan 20 2022 Fedora Release Engineering - 5.9-2.20210725.0 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Jul 27 2021 Than Ngo - 5.9-1.20210725.0 +- update to p5.9-20210725 + +* Wed Jul 21 2021 Fedora Release Engineering - 5.9-0.2.20210509.0 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon May 10 2021 Than Ngo - 5.9-0.1.20210509.0 +- update to 5.9.20210509.0 + +* Thu Mar 11 2021 Than Ngo - 5.9-0.1.20210307.0 +- switch to universal ctags + +* Tue Jan 26 2021 Fedora Release Engineering - 5.8-31 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 5.8-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 13 2020 Tom Stellard - 5.8-29 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Tue Jan 28 2020 Fedora Release Engineering - 5.8-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jan 23 2020 Than Ngo - 5.8-27 +- Added gating tests + +* Wed Jul 24 2019 Fedora Release Engineering - 5.8-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jan 31 2019 Fedora Release Engineering - 5.8-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Mon Jul 23 2018 Than Ngo - 5.8-24 - fixed FTBFS diff --git a/sources b/sources index d3a3d61..da0080f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -c00f82ecdcc357434731913e5b48630d ctags-5.8.tar.gz +SHA512 (universal-ctags-6.2.1.tar.gz) = 70e1767a72ba804cf4bc5e5c2dfe13498694c67865d5c8ca412d14b7f7f4c01410c94f7d57daad62ce5885166c4e05128d1beb8184f39a11596045a3f4131007 diff --git a/tests/Sanity-test-for-ctags/Makefile b/tests/Sanity-test-for-ctags/Makefile new file mode 100644 index 0000000..982951b --- /dev/null +++ b/tests/Sanity-test-for-ctags/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/ctags/Sanity-test-for-ctags +# Description: Sanity test +# Author: Than Ngo +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2019,2020 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/ctags/Sanity-test-for-ctags +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE ctags-kinds-list ctags-maps-list ctags-lang-list test.python test.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Than Ngo " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Sanity test" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 3m" >> $(METADATA) + @echo "RunFor: ctags" >> $(METADATA) + @echo "Requires: coreutils man-db" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+ and LGPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Sanity-test-for-ctags/PURPOSE b/tests/Sanity-test-for-ctags/PURPOSE new file mode 100644 index 0000000..23a869e --- /dev/null +++ b/tests/Sanity-test-for-ctags/PURPOSE @@ -0,0 +1,7 @@ +PURPOSE of /CoreOS/ctags/Sanity-test-for-ctags +Description: smoke test, funktion test for CI gating +Author: Than Ngo + +tests following scenarios: + * smoke test + * funktion test diff --git a/tests/Sanity-test-for-ctags/ctags-kinds-list b/tests/Sanity-test-for-ctags/ctags-kinds-list new file mode 100644 index 0000000..c1b9b48 --- /dev/null +++ b/tests/Sanity-test-for-ctags/ctags-kinds-list @@ -0,0 +1,1184 @@ +Unknown [disabled] +Abaqus + p Parts + a Assembly + s Steps +Abc + s sections +Ada + P package specifications + p packages + T type specifications [off] + t types + U subtype specifications [off] + u subtypes + c record type components + l enum type literals + V variable specifications [off] + v variables + f generic formal parameters + n constants + x user defined exceptions + R subprogram specifications + r subprograms + K task specifications + k tasks + O protected data specifications + o protected data + E task/protected data entry specifications [off] + e task/protected data entries + b labels + i loop/declare identifiers + a automatic variables [off] + y loops and blocks with no identifier [off] +Ant + p projects + t targets + P properties(global) + i antfiles +Asciidoc + c chapters + s sections + S level 2 sections + t level 3 sections + T level 4 sections + u level 5 sections + a anchors +Asm + d defines + l labels + m macros + t types (structs and records) + z parameters for a macro [off] +Asp + d constants + c classes + f functions + s subroutines + v variables +Autoconf + p packages + t templates + m autoconf macros + w options specified with --with-... + e options specified with --enable-... + s substitution keys + c automake conditions + d definitions +AutoIt + f functions + r regions + g global variables + l local variables + S included scripts +Automake + d directories + P programs + M manuals + T ltlibraries + L libraries + S scripts + D datum + c conditions + s subdirs + p placeholder for EXTRA_, noinst_, and _check_ prefixed primaries (internal use) [off] +Awk + f functions +Basic + c constants + f functions + l labels + t types + v variables + g enumerations + n namespace +Bats + t test cases + S scripts +BETA + f fragment definitions + p all patterns [off] + s slots (fragment uses) + v patterns (virtual or rebound) +BibLaTeX + A artworks + B audios + C bibnotes + D bookinbooks + E Booklets + G collections + H commentarys + I datasets + J images + K interferences + L jurisdictions + M legislations + N legals + O letters + P movies + Q musics + R mvbooks + S mvcollections + T mvproceedings + U mvreferences + V onlines + W patents + g performances + h periodicals + i references + j reports + k reviews + l sets + m software + n standards + o suppbooks + p suppcollections + q suppperiodicals + r thesis + s videos + t xdatas +BibTeX + a article + b book + B booklet + c conference + i inbook + I incollection + j inproceedings + m manual + M mastersthesis + n misc + p phdthesis + P proceedings + s string + t techreport + u unpublished +Clojure + f functions + n namespaces +CMake + f functions + m macros + t targets + v variable definitions + D options specified with -D + p projects +C + d macro definitions + e enumerators (values inside an enumeration) + f function definitions + g enumeration names + h included header files + l local variables [off] + m struct, and union members + p function prototypes [off] + s structure names + t typedefs + u union names + v variable definitions + x external and forward variable declarations [off] + z function parameters inside function or prototype definitions [off] + L goto labels [off] + D parameters inside macro definitions [off] +C++ + d macro definitions + e enumerators (values inside an enumeration) + f function definitions + g enumeration names + h included header files + l local variables [off] + m class, struct, and union members + p function prototypes [off] + s structure names + t typedefs + u union names + v variable definitions + x external and forward variable declarations [off] + z function parameters inside function or prototype definitions [off] + L goto labels [off] + D parameters inside macro definitions [off] + c classes + n namespaces + A namespace aliases [off] + N names imported via using scope::symbol [off] + U using namespace statements [off] + Z template parameters [off] +CPreProcessor + d macro definitions + h included header files + D macro parameters [off] +CSS + c classes + s selectors + i identities +C# + c classes + d macro definitions + e enumerators (values inside an enumeration) + E events + f fields + g enumeration names + i interfaces + l local variables [off] + m methods + n namespaces + p properties + s structure names + t typedefs +Ctags + l language definitions + k kind definitions +Cobol + f file descriptions (FD, SD, RD) + g group items + P program ids + s sections + D divisions + p paragraphs + d data items + S source code file +CobolFree + f file descriptions (FD, SD, RD) + g group items + P program ids + s sections + D divisions + p paragraphs + d data items + S source code file +CobolVariable + f file descriptions (FD, SD, RD) + g group items + P program ids + s sections + D divisions + p paragraphs + d data items + S source code file +CUDA + d macro definitions + e enumerators (values inside an enumeration) + f function definitions + g enumeration names + h included header files + l local variables [off] + m struct, and union members + p function prototypes [off] + s structure names + t typedefs + u union names + v variable definitions + x external and forward variable declarations [off] + z function parameters inside function or prototype definitions [off] + L goto labels [off] + D parameters inside macro definitions [off] +D + a aliases + c classes + g enumeration names + e enumerators (values inside an enumeration) + x external variable declarations [off] + f function definitions + i interfaces + l local variables [off] + m class, struct, and union members + X mixins + M modules + n namespaces + p function prototypes [off] + s structure names + T templates + u union names + v variable definitions + V version statements +Diff + m modified files + n newly created files + d deleted files + h hunks +DTD + E entities + p parameter entities + e elements + a attributes + n notations +DTS + p phandlers + l labels +DosBatch + l labels + v variables +Eiffel + c classes + f features + l local entities [off] +Elixir + p protocols (defprotocol...) + m modules (defmodule ...) + f functions (def ...) + c callbacks (defcallback ...) + d delegates (defdelegate ...) + e exceptions (defexception ...) + g guards (defguard ...) + i implementations (defimpl ...) + a macros (defmacro ...) + o operators (e.g. "defmacro a <<< b") + r records (defrecord...) + t tests (test ...) + y types (@type ...) +EmacsLisp + Y unknown type of definitions + f functions + v variables + c constants + m macros + a aliases for functions + V aliases for variables + s inline function + i inline function + e errors + M minor modes + D derived major mode + C customizable variables + G customization groups + H customizable faces + T custom themes +Erlang + d macro definitions + f functions + m modules + r record definitions + t type definitions +Falcon + c classes + f functions + m class members + v variables + i imports +Flex + f functions + c classes + i interfaces + P packages + m methods + p properties + v global variables + l local variables [off] + C constants + I imports + x mxtags +Forth + w words + v variables + c constants +Fortran + b block data + c common blocks + e entry points + E enumerations + f functions + i interface contents, generic names, and operators + k type and structure components + l labels + L local, common block, and namelist variables [off] + m modules + M type bound procedures + n namelists + N enumeration values + p programs + P subprogram prototypes [off] + s subroutines + t derived types and structures + v program (global) and module variables + S submodules +FrontMatter + t titles +FunctionParameters + m methods + f functions +Fypp + m macros +Gdbinit + d definitions + D documents [off] + t toplevel variables + l local variables [off] +GDScript + c classes + m methods + v variables + C constants + g enumeration names + e enumerated values + z function parameters [off] + l local variables [off] + s signals +GemSpec + g gems +Go + p packages + f functions + c constants + t types + v variables + s structs + i interfaces + m struct members + M struct anonymous members + n interface method specification + Y unknown + P name for specifying imported package + a type aliases + R receivers [off] +GPerf + k keywords + h hash function names + l lookup function names + c class names + s string pool names +Haskell + t types + c type constructors + f functions + m modules +Haxe + m methods + c classes + e enumerations + v variables + i interfaces + t typedefs +HTML + a named anchors + c classes + t titles + h H1 headings + i H2 headings + j H3 headings + C stylesheets + I identifiers + J scripts +Iniconf + s sections + k keys +Inko + o Class definition + m Method definition + t Trait definition + a Attribute definition + c Constant definition + r Reopen class +IPythonCell + c cells +ITcl + c classes + m methods + v object-specific variables + C common variables + p procedures within the class namespace +Java + a annotation declarations + c classes + e enum constants + f fields + g enum types + i interfaces + l local variables [off] + m methods + p packages +JavaProperties + k keys +JavaScript + f functions + c classes + m methods + p properties + C constants + v global variables + g generators + G getters + S setters + M fields +JSON + o objects + a arrays + n numbers + s strings + b booleans + z nulls +Julia + c Constants + f Functions + g Fields + m Macros + n Modules + s Structures + t Types + Y name defined in other modules +Kconfig + c configs + m menus + M the main menu + k kconfig file + C choices + v macro variables +LdScript + S sections + s symbols + v versions + i input sections +LEX + r named regular expression + c start or exclusive condition +Lisp + Y unknown type of definitions + f functions + v variables + m macros + c constants +LiterateHaskell + t types + c type constructors + f functions + m modules +Lua + f functions + Y unknown language object [off] +M4 + d macros + I macro files +Man + t titles + s sections + S sub sections +Make + m macros + t targets + I makefiles +Markdown + c chapters + s sections + S level 2 sections + t level 3 sections + T level 4 sections + u level 5 sections + n footnotes + h hashtags +MatLab + f function + v variable + c class +Meson + P projects + V variables + S subdirs + B build targets + c custom targets + t tests + b benchmark targets + r run targets + m modules +MesonOptions + s strings + b booleans + c combos + i integers + a arrays + f features +Moose + c classes + m methods + a attributes + w wrappers + r roles +Myrddin + f functions + c constants + v variables + t types + r traits + p packages +NSIS + s sections + f functions + v variables + d definitions + m macros + S section groups + p macro parameters [off] + l language strings + i NSIS scripts +ObjectiveC + i class interface + I class implementation + P Protocol + m Object's method + c Class' method + v Global variable + E Object field + f A function + p A property + t A type alias + s A type structure + e An enumeration + M A preprocessor macro + C categories +OCaml + c classes + m Object's method + M Module or functor + v Global variable + p Signature item + t Type name + f A function + C A constructor + r A 'structure' field + e An exception +Org + d definitions + p parts + c chapters + s sections + u subsections + b subsubsections + P paragraphs + G subparagraphs +Passwd + u user names +Pascal + f functions + p procedures +Perl + c constants + f formats + l labels + p packages + s subroutines + d subroutine declarations [off] + M modules [off] + h marker for here document [off] +Perl6 + c classes + g grammars + m methods + o modules + p packages + r roles + u rules + b submethods + s subroutines + t tokens +PHP + c classes + d constant definitions + f functions + i interfaces + l local variables [off] + n namespaces + t traits + v variables + a aliases +PkgConfig + N display names + p packages + v variabels +Pod + c chapters + s sections + S subsections + t subsubsections +PowerShell + f functions + v variables + c classes + i filter + g enum names +Protobuf + p packages + m messages + f fields + e enum constants + g enum types + s services + r RPC methods + o oneof names + G groups + D .proto definition +PuppetManifest + c classes + d definitions + n nodes + r resources + v variables + p parameters + V virtual resources + t type aliases +Python + c classes + f functions + m class members + v variables + I name referring a module defined in other file + i modules + Y name referring a class/variable/function/module defined in other module + z function parameters [off] + l local variables [off] +PythonLoggingConfig + L logger sections + q logger qualnames +QemuHX + q QEMU Management Protocol dispatch table entries + i item in texinfo doc +QtMoc + s slots + S signals + p properties +Quarto + l chunk labels +RMarkdown + l chunk labels +R + f functions + l libraries + s sources + g global variables having values other than function() + v function variables having values other than function() + z function parameters inside function definitions [off] + c vectors explicitly created with `c()' + L lists explicitly created with `list()' + d data frame explicitly created with `data.frame()' + n names attribtes in vectors, lists, or dataframes +Rake + t tasks + n namespaces + f file tasks + d directory tasks + m multi tasks + x tasks defined with special constructor +Raku + c classes + g grammars + m methods + o modules + p packages + r roles + u rules + b submethods + s subroutines + t tokens +R6Class + c classes + m methods + f fields + a active binding functions +RSpec + d describes + c contexts + i things described with "it" +REXX + s subroutines +Robot + t testcases + k keywords + v variables +RpmMacros + m macros +RpmSpec + t tags + m macros + p packages + g global macros + p patch files +ReStructuredText + H titles + h sub titles + c chapters + s sections + S subsections + t subsubsections + C citations + T targets + d substitute definitions +Ruby + c classes + f methods + m modules + S singleton methods + C constants + A accessors + a aliases + L libraries +Rust + n module + s structural type + i trait interface + c implementation + f Function + g Enum + t Type Alias + v Global variable + M Macro Definition + m A struct field + e An enum variant + P A method + C A constant +S4Class + c classes + r representations + g generics + m methods +Scheme + f functions + s sets +SCSS + m mixins + f functions + v variables + c classes + P placeholder classes + i identities + z function parameters +Sh + a aliases + f functions + s script files + h label for here document +SLang + f functions + n namespaces +SML + e exception declarations + f function definitions + c functor definitions + s signature declarations + r structure declarations + t type definitions + v value bindings +SQL + C PLSQL_CCFLAGS + D domains + E record fields + L block label + P packages + R services + S schemas + T triggers + U publications + V views + b database + c cursors + d prototypes [off] + e events + f functions + i indexes + l local variables [off] + n synonyms + p procedures + r records [off] + s subtypes + t tables + v variables + x MobiLink Table Scripts + y MobiLink Conn Scripts + z MobiLink Properties +SystemdUnit + u units +SystemTap + p probe aliases + f functions + v variables + m macros +Tcl + p procedures + n namespaces + z procedure parameters [off] +TclOO + c classes + m methods +Terraform + r resources + d data + v variables + p providers + m modules + o output +TerraformVariables +Tex + p parts + c chapters + s sections + u subsections + b subsubsections + P paragraphs + G subparagraphs + l labels + i external input files + B bibliography items + C command created with \newcommand + o math operator created with \DeclareMathOperator + e environment created with \newenvironment + t theorem created with \newtheorem + N counter created with \newcounter +TeXBeamer + f frametitles + g framesubtitles +TTCN + M module definition + t type definition + c constant definition + d template definition + f function definition + s signature definition + C testcase definition + a altstep definition + G group definition + P module parameter definition + v variable instance + T timer instance + p port instance + m record/set/union member + e enumeration value +Txt2tags + s sections +TypeScript + f functions + c classes + i interfaces + g enums + e enumerators (values inside an enumeration) + m methods + n namespaces + z function parameters inside function definitions [off] + p properties + v variables + l local variables [off] + C constants + G generators + a aliases +V + f functions + p modules + v variables + c constants + R receivers in functions + l labels + s structs + m struct/interface members + n interface methods + e enumerators (values inside an enumeration) + g enumeration names + a type aliases + i interfaces + u union names + Y unknown (imported) variables, types and functions +Vera + c classes + d macro definitions + e enumerators (values inside an enumeration) + f function definitions + g enumeration names + i interfaces + l local variables [off] + m class, struct, and union members + p programs + P function prototypes [off] + s signals + t tasks + T typedefs + v variable definitions + x external variable declarations [off] + h included header files + D cpp macro parameters [off] +Verilog + c constants (parameter, specparam) + d text macros + e events + f functions + m modules + n net data types + p ports + r variable data types + t tasks + b blocks (begin, fork) + i instances of module +SystemVerilog + c constants (parameter, specparam, enum values) + d text macros + e events + f functions + m modules + n net data types + p ports + r variable data types + t tasks + b blocks (begin, fork) + i instances of module or interface + A assertions (assert, assume, cover, restrict) + C classes + V covergroups + E enumerators + I interfaces + M modports + K packages + P programs + Q prototypes (extern, pure) [off] + R properties + S structs and unions + T type declarations + H checkers + L clocking + q sequences + w struct and union members + l interface class + O constraints + N nettype declarations +VHDL + c constant declarations + t type definitions + T subtype definitions + r record names + e entity declarations + C component declarations [off] + d prototypes [off] + f function prototypes and declarations + p procedure prototypes and declarations + P package definitions + l local definitions [off] + a architectures + q port declarations + g generic declarations + s signal declarations + Q processes + v variables + A aliases +Vim + a autocommand groups + c user-defined commands + f function definitions + m maps + v variable definitions + n vimball filename + C constant definitions +WindRes + d dialogs + m menus + i icons + b bitmaps + c cursors + f fonts + v versions + a accelerators +YACC + t tokens + l labels +YumRepo + r repository id +Zephir + c classes + d constant definitions + f functions + i interfaces + l local variables [off] + n namespaces + t traits + v variables + a aliases +Zsh + a aliases + f functions + s script files + h label for here document +DBusIntrospect + a arguments + i interfaces + m methods + s signals + p properties + n nodes +Glade + c classes + h handlers +Maven2 + g group identifiers + a artifact identifiers + p properties + r repository identifiers +PlistXML + k keys +RelaxNG + e elements + a attributes + n named patterns +SVG + d ids in defs tags +XRC + o objects +XML + i id attributes + n namespace prefixes + r root elements +XSLT + s stylesheets + p parameters + m matched template + n named template + v variables +Yaml + a anchors +AnsiblePlaybook + p plays +I18nRubyGem + k translation keys at the leafs + m the middle component of keys [off] + l the root element representing a locale [off] +OpenAPI + d schemas + p paths + R responses + P parameters + t titles + s servers (or hosts in swagger) + T tags +Varlink + i interfaces + m methods + I input parameters + O output parameters + s structs + f fields + g enumeration names + e enumerators (values inside an enumeration) + E errors + d error descriptors +Kotlin + p packages + i interfaces + c classes + o objects + m methods + T typealiases + C constants + v variables +Thrift + s structs + x exceptions + u unions + n namespaces + e enumerators (values inside an enumeration) + g enumeration names + m members + C constants + t typedefs + v services + f functions + z parameters [off] + Z parameters in throws list [off] + T thrift files +Elm + m modules + n modules renamed + t types + c constructors + a aliases + p ports + f functions diff --git a/tests/Sanity-test-for-ctags/ctags-lang-list b/tests/Sanity-test-for-ctags/ctags-lang-list new file mode 100644 index 0000000..804037b --- /dev/null +++ b/tests/Sanity-test-for-ctags/ctags-lang-list @@ -0,0 +1,155 @@ +Abaqus +Abc +Ada +AnsiblePlaybook +Ant +Asciidoc +Asm +Asp +Autoconf +AutoIt +Automake +Awk +Basic +Bats +BETA +BibLaTeX +BibTeX +C +C# +C++ +Clojure +CMake +Cobol +CobolFree +CobolVariable +CPreProcessor +CSS +Ctags +CUDA +D +DBusIntrospect +Diff +DosBatch +DTD +DTS +Eiffel +Elixir +Elm +EmacsLisp +Erlang +Falcon +Flex +Forth +Fortran +FrontMatter +FunctionParameters +Fypp +Gdbinit +GDScript +GemSpec +Glade +Go +GPerf +Haskell +Haxe +HTML +I18nRubyGem +Iniconf +Inko +IPythonCell +ITcl +Java +JavaProperties +JavaScript +JSON +Julia +Kconfig +Kotlin +LdScript +LEX +Lisp +LiterateHaskell +Lua +M4 +Make +Man +Markdown +MatLab +Maven2 +Meson +MesonOptions +Moose +Myrddin +NSIS +ObjectiveC +OCaml +OpenAPI +Org +Pascal +Passwd +Perl +Perl6 +PHP +PkgConfig +PlistXML +Pod +PowerShell +Protobuf +PuppetManifest +Python +PythonLoggingConfig +QemuHX +QtMoc +Quarto +R +R6Class +Rake +Raku +RelaxNG +ReStructuredText +REXX +RMarkdown +Robot +RpmMacros +RpmSpec +RSpec +Ruby +Rust +S4Class +Scheme +SCSS +Sh +SLang +SML +SQL +SVG +SystemdUnit +SystemTap +SystemVerilog +Tcl +TclOO +Terraform +TerraformVariables +Tex +TeXBeamer +Thrift +TTCN +Txt2tags +TypeScript +Unknown [disabled] +V +Varlink +Vera +Verilog +VHDL +Vim +WindRes +XML +XRC +XSLT +YACC +Yaml +YumRepo +Zephir +Zsh diff --git a/tests/Sanity-test-for-ctags/ctags-maps-list b/tests/Sanity-test-for-ctags/ctags-maps-list new file mode 100644 index 0000000..6d9096b --- /dev/null +++ b/tests/Sanity-test-for-ctags/ctags-maps-list @@ -0,0 +1,155 @@ +Unknown +Abaqus *.inp +Abc *.abc *.abc +Ada *.adb *.ads *.Ada *.ada +Ant build.xml *.build.xml *.ant *.xml +Asciidoc *.asc *.adoc *.asciidoc *.asc *.adoc *.asciidoc +Asm *.A51 *.29[kK] *.[68][68][kKsSxX] *.[xX][68][68] *.asm *.ASM *.s *.S +Asp *.asp *.asa +Autoconf configure.in *.ac +AutoIt *.au3 *.AU3 *.aU3 *.Au3 +Automake Makefile.am GNUmakefile.am *.am +Awk *.awk *.gawk *.mawk +Basic *.bas *.bi *.bm *.bb *.pb +Bats *.bats +BETA *.bet +BibLaTeX +BibTeX *.bib +Clojure *.clj *.cljs *.cljc +CMake CMakeLists.txt *.cmake +C *.c +C++ *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.inl *.C *.H *.CPP *.CXX +CPreProcessor +CSS *.css +C# *.cs +Ctags *.ctags +Cobol *.cbl *.cob *.CBL *.COB +CobolFree +CobolVariable +CUDA *.cu *.cuh +D *.d *.di +Diff *.diff *.patch +DTD *.dtd *.mod +DTS *.dts *.dtsi +DosBatch *.bat *.cmd +Eiffel *.e +Elixir *.ex *.exs +EmacsLisp *.el +Erlang *.erl *.ERL *.hrl *.HRL +Falcon *.fal *.ftd +Flex *.as *.mxml +Forth *.fth *.forth *.fs *.4th *.f +Fortran *.f *.for *.ftn *.f77 *.f90 *.f95 *.f03 *.f08 *.f15 *.F *.FOR *.FTN *.F77 *.F90 *.F95 *.F03 *.F08 *.F15 +FrontMatter +FunctionParameters +Fypp *.fy +Gdbinit .gdbinit *.gdb +GDScript *.gd +GemSpec *.gemspec +Go *.go +GPerf *.perf *.gperf +Haskell *.hs +Haxe *.hx +HTML *.htm *.html +Iniconf *.ini *.conf +Inko *.inko +IPythonCell +ITcl *.itcl +Java *.java +JavaProperties *.properties +JavaScript *.js *.jsx *.mjs +JSON *.json +Julia *.jl +Kconfig Kconfig* +LdScript *.lds.S ld.script *.lds *.scr *.ld *.ldi +LEX *.lex *.l +Lisp *.cl *.clisp *.l *.lisp *.lsp +LiterateHaskell *.lhs +Lua *.lua +M4 *.m4 *.spt +Man *.1 *.2 *.3 *.4 *.5 *.6 *.7 *.8 *.9 *.3pm *.3stap *.7stap +Make [Mm]akefile GNUmakefile *.mak *.mk +Markdown *.md *.markdown +MatLab *.m +Meson meson.build +MesonOptions meson_options.txt +Moose +Myrddin *.myr +NSIS *.nsi *.nsh +ObjectiveC *.mm *.m *.h +OCaml *.ml *.mli *.aug +Org *.org +Passwd passwd +Pascal *.p *.pas +Perl *.pl *.pm *.ph *.plx *.perl +Perl6 *.p6 *.pm6 *.pm *.pl6 *.t6 +PHP *.php *.php3 *.php4 *.php5 *.php7 *.phtml +PkgConfig *.pc +Pod *.pod +PowerShell *.ps1 *.psm1 +Protobuf *.proto +PuppetManifest *.pp +Python *.py *.pyx *.pxd *.pxi *.scons *.wsgi +PythonLoggingConfig +QemuHX *.hx +QtMoc +Quarto *.qmd +RMarkdown *.rmd +R *.r *.R *.s *.q +Rake Rakefile *.rake +Raku *.raku *.rakumod *.rakutest *.rakudoc +R6Class +RSpec +REXX *.cmd *.rexx *.rx +Robot *.robot +RpmMacros +RpmSpec *.spec +ReStructuredText *.rest *.reST *.rst +Ruby *.rb *.ruby +Rust *.rs +S4Class +Scheme *.SCM *.SM *.sch *.scheme *.scm *.sm *.rkt +SCSS *.scss +Sh *.sh *.SH *.bsh *.bash *.ksh *.ash +SLang *.sl +SML *.sml *.sig +SQL *.sql +SystemdUnit *.service *.socket *.device *.mount *.automount *.swap *.target *.path *.timer *.snapshot *.slice +SystemTap *.stp *.stpm +Tcl *.tcl *.tk *.wish *.exp +TclOO +Terraform *.tf +TerraformVariables *.tfvars +Tex *.tex +TeXBeamer +TTCN *.ttcn *.ttcn3 +Txt2tags *.t2t *.t2t +TypeScript *.ts +V *.v +Vera *.vr *.vri *.vrh +Verilog *.v +SystemVerilog *.sv *.svh *.svi +VHDL *.vhdl *.vhd +Vim vimrc [._]vimrc gvimrc [._]gvimrc *.vim *.vba +WindRes *.rc +YACC *.y +YumRepo *.repo +Zephir *.zep +Zsh *.zsh +DBusIntrospect *.xml +Glade *.glade +Maven2 pom.xml *.pom *.xml +PlistXML *.plist +RelaxNG *.rng +SVG *.svg +XRC *.xrc +XML *.xml +XSLT *.xsl *.xslt +Yaml *.yml *.yaml +AnsiblePlaybook +I18nRubyGem +OpenAPI openapi.yaml +Varlink *.varlink +Kotlin *.kt *.kts +Thrift *.thrift +Elm *.elm diff --git a/tests/Sanity-test-for-ctags/main.fmf b/tests/Sanity-test-for-ctags/main.fmf new file mode 100644 index 0000000..a15acec --- /dev/null +++ b/tests/Sanity-test-for-ctags/main.fmf @@ -0,0 +1,13 @@ +summary: Run tests in all contexts +description: '' +contact: Than Ngo +component: + - ctags +test: ./runtest.sh +framework: beakerlib +recommend: + - ctags + - man-db +duration: 5m +extra-summary: /CoreOS/ctags/Sanity-test-for-ctags +extra-task: /CoreOS/ctags/Sanity-test-for-ctags diff --git a/tests/Sanity-test-for-ctags/runtest.sh b/tests/Sanity-test-for-ctags/runtest.sh new file mode 100755 index 0000000..52c366e --- /dev/null +++ b/tests/Sanity-test-for-ctags/runtest.sh @@ -0,0 +1,50 @@ +#! /bin/bash +# ctags basics + +PACKAGES="ctags" +# SERVICES="" + +# source the test script helpers +# requires beakerlib package +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +rlJournalStart + rlPhaseStartSetup + for p in $PACKAGES ; do + rlAssertRpm $p + done + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "cp * $TmpDir" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest "Smoke, sanity and function tests" + rlRun "ctags --version" 0 "Show version" + rlRun "ctags --help" 0 "Show help" + rlRun "ctags --license" 0 "Show license" + rlRun -s "ctags --list-kinds" 0 "Output a list of all tag kinds for all languages" + rlAssertNotDiffer ctags-kinds-list $rlRun_LOG + rlRun -s "ctags --list-languages" 0 "Output list of supported languages" + rlAssertNotDiffer ctags-lang-list $rlRun_LOG + rlRun -s "ctags --list-maps" 0 "Output list of language mappings" + rlAssertNotDiffer ctags-maps-list $rlRun_LOG + for l in python c ; do + rlRun "ctags -f test test.$l" 0 "Language: $l, $lWrite tags to file test" + rlAssertExists test + rlRun "ctags --fields=k test.%l" 0 "Language: $l, Include selected extension fields=k" + rlRun "ctags --fields=+afmikKlnsSz test.$l" 0 "Language: $l, Check extension fields=+afmikKlnsSz" + rlRun "ctags --extra=+fq --format=1 test.$l" 0 "Language: $l, Check options --extra=+fq --format=1" + done + # check man page + rlRun "man -P head ctags" 0 "Show the ctags man page" + # check for sane license and readme file + rlRun "head /usr/share/licenses/ctags/COPYING" 0 "Check for license file" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -fr $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd + +rlJournalPrintText +rlJournalEnd diff --git a/tests/Sanity-test-for-ctags/test.c b/tests/Sanity-test-for-ctags/test.c new file mode 100644 index 0000000..7cfe76d --- /dev/null +++ b/tests/Sanity-test-for-ctags/test.c @@ -0,0 +1,6 @@ +#include + +int main() { + printf("Hello World\n"); + return 0; +} diff --git a/tests/Sanity-test-for-ctags/test.python b/tests/Sanity-test-for-ctags/test.python new file mode 100644 index 0000000..0d73c24 --- /dev/null +++ b/tests/Sanity-test-for-ctags/test.python @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +def main(): + + return 0 + +if __name__ == '__main__': main() + +var = 'hi' +var2 = 'hi' # blah = blah