From a74f0a01c30280461a44fd3e9c73c7e72873506918ccfbaa8d905cd9d3b53741 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Thu, 28 Dec 2006 23:06:40 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ctags?expand=0&rev=1 --- .gitattributes | 23 ++ .gitignore | 1 + README.SuSE | 16 + ctags-5.6.diff | 61 ++++ ctags-5.6.tar.gz | 3 + ctags-ycp-parser.diff | 493 +++++++++++++++++++++++++++ ctags.changes | 176 ++++++++++ ctags.spec | 185 ++++++++++ etags-17.23.diff | 152 +++++++++ etags-17.23.tar.gz | 3 + etags-gnuctags-allow-duplicates.diff | 90 +++++ get_version_number.sh | 1 + ready | 0 13 files changed, 1204 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 README.SuSE create mode 100644 ctags-5.6.diff create mode 100644 ctags-5.6.tar.gz create mode 100644 ctags-ycp-parser.diff create mode 100644 ctags.changes create mode 100644 ctags.spec create mode 100644 etags-17.23.diff create mode 100644 etags-17.23.tar.gz create mode 100644 etags-gnuctags-allow-duplicates.diff create mode 100644 get_version_number.sh create mode 100644 ready diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/README.SuSE b/README.SuSE new file mode 100644 index 0000000..ced2325 --- /dev/null +++ b/README.SuSE @@ -0,0 +1,16 @@ + + Ctags and etags + =============== + +Unfortunately there exists several good ctags and etags implementations. +They have different supported languages and different options and +features. The several versions are: + + ctags ctags from Darren Hiebert, supports e.g. Eiffel + ctags -e etags from Darren Hiebert, supports e.g. Eiffel + gnuctags ctags from Emacs sources, supports e.g. Lisp + etags etags from Emacs sources, supports e.g. Lisp + +The version of Darren Hiebert is also called the Exuberant Ctags. + +Your SuSE team diff --git a/ctags-5.6.diff b/ctags-5.6.diff new file mode 100644 index 0000000..6d72668 --- /dev/null +++ b/ctags-5.6.diff @@ -0,0 +1,61 @@ +--- ctags.1 ++++ ctags.1 2001/12/14 14:41:12 +@@ -9,12 +9,29 @@ + .TP 6 + \fBctags\fP [\fBoptions\fP] [\fIfile(s)\fP] + .TP 6 +-\fBetags\fP [\fBoptions\fP] [\fIfile(s)\fP] ++\fBctags\fP \fB-e\fP [\fBoptions\fP] [\fIfile(s)\fP] + ++.SH NOTE ++There are three different versions of the ++\fBctags\fP program on SuSE Linux. ++Besides this one you might want to use either ++.BR gnuctags (1), ++supporting wide variety of programming languages ++and originaly distributed with emacs, or ++.BR gctags (1), ++which comes with ++.BR global (1) ++and supports for example Yacc. ++ ++For use with ++.BR emacs (1) ++the best choice is perhaps ++.BR etags (1), ++but it's also possible to use \fBctags\ \-e\fP, ++as described herein, since it supports for example Eiffel. + + .SH "DESCRIPTION" +-The \fBctags\fP and \fBetags\fP programs (hereinafter collectively referred to +-as \fBctags\fP, except where distinguished) generate an index (or "tag") file ++The \fBctags\fP program generates an index (or "tag") file + for a variety of language objects found in \fIfile(s)\fP. + This tag file allows these items to be quickly and easily located by a text + editor or other utility. A "tag" signifies a language object for which an +@@ -1484,7 +1501,7 @@ + .TP 8 + .B ETAGS + Similar to the \fBCTAGS\fP variable above, this variable, if found, will be +-read when \fBetags\fP starts. If this variable is not found, \fBetags\fP will ++read when \fBctags\ \-e\fP starts. If this variable is not found, \fBctags\ \-e\fP will + try to use \fBCTAGS\fP instead. + + .TP 8 +@@ -1535,9 +1552,15 @@ + The default tag file created by \fBctags\fP. + .TP + .I TAGS +-The default tag file created by \fBetags\fP. ++The default tag file created by \fBctags -e\fP. + + .SH "SEE ALSO" ++.BR etags (1), ++.BR gctags (1), ++.BR global (1), ++.BR gnuctags (1). ++ ++.PP + The official Exuberant Ctags web site at: + + .RS diff --git a/ctags-5.6.tar.gz b/ctags-5.6.tar.gz new file mode 100644 index 0000000..6c7607f --- /dev/null +++ b/ctags-5.6.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55c0693845644735f76242fa717efd92d9cb99543f7a7fa65d63bdd083c4eb95 +size 267019 diff --git a/ctags-ycp-parser.diff b/ctags-ycp-parser.diff new file mode 100644 index 0000000..69bd427 --- /dev/null +++ b/ctags-ycp-parser.diff @@ -0,0 +1,493 @@ +--- c.c ++++ c.c +@@ -61,35 +61,39 @@ + */ + typedef enum eKeywordId { + KEYWORD_NONE = -1, +- KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT, +- KEYWORD_BOOLEAN, KEYWORD_BYTE, KEYWORD_BAD_STATE, KEYWORD_BAD_TRANS, +- KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT, ++ KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT, KEYWORD_ANY, ++ KEYWORD_BOOLEAN, KEYWORD_BYTE, KEYWORD_BYTEBLOCK, KEYWORD_BAD_STATE, ++ KEYWORD_BAD_TRANS, ++ KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT, KEYWORD_BLOCK, + KEYWORD_CASE, KEYWORD_CATCH, KEYWORD_CHAR, KEYWORD_CLASS, KEYWORD_CONST, + KEYWORD_CONSTRAINT, KEYWORD_COVERAGE_BLOCK, KEYWORD_COVERAGE_DEF, +- KEYWORD_DEFAULT, KEYWORD_DELEGATE, KEYWORD_DELETE, KEYWORD_DO, ++ KEYWORD_DEFAULT, KEYWORD_DECLARATION, KEYWORD_DELEGATE, KEYWORD_DELETE, ++ KEYWORD_DO, + KEYWORD_DOUBLE, +- KEYWORD_ELSE, KEYWORD_ENUM, KEYWORD_EXPLICIT, KEYWORD_EXTERN, ++ KEYWORD_ELSE, KEYWORD_ENUM, KEYWORD_EXPLICIT, KEYWORD_EXPRESSION, ++ KEYWORD_EXTERN, + KEYWORD_EXTENDS, KEYWORD_EVENT, + KEYWORD_FINAL, KEYWORD_FLOAT, KEYWORD_FOR, KEYWORD_FRIEND, KEYWORD_FUNCTION, + KEYWORD_GOTO, + KEYWORD_IF, KEYWORD_IMPLEMENTS, KEYWORD_IMPORT, KEYWORD_INLINE, KEYWORD_INT, + KEYWORD_INOUT, KEYWORD_INPUT, KEYWORD_INTEGER, KEYWORD_INTERFACE, + KEYWORD_INTERNAL, +- KEYWORD_LOCAL, KEYWORD_LONG, ++ KEYWORD_LIST, KEYWORD_LOCAL, KEYWORD_LOCALE, KEYWORD_LONG, + KEYWORD_M_BAD_STATE, KEYWORD_M_BAD_TRANS, KEYWORD_M_STATE, KEYWORD_M_TRANS, +- KEYWORD_MUTABLE, ++ KEYWORD_MAP, KEYWORD_MUTABLE, + KEYWORD_NAMESPACE, KEYWORD_NEW, KEYWORD_NEWCOV, KEYWORD_NATIVE, + KEYWORD_OPERATOR, KEYWORD_OUTPUT, KEYWORD_OVERLOAD, KEYWORD_OVERRIDE, +- KEYWORD_PACKED, KEYWORD_PORT, KEYWORD_PACKAGE, KEYWORD_PRIVATE, +- KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC, ++ KEYWORD_PACKED, KEYWORD_PATH, KEYWORD_PORT, KEYWORD_PACKAGE, ++ KEYWORD_PRIVATE, ++ KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC, KEYWORD_REPEAT, + KEYWORD_REGISTER, KEYWORD_RETURN, + KEYWORD_SHADOW, KEYWORD_STATE, + KEYWORD_SHORT, KEYWORD_SIGNED, KEYWORD_STATIC, KEYWORD_STRING, +- KEYWORD_STRUCT, KEYWORD_SWITCH, KEYWORD_SYNCHRONIZED, +- KEYWORD_TASK, KEYWORD_TEMPLATE, KEYWORD_THIS, KEYWORD_THROW, ++ KEYWORD_STRUCT, KEYWORD_SWITCH, KEYWORD_SYNCHRONIZED, KEYWORD_SYMBOL, ++ KEYWORD_TASK, KEYWORD_TEMPLATE, KEYWORD_TERM, KEYWORD_THIS, KEYWORD_THROW, + KEYWORD_THROWS, KEYWORD_TRANSIENT, KEYWORD_TRANS, KEYWORD_TRANSITION, + KEYWORD_TRY, KEYWORD_TYPEDEF, KEYWORD_TYPENAME, +- KEYWORD_UINT, KEYWORD_ULONG, KEYWORD_UNION, KEYWORD_UNSIGNED, KEYWORD_USHORT, ++ KEYWORD_UINT, KEYWORD_ULONG, KEYWORD_UNION, KEYWORD_UNSIGNED, KEYWORD_UNTIL, KEYWORD_USHORT, + KEYWORD_USING, + KEYWORD_VIRTUAL, KEYWORD_VOID, KEYWORD_VOLATILE, + KEYWORD_WCHAR_T, KEYWORD_WHILE +@@ -101,7 +105,7 @@ + typedef struct sKeywordDesc { + const char *name; + keywordId id; +- short isValid [5]; /* indicates languages for which kw is valid */ ++ short isValid [6]; /* indicates languages for which kw is valid */ + } keywordDesc; + + /* Used for reporting the type of object parsed by nextToken (). +@@ -137,6 +141,7 @@ + typedef enum eDeclaration { + DECL_NONE, + DECL_BASE, /* base type (default) */ ++ DECL_BLOCK, /* YCP unnamed block */ + DECL_CLASS, + DECL_ENUM, + DECL_EVENT, +@@ -258,6 +263,7 @@ + static langType Lang_csharp; + static langType Lang_java; + static langType Lang_vera; ++static langType Lang_ycp; + static vString *Signature; + static boolean CollectingSignature; + +@@ -354,110 +360,138 @@ + { FALSE, 'x', "externvar", "external variable declarations"} + }; + ++/* Used to index into the YCPKinds table. */ ++typedef enum { ++ YK_UNDEFINED = -1, ++ YK_FUNCTION, YK_PROTOTYPE, ++ YK_LOCAL, ++ YK_VARIABLE ++} ycpKind; ++ ++static kindOption YCPKinds [] = { ++ { TRUE, 'f', "function", "function definitions"}, ++ { FALSE, 'p', "prototype", "function prototypes"}, ++ { FALSE, 'l', "local", "local variables"}, ++ { TRUE, 'v', "variable", "variable definitions"}, ++}; ++ + static const keywordDesc KeywordTable [] = { +- /* C++ */ +- /* ANSI C | C# Java */ +- /* | | | | Vera */ +- /* keyword keyword ID | | | | | */ +- { "__attribute__", KEYWORD_ATTRIBUTE, { 1, 1, 1, 0, 0 } }, +- { "abstract", KEYWORD_ABSTRACT, { 0, 0, 1, 1, 0 } }, +- { "bad_state", KEYWORD_BAD_STATE, { 0, 0, 0, 0, 1 } }, +- { "bad_trans", KEYWORD_BAD_TRANS, { 0, 0, 0, 0, 1 } }, +- { "bind", KEYWORD_BIND, { 0, 0, 0, 0, 1 } }, +- { "bind_var", KEYWORD_BIND_VAR, { 0, 0, 0, 0, 1 } }, +- { "bit", KEYWORD_BIT, { 0, 0, 0, 0, 1 } }, +- { "boolean", KEYWORD_BOOLEAN, { 0, 0, 0, 1, 0 } }, +- { "byte", KEYWORD_BYTE, { 0, 0, 0, 1, 0 } }, +- { "case", KEYWORD_CASE, { 1, 1, 1, 1, 0 } }, +- { "catch", KEYWORD_CATCH, { 0, 1, 1, 0, 0 } }, +- { "char", KEYWORD_CHAR, { 1, 1, 1, 1, 0 } }, +- { "class", KEYWORD_CLASS, { 0, 1, 1, 1, 1 } }, +- { "const", KEYWORD_CONST, { 1, 1, 1, 1, 0 } }, +- { "constraint", KEYWORD_CONSTRAINT, { 0, 0, 0, 0, 1 } }, +- { "coverage_block", KEYWORD_COVERAGE_BLOCK, { 0, 0, 0, 0, 1 } }, +- { "coverage_def", KEYWORD_COVERAGE_DEF, { 0, 0, 0, 0, 1 } }, +- { "do", KEYWORD_DO, { 1, 1, 1, 1, 0 } }, +- { "default", KEYWORD_DEFAULT, { 1, 1, 1, 1, 0 } }, +- { "delegate", KEYWORD_DELEGATE, { 0, 0, 1, 0, 0 } }, +- { "delete", KEYWORD_DELETE, { 0, 1, 0, 0, 0 } }, +- { "double", KEYWORD_DOUBLE, { 1, 1, 1, 1, 0 } }, +- { "else", KEYWORD_ELSE, { 1, 1, 0, 1, 0 } }, +- { "enum", KEYWORD_ENUM, { 1, 1, 1, 0, 1 } }, +- { "event", KEYWORD_EVENT, { 0, 0, 1, 0, 1 } }, +- { "explicit", KEYWORD_EXPLICIT, { 0, 1, 1, 0, 0 } }, +- { "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1 } }, +- { "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1 } }, +- { "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0 } }, +- { "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0 } }, +- { "for", KEYWORD_FOR, { 1, 1, 1, 1, 0 } }, +- { "friend", KEYWORD_FRIEND, { 0, 1, 0, 0, 0 } }, +- { "function", KEYWORD_FUNCTION, { 0, 0, 0, 0, 1 } }, +- { "goto", KEYWORD_GOTO, { 1, 1, 1, 1, 0 } }, +- { "if", KEYWORD_IF, { 1, 1, 1, 1, 0 } }, +- { "implements", KEYWORD_IMPLEMENTS, { 0, 0, 0, 1, 0 } }, +- { "import", KEYWORD_IMPORT, { 0, 0, 0, 1, 0 } }, +- { "inline", KEYWORD_INLINE, { 0, 1, 0, 0, 0 } }, +- { "inout", KEYWORD_INOUT, { 0, 0, 0, 0, 1 } }, +- { "input", KEYWORD_INPUT, { 0, 0, 0, 0, 1 } }, +- { "int", KEYWORD_INT, { 1, 1, 1, 1, 0 } }, +- { "integer", KEYWORD_INTEGER, { 0, 0, 0, 0, 1 } }, +- { "interface", KEYWORD_INTERFACE, { 0, 0, 1, 1, 1 } }, +- { "internal", KEYWORD_INTERNAL, { 0, 0, 1, 0, 0 } }, +- { "local", KEYWORD_LOCAL, { 0, 0, 0, 0, 1 } }, +- { "long", KEYWORD_LONG, { 1, 1, 1, 1, 0 } }, +- { "m_bad_state", KEYWORD_M_BAD_STATE, { 0, 0, 0, 0, 1 } }, +- { "m_bad_trans", KEYWORD_M_BAD_TRANS, { 0, 0, 0, 0, 1 } }, +- { "m_state", KEYWORD_M_STATE, { 0, 0, 0, 0, 1 } }, +- { "m_trans", KEYWORD_M_TRANS, { 0, 0, 0, 0, 1 } }, +- { "mutable", KEYWORD_MUTABLE, { 0, 1, 0, 0, 0 } }, +- { "namespace", KEYWORD_NAMESPACE, { 0, 1, 1, 0, 0 } }, +- { "native", KEYWORD_NATIVE, { 0, 0, 0, 1, 0 } }, +- { "new", KEYWORD_NEW, { 0, 1, 1, 1, 0 } }, +- { "newcov", KEYWORD_NEWCOV, { 0, 0, 0, 0, 1 } }, +- { "operator", KEYWORD_OPERATOR, { 0, 1, 1, 0, 0 } }, +- { "output", KEYWORD_OUTPUT, { 0, 0, 0, 0, 1 } }, +- { "overload", KEYWORD_OVERLOAD, { 0, 1, 0, 0, 0 } }, +- { "override", KEYWORD_OVERRIDE, { 0, 0, 1, 0, 0 } }, +- { "package", KEYWORD_PACKAGE, { 0, 0, 0, 1, 0 } }, +- { "packed", KEYWORD_PACKED, { 0, 0, 0, 0, 1 } }, +- { "port", KEYWORD_PORT, { 0, 0, 0, 0, 1 } }, +- { "private", KEYWORD_PRIVATE, { 0, 1, 1, 1, 0 } }, +- { "program", KEYWORD_PROGRAM, { 0, 0, 0, 0, 1 } }, +- { "protected", KEYWORD_PROTECTED, { 0, 1, 1, 1, 1 } }, +- { "public", KEYWORD_PUBLIC, { 0, 1, 1, 1, 1 } }, +- { "register", KEYWORD_REGISTER, { 1, 1, 0, 0, 0 } }, +- { "return", KEYWORD_RETURN, { 1, 1, 1, 1, 0 } }, +- { "shadow", KEYWORD_SHADOW, { 0, 0, 0, 0, 1 } }, +- { "short", KEYWORD_SHORT, { 1, 1, 1, 1, 0 } }, +- { "signed", KEYWORD_SIGNED, { 1, 1, 0, 0, 0 } }, +- { "state", KEYWORD_STATE, { 0, 0, 0, 0, 1 } }, +- { "static", KEYWORD_STATIC, { 1, 1, 1, 1, 1 } }, +- { "string", KEYWORD_STRING, { 0, 0, 1, 0, 1 } }, +- { "struct", KEYWORD_STRUCT, { 1, 1, 1, 0, 0 } }, +- { "switch", KEYWORD_SWITCH, { 1, 1, 1, 1, 0 } }, +- { "synchronized", KEYWORD_SYNCHRONIZED, { 0, 0, 0, 1, 0 } }, +- { "task", KEYWORD_TASK, { 0, 0, 0, 0, 1 } }, +- { "template", KEYWORD_TEMPLATE, { 0, 1, 0, 0, 0 } }, +- { "this", KEYWORD_THIS, { 0, 1, 1, 1, 0 } }, +- { "throw", KEYWORD_THROW, { 0, 1, 1, 1, 0 } }, +- { "throws", KEYWORD_THROWS, { 0, 0, 0, 1, 0 } }, +- { "trans", KEYWORD_TRANS, { 0, 0, 0, 0, 1 } }, +- { "transition", KEYWORD_TRANSITION, { 0, 0, 0, 0, 1 } }, +- { "transient", KEYWORD_TRANSIENT, { 0, 0, 0, 1, 0 } }, +- { "try", KEYWORD_TRY, { 0, 1, 1, 0, 0 } }, +- { "typedef", KEYWORD_TYPEDEF, { 1, 1, 1, 0, 1 } }, +- { "typename", KEYWORD_TYPENAME, { 0, 1, 0, 0, 0 } }, +- { "uint", KEYWORD_UINT, { 0, 0, 1, 0, 0 } }, +- { "ulong", KEYWORD_ULONG, { 0, 0, 1, 0, 0 } }, +- { "union", KEYWORD_UNION, { 1, 1, 0, 0, 0 } }, +- { "unsigned", KEYWORD_UNSIGNED, { 1, 1, 1, 0, 0 } }, +- { "ushort", KEYWORD_USHORT, { 0, 0, 1, 0, 0 } }, +- { "using", KEYWORD_USING, { 0, 1, 1, 0, 0 } }, +- { "virtual", KEYWORD_VIRTUAL, { 0, 1, 1, 0, 1 } }, +- { "void", KEYWORD_VOID, { 1, 1, 1, 1, 1 } }, +- { "volatile", KEYWORD_VOLATILE, { 1, 1, 1, 1, 0 } }, +- { "wchar_t", KEYWORD_WCHAR_T, { 1, 1, 1, 0, 0 } }, +- { "while", KEYWORD_WHILE, { 1, 1, 1, 1, 0 } } ++ /* C++ YCP */ ++ /* ANSI C | C# Java | */ ++ /* | | | | Vera */ ++ /* keyword keyword ID | | | | | | */ ++ { "__attribute__", KEYWORD_ATTRIBUTE, { 1, 1, 1, 0, 0, 0 } }, ++ { "abstract", KEYWORD_ABSTRACT, { 0, 0, 1, 1, 0, 0 } }, ++ { "any", KEYWORD_ANY, { 0, 0, 0, 0, 0, 1 } }, ++ { "bad_state", KEYWORD_BAD_STATE, { 0, 0, 0, 0, 1, 0 } }, ++ { "bad_trans", KEYWORD_BAD_TRANS, { 0, 0, 0, 0, 1, 0 } }, ++ { "bind", KEYWORD_BIND, { 0, 0, 0, 0, 1, 0 } }, ++ { "bind_var", KEYWORD_BIND_VAR, { 0, 0, 0, 0, 1, 0 } }, ++ { "bit", KEYWORD_BIT, { 0, 0, 0, 0, 1, 0 } }, ++ { "block", KEYWORD_BLOCK, { 0, 0, 0, 0, 0, 1 } }, ++ { "boolean", KEYWORD_BOOLEAN, { 0, 0, 0, 1, 0, 1 } }, ++ { "byte", KEYWORD_BYTE, { 0, 0, 0, 1, 0, 0 } }, ++ { "byteblock", KEYWORD_BYTEBLOCK, { 0, 0, 0, 0, 0, 1 } }, ++ { "case", KEYWORD_CASE, { 1, 1, 1, 1, 0, 0 } }, ++ { "catch", KEYWORD_CATCH, { 0, 1, 1, 0, 0, 0 } }, ++ { "char", KEYWORD_CHAR, { 1, 1, 1, 1, 0, 0 } }, ++ { "class", KEYWORD_CLASS, { 0, 1, 1, 1, 1, 0 } }, ++ { "const", KEYWORD_CONST, { 1, 1, 1, 1, 0, 0 } }, ++ { "constraint", KEYWORD_CONSTRAINT, { 0, 0, 0, 0, 1, 0 } }, ++ { "coverage_block", KEYWORD_COVERAGE_BLOCK, { 0, 0, 0, 0, 1, 0 } }, ++ { "coverage_def", KEYWORD_COVERAGE_DEF, { 0, 0, 0, 0, 1, 0 } }, ++ { "declaration", KEYWORD_DECLARATION, { 0, 0, 0, 0, 0, 1 } }, ++ { "do", KEYWORD_DO, { 1, 1, 1, 1, 0, 1 } }, ++ { "default", KEYWORD_DEFAULT, { 1, 1, 1, 1, 0, 0 } }, ++ { "delegate", KEYWORD_DELEGATE, { 0, 0, 1, 0, 0, 0 } }, ++ { "delete", KEYWORD_DELETE, { 0, 1, 0, 0, 0, 0 } }, ++ { "double", KEYWORD_DOUBLE, { 1, 1, 1, 1, 0, 0 } }, ++ { "else", KEYWORD_ELSE, { 1, 1, 0, 1, 0, 1 } }, ++ { "enum", KEYWORD_ENUM, { 1, 1, 1, 0, 1, 1 } }, ++ { "event", KEYWORD_EVENT, { 0, 0, 1, 0, 1, 0 } }, ++ { "explicit", KEYWORD_EXPLICIT, { 0, 1, 1, 0, 0, 0 } }, ++ { "expression", KEYWORD_EXPRESSION, { 0, 0, 0, 0, 0, 1 } }, ++ { "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1, 0 } }, ++ { "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1, 0 } }, ++ { "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0, 1 } }, ++ { "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0, 1 } }, ++ { "for", KEYWORD_FOR, { 1, 1, 1, 1, 0, 0 } }, ++ { "friend", KEYWORD_FRIEND, { 0, 1, 0, 0, 0, 0 } }, ++ { "function", KEYWORD_FUNCTION, { 0, 0, 0, 0, 1, 0 } }, ++ { "goto", KEYWORD_GOTO, { 1, 1, 1, 1, 0, 0 } }, ++ { "if", KEYWORD_IF, { 1, 1, 1, 1, 0, 1 } }, ++ { "implements", KEYWORD_IMPLEMENTS, { 0, 0, 0, 1, 0, 0 } }, ++ { "import", KEYWORD_IMPORT, { 0, 0, 0, 1, 0, 1 } }, ++ { "inline", KEYWORD_INLINE, { 0, 1, 0, 0, 0, 0 } }, ++ { "inout", KEYWORD_INOUT, { 0, 0, 0, 0, 1, 0 } }, ++ { "input", KEYWORD_INPUT, { 0, 0, 0, 0, 1, 0 } }, ++ { "int", KEYWORD_INT, { 1, 1, 1, 1, 0, 0 } }, ++ { "integer", KEYWORD_INTEGER, { 0, 0, 0, 0, 1, 1 } }, ++ { "interface", KEYWORD_INTERFACE, { 0, 0, 1, 1, 1, 0 } }, ++ { "internal", KEYWORD_INTERNAL, { 0, 0, 1, 0, 0, 0 } }, ++ { "list", KEYWORD_LIST, { 0, 0, 0, 0, 0, 1 } }, ++ { "local", KEYWORD_LOCAL, { 0, 0, 0, 0, 1, 0 } }, ++ { "locale", KEYWORD_LOCALE, { 0, 0, 0, 0, 0, 1 } }, ++ { "long", KEYWORD_LONG, { 1, 1, 1, 1, 0, 0 } }, ++ { "m_bad_state", KEYWORD_M_BAD_STATE, { 0, 0, 0, 0, 1, 0 } }, ++ { "m_bad_trans", KEYWORD_M_BAD_TRANS, { 0, 0, 0, 0, 1, 0 } }, ++ { "m_state", KEYWORD_M_STATE, { 0, 0, 0, 0, 1, 0 } }, ++ { "m_trans", KEYWORD_M_TRANS, { 0, 0, 0, 0, 1, 0 } }, ++ { "map", KEYWORD_MAP, { 0, 0, 0, 0, 0, 1 } }, ++ { "mutable", KEYWORD_MUTABLE, { 0, 1, 0, 0, 0, 0 } }, ++ { "namespace", KEYWORD_NAMESPACE, { 0, 1, 1, 0, 0, 0 } }, ++ { "native", KEYWORD_NATIVE, { 0, 0, 0, 1, 0, 0 } }, ++ { "new", KEYWORD_NEW, { 0, 1, 1, 1, 0, 0 } }, ++ { "newcov", KEYWORD_NEWCOV, { 0, 0, 0, 0, 1, 0 } }, ++ { "operator", KEYWORD_OPERATOR, { 0, 1, 1, 0, 0, 0 } }, ++ { "output", KEYWORD_OUTPUT, { 0, 0, 0, 0, 1, 0 } }, ++ { "overload", KEYWORD_OVERLOAD, { 0, 1, 0, 0, 0, 0 } }, ++ { "override", KEYWORD_OVERRIDE, { 0, 0, 1, 0, 0, 0 } }, ++ { "package", KEYWORD_PACKAGE, { 0, 0, 0, 1, 0, 0 } }, ++ { "packed", KEYWORD_PACKED, { 0, 0, 0, 0, 1, 0 } }, ++ { "path", KEYWORD_PATH, { 0, 0, 0, 0, 0, 1 } }, ++ { "port", KEYWORD_PORT, { 0, 0, 0, 0, 1, 0 } }, ++ { "private", KEYWORD_PRIVATE, { 0, 1, 1, 1, 0, 0 } }, ++ { "program", KEYWORD_PROGRAM, { 0, 0, 0, 0, 1, 0 } }, ++ { "protected", KEYWORD_PROTECTED, { 0, 1, 1, 1, 1, 0 } }, ++ { "public", KEYWORD_PUBLIC, { 0, 1, 1, 1, 1, 0 } }, ++ { "repeat", KEYWORD_REPEAT, { 0, 0, 0, 0, 0, 1 } }, ++ { "register", KEYWORD_REGISTER, { 1, 1, 0, 0, 0, 0 } }, ++ { "return", KEYWORD_RETURN, { 1, 1, 1, 1, 0, 1 } }, ++ { "shadow", KEYWORD_SHADOW, { 0, 0, 0, 0, 1, 0 } }, ++ { "short", KEYWORD_SHORT, { 1, 1, 1, 1, 0, 0 } }, ++ { "signed", KEYWORD_SIGNED, { 1, 1, 0, 0, 0, 0 } }, ++ { "state", KEYWORD_STATE, { 0, 0, 0, 0, 1, 0 } }, ++ { "static", KEYWORD_STATIC, { 1, 1, 1, 1, 1, 0 } }, ++ { "string", KEYWORD_STRING, { 0, 0, 1, 0, 1, 1 } }, ++ { "struct", KEYWORD_STRUCT, { 1, 1, 1, 0, 0, 0 } }, ++ { "switch", KEYWORD_SWITCH, { 1, 1, 1, 1, 0, 0 } }, ++ { "synchronized", KEYWORD_SYNCHRONIZED, { 0, 0, 0, 1, 0, 0 } }, ++ { "symbol", KEYWORD_SYMBOL, { 0, 0, 0, 0, 0, 1 } }, ++ { "task", KEYWORD_TASK, { 0, 0, 0, 0, 1, 0 } }, ++ { "template", KEYWORD_TEMPLATE, { 0, 1, 0, 0, 0, 0 } }, ++ { "term", KEYWORD_TERM, { 0, 0, 0, 0, 0, 1 } }, ++ { "this", KEYWORD_THIS, { 0, 1, 1, 1, 0, 0 } }, ++ { "throw", KEYWORD_THROW, { 0, 1, 1, 1, 0, 0 } }, ++ { "throws", KEYWORD_THROWS, { 0, 0, 0, 1, 0, 0 } }, ++ { "trans", KEYWORD_TRANS, { 0, 0, 0, 0, 1, 0 } }, ++ { "transition", KEYWORD_TRANSITION, { 0, 0, 0, 0, 1, 0 } }, ++ { "transient", KEYWORD_TRANSIENT, { 0, 0, 0, 1, 0, 0 } }, ++ { "try", KEYWORD_TRY, { 0, 1, 1, 0, 0, 0 } }, ++ { "typedef", KEYWORD_TYPEDEF, { 1, 1, 1, 0, 1, 0 } }, ++ { "typename", KEYWORD_TYPENAME, { 0, 1, 0, 0, 0, 0 } }, ++ { "uint", KEYWORD_UINT, { 0, 0, 1, 0, 0, 0 } }, ++ { "ulong", KEYWORD_ULONG, { 0, 0, 1, 0, 0, 0 } }, ++ { "union", KEYWORD_UNION, { 1, 1, 0, 0, 0, 0 } }, ++ { "unsigned", KEYWORD_UNSIGNED, { 1, 1, 1, 0, 0, 0 } }, ++ { "until", KEYWORD_UNTIL, { 0, 0, 0, 0, 0, 1 } }, ++ { "ushort", KEYWORD_USHORT, { 0, 0, 1, 0, 0, 0 } }, ++ { "using", KEYWORD_USING, { 0, 1, 1, 0, 0, 0 } }, ++ { "virtual", KEYWORD_VIRTUAL, { 0, 1, 1, 0, 1, 0 } }, ++ { "void", KEYWORD_VOID, { 1, 1, 1, 1, 1, 1 } }, ++ { "volatile", KEYWORD_VOLATILE, { 1, 1, 1, 1, 0, 0 } }, ++ { "wchar_t", KEYWORD_WCHAR_T, { 1, 1, 1, 0, 0, 0 } }, ++ { "while", KEYWORD_WHILE, { 1, 1, 1, 1, 0, 1 } } + }; + + /* +@@ -877,6 +911,21 @@ + return result; + } + ++static ycpKind ycpTagKind (const tagType type) ++{ ++ ycpKind result = YK_UNDEFINED; ++ switch (type) ++ { ++ case TAG_FUNCTION: result = YK_FUNCTION; break; ++ case TAG_PROTOTYPE: result = YK_PROTOTYPE; break; ++ case TAG_LOCAL: result = YK_LOCAL; break; ++ case TAG_VARIABLE: result = YK_VARIABLE; break; ++ ++ default: Assert ("Bad YCP tag type" == NULL); break; ++ } ++ return result; ++} ++ + static const char *tagName (const tagType type) + { + const char* result; +@@ -886,6 +935,8 @@ + result = JavaKinds [javaTagKind (type)].name; + else if (isLanguage (Lang_vera)) + result = VeraKinds [veraTagKind (type)].name; ++ else if (isLanguage (Lang_ycp)) ++ result = YCPKinds [ycpTagKind (type)].name; + else + result = CKinds [cTagKind (type)].name; + return result; +@@ -900,6 +951,8 @@ + result = JavaKinds [javaTagKind (type)].letter; + else if (isLanguage (Lang_vera)) + result = VeraKinds [veraTagKind (type)].letter; ++ else if (isLanguage (Lang_ycp)) ++ result = YCPKinds [ycpTagKind (type)].letter; + else + result = CKinds [cTagKind (type)].letter; + return result; +@@ -955,7 +1008,8 @@ + + static void addContextSeparator (vString *const scope) + { +- if (isLanguage (Lang_c) || isLanguage (Lang_cpp)) ++ if (isLanguage (Lang_c) || isLanguage (Lang_cpp) || ++ isLanguage (Lang_ycp)) + vStringCatS (scope, "::"); + else if (isLanguage (Lang_java) || isLanguage (Lang_csharp)) + vStringCatS (scope, "."); +@@ -1690,9 +1744,11 @@ + + case KEYWORD_NONE: processName (st); break; + case KEYWORD_ABSTRACT: st->implementation = IMP_ABSTRACT; break; ++ case KEYWORD_ANY: st->declaration = DECL_BASE; break; + case KEYWORD_ATTRIBUTE: skipParens (); initToken (token); break; + case KEYWORD_BIND: st->declaration = DECL_BASE; break; + case KEYWORD_BIT: st->declaration = DECL_BASE; break; ++ case KEYWORD_BYTEBLOCK: st->declaration = DECL_BASE; break; + case KEYWORD_CATCH: skipParens (); skipBraces (); break; + case KEYWORD_CHAR: st->declaration = DECL_BASE; break; + case KEYWORD_CLASS: st->declaration = DECL_CLASS; break; +@@ -1711,11 +1767,15 @@ + case KEYWORD_INT: st->declaration = DECL_BASE; break; + case KEYWORD_INTEGER: st->declaration = DECL_BASE; break; + case KEYWORD_INTERFACE: st->declaration = DECL_INTERFACE; break; ++ case KEYWORD_LIST: st->declaration = DECL_BASE; break; + case KEYWORD_LOCAL: setAccess (st, ACCESS_LOCAL); break; ++ case KEYWORD_LOCALE: st->declaration = DECL_BASE; break; + case KEYWORD_LONG: st->declaration = DECL_BASE; break; ++ case KEYWORD_MAP: st->declaration = DECL_BASE; break; + case KEYWORD_NAMESPACE: st->declaration = DECL_NAMESPACE; break; + case KEYWORD_OPERATOR: readOperator (st); break; + case KEYWORD_PACKAGE: readPackage (st); break; ++ case KEYWORD_PATH: st->declaration = DECL_BASE; break; + case KEYWORD_PRIVATE: setAccess (st, ACCESS_PRIVATE); break; + case KEYWORD_PROGRAM: st->declaration = DECL_PROGRAM; break; + case KEYWORD_PROTECTED: setAccess (st, ACCESS_PROTECTED); break; +@@ -1725,7 +1785,9 @@ + case KEYWORD_SIGNED: st->declaration = DECL_BASE; break; + case KEYWORD_STRING: st->declaration = DECL_BASE; break; + case KEYWORD_STRUCT: st->declaration = DECL_STRUCT; break; ++ case KEYWORD_SYMBOL: st->declaration = DECL_BASE; break; + case KEYWORD_TASK: st->declaration = DECL_TASK; break; ++ case KEYWORD_TERM: st->declaration = DECL_BASE; break; + case KEYWORD_THROWS: discardTypeList (token); break; + case KEYWORD_UNION: st->declaration = DECL_UNION; break; + case KEYWORD_UNSIGNED: st->declaration = DECL_BASE; break; +@@ -1764,7 +1826,9 @@ + + case KEYWORD_FOR: + case KEYWORD_IF: ++ case KEYWORD_REPEAT: + case KEYWORD_SWITCH: ++ case KEYWORD_UNTIL: + case KEYWORD_WHILE: + { + int c = skipToNonWhite (); +@@ -2253,7 +2317,8 @@ + { + if (vStringLength (st->context->name) > 0) + { +- if (isLanguage (Lang_c) || isLanguage (Lang_cpp)) ++ if (isLanguage (Lang_c) || isLanguage (Lang_cpp) || ++ isLanguage (Lang_ycp)) + vStringCatS (st->context->name, "::"); + else if (isLanguage (Lang_java) || isLanguage (Lang_csharp)) + vStringCatS (st->context->name, "."); +@@ -2569,7 +2634,12 @@ + st->inFunction = TRUE; + /* fall through */ + default: +- if (includeTag (TAG_LOCAL, FALSE)) ++ if (isLanguage (Lang_ycp) && ! st->haveQualifyingName) ++ { ++ st->declaration = DECL_BLOCK; ++ createTags (nestLevel, st); ++ } ++ else if (includeTag (TAG_LOCAL, FALSE)) + createTags (nestLevel, st); + else + skipToMatch ("{}"); +@@ -2610,6 +2680,7 @@ + } + } + else if (isContextualStatement (st) || ++ st->declaration == DECL_BLOCK || + st->declaration == DECL_NAMESPACE || + st->declaration == DECL_PROGRAM) + { +@@ -2769,6 +2840,12 @@ + buildKeywordHash (language, 4); + } + ++static void initializeYcpParser (const langType language) ++{ ++ Lang_ycp = language; ++ buildKeywordHash (language, 5); ++} ++ + extern parserDefinition* CParser (void) + { + static const char *const extensions [] = { "c", NULL }; +@@ -2835,4 +2912,16 @@ + return def; + } + ++extern parserDefinition* YcpParser (void) ++{ ++ static const char *const extensions [] = { "ycp", NULL }; ++ parserDefinition* def = parserNew ("YCP"); ++ def->kinds = YCPKinds; ++ def->kindCount = KIND_COUNT (YCPKinds); ++ def->extensions = extensions; ++ def->parser2 = findCTags; ++ def->initialize = initializeYcpParser; ++ return def; ++} ++ + /* vi:set tabstop=4 shiftwidth=4 noexpandtab: */ +--- parsers.h ++++ parsers.h +@@ -48,7 +48,8 @@ + VeraParser, \ + VerilogParser, \ + VimParser, \ +- YaccParser ++ YaccParser, \ ++ YcpParser + + #endif /* _PARSERS_H */ + diff --git a/ctags.changes b/ctags.changes new file mode 100644 index 0000000..9f73d68 --- /dev/null +++ b/ctags.changes @@ -0,0 +1,176 @@ +------------------------------------------------------------------- +Wed Dec 20 12:49:51 CET 2006 - schwab@suse.de + +- Update etags from CVS. + +------------------------------------------------------------------- +Tue May 30 15:10:42 CEST 2006 - schwab@suse.de + +- Update to ctags 5.6 + * Reformatted code for independence of tab stop setting. + * Changed default configuration to disable installation of etags links. + * Changed --langmap to first unmap each supplied extension from other + languages. + * Added support for ASP constants [ASP, Patch #961842]. + * Added support for GNU make extensions [Make]. + * Added .mk as extension recognized as a make language file [Make]. + * Added missing help for list-maps options [Bug #1201826]. + * Added new extension field "typeref" [thanks to Bram Moolenaar]. + * Extended functionality of Ruby parser with patch from Elliot Hughes + [Ruby]. + * Fixed creation of TAGS file with etags-include but no files [Bug + #941233]. + * Fixed problem reading last line of list file (-L) without final + newline. + * Fixed infinite loop that could occur on files without final newline + [C, Java]. + * Fixed incorrect tag for first field of table [SQL]. + * Fixed missing tags for functions beginning with underscore [Sh]. + * Fixed missing tags for functions with variable arg list [C, Bug + #1201689]. + * Fixed parsing problem with parentheses in argument list [C, Bug + #1085585]. + * Fixed problem in preprocessor directive handling [C, Bug #1086609]. +- Update etags to 17.17. + +------------------------------------------------------------------- +Tue Mar 7 23:18:46 CET 2006 - od@suse.de + +- wrote and added a YCP parser based on the C code parser + (ctags-5.5.4-ycp-parser.diff) + +------------------------------------------------------------------- +Wed Jan 25 21:35:15 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Wed Dec 7 20:46:09 CET 2005 - od@suse.de + +- Added option -A/--allow-duplicates to gnuctags + +------------------------------------------------------------------- +Wed Dec 7 02:28:07 CET 2005 - od@suse.de + +- Don't strip etags/gnuctags + +------------------------------------------------------------------- +Tue Oct 18 12:44:46 CEST 2005 - schwab@suse.de + +- Update to etags 17.14. + +------------------------------------------------------------------- +Mon Nov 15 17:06:34 CET 2004 - schwab@suse.de + +- Update to etags 17.5. + +------------------------------------------------------------------- +Tue May 4 22:17:18 CEST 2004 - schwab@suse.de + +- Update to ctags 5.5.4. + +------------------------------------------------------------------- +Sat Jan 10 20:57:54 CET 2004 - adrian@suse.de + +- add %defattr + +------------------------------------------------------------------- +Fri Sep 26 09:32:30 CEST 2003 - schwab@suse.de + +- Update to ctags 5.5.2. + +------------------------------------------------------------------- +Tue Aug 5 20:47:31 CEST 2003 - schwab@suse.de + +- Update to ctags 5.5.1. + +------------------------------------------------------------------- +Wed Apr 2 13:29:55 CEST 2003 - schwab@suse.de + +- Update to ctags 5.5. +- Update to etags 16.56. + +------------------------------------------------------------------- +Tue Sep 17 17:34:28 CEST 2002 - ro@suse.de + +- removed bogus self-provides + +------------------------------------------------------------------- +Tue Sep 17 17:11:00 CEST 2002 - schwab@suse.de + +- Update to ctags 5.3.1. + +------------------------------------------------------------------- +Thu Jul 18 10:53:15 CEST 2002 - schwab@suse.de + +- Update to ctags 5.3. + +------------------------------------------------------------------- +Fri Dec 14 15:59:05 CET 2001 - schwab@suse.de + +- Update ctags to 5.1. +- Update etags to 14.21. + +------------------------------------------------------------------- +Thu May 18 13:26:59 CEST 2000 - schwab@suse.de + +- Use BuildRoot. +- Remove etags.c changes again. + +------------------------------------------------------------------- +Wed May 17 19:33:55 CEST 2000 - kasal@suse.cz + +- strip etags/gnuctags +- Fixed etags.c changes + +------------------------------------------------------------------- +Mon May 15 16:49:20 CEST 2000 - schwab@suse.de + +- Discard etags.c changes (#2772). + +------------------------------------------------------------------- +Mon Jan 31 18:15:00 CET 2000 - werner@suse.de + +- Really rename gctags to gnuctags + +------------------------------------------------------------------- +Mon Jan 31 12:41:54 CET 2000 - kasal@suse.cz + +- fixed spec file to really use the *dif files +- gctags renamed to gnuctags +- rewrote the NOTEs in the manpages and added + "see also (gnu)ctags(1), gctags(1) and global(1)" +- etags.c now uses #ifdef's + +------------------------------------------------------------------- +Wed Jan 26 19:15:48 CET 2000 - werner@suse.de + +- New ctags version 3.3.1 + * Disable etags (is usable with `ctags -e') +- Add etags/ctags from Emacs sources + * rename this ctags with gctags +- Make some NOTEs within the manual pages of both packages +- Add a README.SuSE to explain why we have two versions + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Wed Sep 8 11:59:42 CEST 1999 - schwab@suse.de + +- specfile cleanup + +------------------------------------------------------------------- +Tue Jun 15 16:55:26 MEST 1999 - uli@suse.de + +- update -> 3.2.2 + +---------------------------------------------------------------------------- +Sun Apr 13 23:04:29 MEST 1997 - florian@suse.de + + +- new package with ctags 1.5 (used to be together with vim.tgz) + + diff --git a/ctags.spec b/ctags.spec new file mode 100644 index 0000000..fc6c0bc --- /dev/null +++ b/ctags.spec @@ -0,0 +1,185 @@ +# +# spec file for package ctags (Version 2006.12.26) +# +# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. +# +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + +Name: ctags +License: GNU General Public License (GPL) +Group: Development/Tools/Navigators +Autoreqprov: on +%define exuberant_ver 5.6 +%define emacs_ver 17.23 +Version: 2006.12.26 +Release: 1 +Summary: A Program to Generate Tag Files for Use with vi and Other Editors +URL: http://ctags.sourceforge.net/ +Source0: ftp://ftp.sourceforge.net/pub/sourceforge/c/ct/ctags/ctags-%{exuberant_ver}.tar.gz +Source1: etags-%{emacs_ver}.tar.gz +Source2: README.SuSE +Patch0: ctags-%{exuberant_ver}.diff +Patch1: ctags-ycp-parser.diff +Patch2: etags-%{emacs_ver}.diff +Patch3: etags-gnuctags-allow-duplicates.diff +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +CTags (from Darren Hiebert) generates tag files from source code in C, +C++, Eiffel, Fortran, and Java to be used with vi and its derivatives, +Emacs, and several other editors. + +ETags (from GNU Emacs sources) generates tag files from source code in +Pascal, Cobol, Ada, Perl, LaTeX, Scheme, Emacs Lisp/Common Lisp, +Postscript, Erlang, Python, Prolog, and most assembler-like syntaxes. + + + +Authors: +-------- + Darren Hiebert + Ken Arnold + Francesco Potort́ + +%prep +%setup -n ctags-%{exuberant_ver} -b 1 +%patch +%patch1 +cd ../etags-%{emacs_ver} +%patch2 +%patch3 + +%build +CC=gcc +CFLAGS="$RPM_OPT_FLAGS -Wall" +export CFLAGS CC +./configure --prefix=/usr --mandir=%{_mandir} --disable-etags +make +cd ../etags-%{emacs_ver} +CFLAGS="$CFLAGS -I../ctags-%{exuberant_ver}" +CFLAGS="$CFLAGS -DHAVE_CONFIG_H -DHAVE_UNISTD_H -DHAVE_GETCWD -DVERSION=\"%{emacs_ver}\"" +$CC $CFLAGS -o etags etags.c +$CC $CFLAGS -DCTAGS -o gnuctags etags.c + +%install +make install prefix=$RPM_BUILD_ROOT/usr mandir=$RPM_BUILD_ROOT%{_mandir} +mkdir -p $RPM_BUILD_ROOT%{_docdir}/ctags/Exuberant_Ctags +install -m 644 COPYING EXTENDING.html FAQ README $RPM_BUILD_ROOT%{_docdir}/ctags/Exuberant_Ctags +install -m 644 %{S:2} $RPM_BUILD_ROOT%{_docdir}/ctags +cd ../etags-%{emacs_ver} +install -m 755 etags gnuctags $RPM_BUILD_ROOT/usr/bin +install -m 644 etags.1 $RPM_BUILD_ROOT%{_mandir}/man1 +ln -sf etags.1.gz $RPM_BUILD_ROOT%{_mandir}/man1/gnuctags.1.gz + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +/usr/bin/ctags +/usr/bin/gnuctags +/usr/bin/etags +%{_mandir}/man1/ctags.1.gz +%{_mandir}/man1/gnuctags.1.gz +%{_mandir}/man1/etags.1.gz +%{_docdir}/ctags + +%changelog -n ctags +* Wed Dec 20 2006 - schwab@suse.de +- Update etags from CVS. +* Tue May 30 2006 - schwab@suse.de +- Update to ctags 5.6 + * Reformatted code for independence of tab stop setting. + * Changed default configuration to disable installation of etags links. + * Changed --langmap to first unmap each supplied extension from other + languages. + * Added support for ASP constants [ASP, Patch #961842]. + * Added support for GNU make extensions [Make]. + * Added .mk as extension recognized as a make language file [Make]. + * Added missing help for list-maps options [Bug #1201826]. + * Added new extension field "typeref" [thanks to Bram Moolenaar]. + * Extended functionality of Ruby parser with patch from Elliot Hughes + [Ruby]. + * Fixed creation of TAGS file with etags-include but no files [Bug + [#941233]]. + * Fixed problem reading last line of list file (-L) without final + newline. + * Fixed infinite loop that could occur on files without final newline + [C, Java]. + * Fixed incorrect tag for first field of table [SQL]. + * Fixed missing tags for functions beginning with underscore [Sh]. + * Fixed missing tags for functions with variable arg list [C, Bug + [#1201689]]. + * Fixed parsing problem with parentheses in argument list [C, Bug + [#1085585]]. + * Fixed problem in preprocessor directive handling [C, Bug #1086609]. +- Update etags to 17.17. +* Tue Mar 07 2006 - od@suse.de +- wrote and added a YCP parser based on the C code parser + (ctags-5.5.4-ycp-parser.diff) +* Wed Jan 25 2006 - mls@suse.de +- converted neededforbuild to BuildRequires +* Wed Dec 07 2005 - od@suse.de +- Added option -A/--allow-duplicates to gnuctags +* Wed Dec 07 2005 - od@suse.de +- Don't strip etags/gnuctags +* Tue Oct 18 2005 - schwab@suse.de +- Update to etags 17.14. +* Mon Nov 15 2004 - schwab@suse.de +- Update to etags 17.5. +* Tue May 04 2004 - schwab@suse.de +- Update to ctags 5.5.4. +* Sat Jan 10 2004 - adrian@suse.de +- add %%defattr +* Fri Sep 26 2003 - schwab@suse.de +- Update to ctags 5.5.2. +* Tue Aug 05 2003 - schwab@suse.de +- Update to ctags 5.5.1. +* Wed Apr 02 2003 - schwab@suse.de +- Update to ctags 5.5. +- Update to etags 16.56. +* Tue Sep 17 2002 - ro@suse.de +- removed bogus self-provides +* Tue Sep 17 2002 - schwab@suse.de +- Update to ctags 5.3.1. +* Thu Jul 18 2002 - schwab@suse.de +- Update to ctags 5.3. +* Fri Dec 14 2001 - schwab@suse.de +- Update ctags to 5.1. +- Update etags to 14.21. +* Thu May 18 2000 - schwab@suse.de +- Use BuildRoot. +- Remove etags.c changes again. +* Wed May 17 2000 - kasal@suse.cz +- strip etags/gnuctags +- Fixed etags.c changes +* Mon May 15 2000 - schwab@suse.de +- Discard etags.c changes (#2772). +* Mon Jan 31 2000 - werner@suse.de +- Really rename gctags to gnuctags +* Mon Jan 31 2000 - kasal@suse.cz +- fixed spec file to really use the *dif files +- gctags renamed to gnuctags +- rewrote the NOTEs in the manpages and added + "see also (gnu)ctags(1), gctags(1) and global(1)" +- etags.c now uses #ifdef's +* Wed Jan 26 2000 - werner@suse.de +- New ctags version 3.3.1 + * Disable etags (is usable with `ctags -e') +- Add etags/ctags from Emacs sources + * rename this ctags with gctags +- Make some NOTEs within the manual pages of both packages +- Add a README.SuSE to explain why we have two versions +* Mon Sep 13 1999 - bs@suse.de +- ran old prepare_spec on spec file to switch to new prepare_spec. +* Wed Sep 08 1999 - schwab@suse.de +- specfile cleanup +* Tue Jun 15 1999 - uli@suse.de +- update -> 3.2.2 +* Sun Apr 13 1997 - florian@suse.de +- new package with ctags 1.5 (used to be together with vim.tgz) diff --git a/etags-17.23.diff b/etags-17.23.diff new file mode 100644 index 0000000..84079e8 --- /dev/null +++ b/etags-17.23.diff @@ -0,0 +1,152 @@ +--- etags.1 ++++ etags.1 +@@ -9,7 +9,7 @@ + .. + + .SH NAME +-etags, ctags \- generate tag file for Emacs, vi ++etags, gnuctags \- generate tag file for Emacs, vi + .SH SYNOPSIS + .hy 0 + .na +@@ -26,7 +26,7 @@ + [\|\-\-help\|] [\|\-\-version\|] + \fIfile\fP .\|.\|. + +-\fBctags\fP [\|\-aCdgIRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|] ++\fBgnuctags\fP [\|\-aCdgIRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|] + .if n .br + [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|] + [\|\-\-parse\-stdin=\fIfile\fP\|] +@@ -46,7 +46,7 @@ + The \|\fBetags\fP\| program is used to create a tag table file, in a format + understood by + .BR emacs ( 1 )\c +-\&; the \|\fBctags\fP\| program is used to create a similar table in a ++\&; the \|\fBgnuctags\fP\| program is used to create a similar table in a + format understood by + .BR vi ( 1 )\c + \&. Both forms of the program understand +@@ -56,7 +56,7 @@ + most assembler\-like syntaxes. + Both forms read the files specified on the command line, and write a tag + table (defaults: \fBTAGS\fP for \fBetags\fP, \fBtags\fP for +-\fBctags\fP) in the current working directory. ++\fBgnuctags\fP) in the current working directory. + Files specified with relative file names will be recorded in the tag + table with file names relative to the directory where the tag table + resides. If the tag table is in /dev, however, the file names are made +@@ -71,7 +71,7 @@ + language, overriding guesses based on filename extensions. + .SH OPTIONS + Some options make sense only for the \fBvi\fP style tag files produced +-by ctags; ++by gnuctags; + \fBetags\fP does not recognize them. + The programs accept unambiguous abbreviations for long option names. + .TP +@@ -85,7 +85,7 @@ + the delimiter `\|\fB?\fP\|', to search \fIbackwards\fP through files. + The default is to use the delimiter `\|\fB/\fP\|', to search \fIforwards\fP + through files. +-Only \fBctags\fP accepts this option. ++Only \fBgnuctags\fP accepts this option. + .TP + .B \-\-declarations + In C and derived languages, create tags for function declarations, +@@ -94,24 +94,24 @@ + .B \-d, \-\-defines + Create tag entries for C preprocessor constant definitions + and enum constants, too. Since this is the default behavior of +-\fBetags\fP, only \fBctags\fP accepts this option. ++\fBetags\fP, only \fBgnuctags\fP accepts this option. + .TP + .B \-D, \-\-no\-defines + Do not create tag entries for C preprocessor constant definitions + and enum constants. + This may make the tags file much smaller if many header files are tagged. +-Since this is the default behavior of \fBctags\fP, only \fBetags\fP ++Since this is the default behavior of \fBgnuctags\fP, only \fBetags\fP + accepts this option. + .TP + .B \-\-globals + Create tag entries for global variables in C, C++, Objective C, Java, + and Perl. +-Since this is the default behavior of \fBetags\fP, only \fBctags\fP ++Since this is the default behavior of \fBetags\fP, only \fBgnuctags\fP + accepts this option. + .TP + .B \-\-no\-globals + Do not tag global variables. Typically this reduces the file size by +-one fourth. Since this is the default behavior of \fBctags\fP, only ++one fourth. Since this is the default behavior of \fBgnuctags\fP, only + \fBetags\fP accepts this option. + .TP + \fB\-i\fP \fIfile\fP, \fB\-\-include=\fIfile\fP +@@ -168,7 +168,7 @@ + where \fItagregexp\fP is used to match the tag. It should not match + useless characters. If the match is such that more characters than + needed are unavoidably matched by \fItagregexp\fP, it may be useful to +-add a \fInameregexp\fP, to narrow down the tag scope. \fBctags\fP ++add a \fInameregexp\fP, to narrow down the tag scope. \fBgnuctags\fP + ignores regexps without a \fInameregexp\fP. The syntax of regexps is + the same as in emacs. The following character escape sequences are + supported: \\a, \\b, \\d, \\e, \\f, \\n, \\r, \\t, \\v, which +@@ -224,7 +224,7 @@ + + .br + A regexp can be preceded by {\fIlang\fP}, thus restricting it to match +-lines of files of the specified language. Use \fBetags --help\fP to obtain ++lines of files of the specified language. Use \fBetags \-\-help\fP to obtain + a list of the recognised languages. This feature is particularly useful inside + \fBregex files\fP. A regex file contains one regex per line. Empty lines, + and those lines beginning with space or tab are ignored. Lines beginning +@@ -243,12 +243,12 @@ + .TP + .B \-t, \-\-typedefs + Record typedefs in C code as tags. Since this is the default behavior +-of \fBetags\fP, only \fBctags\fP accepts this option. ++of \fBetags\fP, only \fBgnuctags\fP accepts this option. + .TP + .B \-T, \-\-typedefs\-and\-c++ + Generate tag entries for typedefs, struct, enum, and union tags, and + C++ member functions. Since this is the default behavior +-of \fBetags\fP, only \fBctags\fP accepts this option. ++of \fBetags\fP, only \fBgnuctags\fP accepts this option. + .TP + .B \-u, \-\-update + Update tag entries for \fIfiles\fP specified on command line, leaving +@@ -256,11 +256,11 @@ + by deleting the existing entries for the given files and then + rewriting the new entries at the end of the tags file. It is often + faster to simply rebuild the entire tag file than to use this. +-Only \fBctags\fP accepts this option. ++Only \fBgnuctags\fP accepts this option. + .TP + .B \-v, \-\-vgrind + Instead of generating a tag file, write index (in \fBvgrind\fP format) +-to standard output. Only \fBctags\fP accepts this option. ++to standard output. Only \fBgnuctags\fP accepts this option. + .TP + .B \-w, \-\-no\-warn + Suppress warning messages about duplicate entries. The \fBetags\fP +@@ -269,7 +269,7 @@ + .TP + .B \-x, \-\-cxref + Instead of generating a tag file, write a cross reference (in +-\fBcxref\fP format) to standard output. Only \fBctags\fP accepts this option. ++\fBcxref\fP format) to standard output. Only \fBgnuctags\fP accepts this option. + .TP + .B \-h, \-H, \-\-help + Print usage information. Followed by one or more \-\-language=LANG +@@ -283,8 +283,10 @@ + `\|\fBemacs\fP\|' entry in \fBinfo\fP; \fIGNU Emacs Manual\fP, Richard + Stallman. + .br ++.BR ctags ( 1 ), + .BR cxref ( 1 ), + .BR emacs ( 1 ), ++.BR gnuctags ( 1 ), + .BR vgrind ( 1 ), + .BR vi ( 1 ). + diff --git a/etags-17.23.tar.gz b/etags-17.23.tar.gz new file mode 100644 index 0000000..26c1397 --- /dev/null +++ b/etags-17.23.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:516c03e78290d7e7258d24e32bfe6937567d6f1c174b7aa2ceb8859246919156 +size 55258 diff --git a/etags-gnuctags-allow-duplicates.diff b/etags-gnuctags-allow-duplicates.diff new file mode 100644 index 0000000..46d1878 --- /dev/null +++ b/etags-gnuctags-allow-duplicates.diff @@ -0,0 +1,90 @@ +--- etags.1 ++++ etags.1 +@@ -26,12 +26,12 @@ + [\|\-\-help\|] [\|\-\-version\|] + \fIfile\fP .\|.\|. + +-\fBgnuctags\fP [\|\-aCdgIRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|] ++\fBgnuctags\fP [\|\-aCdgIRVh\|] [\|\-ABtTuvwx\|] [\|\-l \fIlanguage\fP\|] + .if n .br + [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|] + [\|\-\-parse\-stdin=\fIfile\fP\|] + .br +-[\|\-\-append\|] [\|\-\-backward\-search\|] ++[\|\-\-allow\-duplicates\|] [\|\-\-append\|] [\|\-\-backward\-search\|] + [\|\-\-cxref\|] [\|\-\-defines\|] [\|\-\-forward\-search\|] + [\|\-\-globals\|] [\|\-\-ignore\-indentation\|] + [\|\-\-language=\fIlanguage\fP\|] [\|\-\-members\|] +@@ -75,6 +75,12 @@ + \fBetags\fP does not recognize them. + The programs accept unambiguous abbreviations for long option names. + .TP ++.B \-A, \-\-allow\-duplicates ++Create entries for duplicate tags. Some editors accept tags files with ++entries for duplicate tags. ++Since this is the default behavior of \fBetags\fP, only \fBgnuctags\fP ++accepts this option. ++.TP + .B \-a, \-\-append + Append to existing tag file. (For \fBvi\fP-format tag files, see also + \fB\-\-update\fP.) +--- etags.c ++++ etags.c +@@ -444,6 +444,7 @@ + *midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789"; + + static bool append_to_tagfile; /* -a: append to tags */ ++static bool allow_duplicates; /* -A: allow duplicate tags */ + /* The next four default to TRUE for etags, but to FALSE for ctags. */ + static bool typedefs; /* -t: create tags for C and Ada typedefs */ + static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */ +@@ -496,6 +497,7 @@ + { "version", no_argument, NULL, 'V' }, + + #if CTAGS /* Ctags options */ ++ { "allow-duplicates", no_argument, NULL, 'A' }, + { "backward-search", no_argument, NULL, 'B' }, + { "cxref", no_argument, NULL, 'x' }, + { "defines", no_argument, NULL, 'd' }, +@@ -875,6 +877,12 @@ + Absolute names are stored in the output file as they are.\n\ + Relative ones are stored relative to the output file's directory.\n"); + ++ if (CTAGS) ++ { ++ puts ("-A, --allow-duplicates\n\ ++ Allow duplicate tag entries."); ++ } ++ + puts ("-a, --append\n\ + Append tag entries to existing tags file."); + +@@ -1175,7 +1183,7 @@ + non-options arguments to be at the end, but leaves them alone. */ + optstring = concat (NO_LONG_OPTIONS ? "" : "-", + "ac:Cf:Il:o:r:RSVhH", +- (CTAGS) ? "BxdtTuvw" : "Di:"); ++ (CTAGS) ? "ABxdtTuvw" : "Di:"); + + while ((opt = getopt_long (argc, argv, optstring, longopts, NULL)) != EOF) + switch (opt) +@@ -1259,6 +1267,7 @@ + case 'i': included_files[nincluded_files++] = optarg; break; + + /* Ctags options. */ ++ case 'A': allow_duplicates = TRUE; break; + case 'B': searchar = '?'; break; + case 'd': constantypedefs = TRUE; break; + case 't': typedefs = TRUE; break; +@@ -2167,8 +2176,10 @@ + /* + * If this tag name matches an existing one, then + * do not add the node, but maybe print a warning. ++ * If duplicates are allowed, continue looking for ++ * a node with a branch where we can insert this node. + */ +- if (!dif) ++ if (!allow_duplicates && !dif) + { + if (np->fdp == cur_node->fdp) + { diff --git a/get_version_number.sh b/get_version_number.sh new file mode 100644 index 0000000..93d3aab --- /dev/null +++ b/get_version_number.sh @@ -0,0 +1 @@ +get_date_version_string `find_newest_file *.changes` diff --git a/ready b/ready new file mode 100644 index 0000000..473a0f4