Hello community,

here is the log from the commit of package ctags for openSUSE:Factory checked 
in at 2017-03-12 20:04:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ctags (Old)
 and      /work/SRC/openSUSE:Factory/.ctags.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ctags"

Sun Mar 12 20:04:05 2017 rev:33 rq:477790 version:5.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/ctags/ctags.changes      2016-09-09 
10:13:08.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ctags.new/ctags.changes 2017-03-12 
20:04:08.364573381 +0100
@@ -1,0 +2,30 @@
+Sun Feb 26 04:37:26 UTC 2017 - [email protected]
+
+- merge with arduino-ctags https://github.com/arduino/ctags
+ * provide arduino-ctags
+ * redo patch queue 
http://repo.or.cz/git-browser/by-commit.html?r=arduino-ctags/SUSE.git
+   + new patches
+      0001-Mixing-with-anjuta-tags-https-git.gnome.org-browse-a.patch
+        - add vala support
+        - update many existing tags with new features
+      0002-Making-inline-behave-like-an-attribute.-Fixes-1.patch
+      0003-Treat-typename-as-an-attribute.patch
+      0004-parseReturnType-should-start-from-the-first-non-brac.patch
+      0005-Ensuring-a-space-is-printed-in-return-type-AFTER-the.patch
+      0006-Prevent-C-static_assert-from-stopping-parsing.patch
+      0007-c-Handle-C-11-noexcept.patch
+      0008-c-Properly-parse-C-11-override-and-final-members.patch
+      0009-Parse-C-11-enums-with-type-specifier.patch
+      0010-Parse-C-11-classed-enums.patch
+      0011-Handle-template-expressions-that-may-use-the-or-oper.patch
+      0012-Make-sure-we-don-t-throw-things-away-while-collectin.patch
+      0013-C-mitigate-matching-error-on-generics-containing-an-.patch
+      0014-fix-wrongly-interpreted-in-template.patch
+      0015-Added-constexpr-as-keyword.patch
+   + refreshed existing patches
+      0016-CVE-2014-7204.patch
+      0017-Go-language-support.patch (go-tags.patch)
+      0018-SUSE-man-page-changes.patch (ctags-5.7.diff)
+      0019-Do-not-include-build-time-in-binary.patch (ctags-date-time.patch)
+
+-------------------------------------------------------------------

Old:
----
  CVE-2014-7204.patch
  ctags-5.7.diff
  ctags-date-time.patch
  go-tags.patch

New:
----
  0001-Mixing-with-anjuta-tags-https-git.gnome.org-browse-a.patch
  0002-Making-inline-behave-like-an-attribute.-Fixes-1.patch
  0003-Treat-typename-as-an-attribute.patch
  0004-parseReturnType-should-start-from-the-first-non-brac.patch
  0005-Ensuring-a-space-is-printed-in-return-type-AFTER-the.patch
  0006-Prevent-C-static_assert-from-stopping-parsing.patch
  0007-c-Handle-C-11-noexcept.patch
  0008-c-Properly-parse-C-11-override-and-final-members.patch
  0009-Parse-C-11-enums-with-type-specifier.patch
  0010-Parse-C-11-classed-enums.patch
  0011-Handle-template-expressions-that-may-use-the-or-oper.patch
  0012-Make-sure-we-don-t-throw-things-away-while-collectin.patch
  0013-C-mitigate-matching-error-on-generics-containing-an-.patch
  0014-fix-wrongly-interpreted-in-template.patch
  0015-Added-constexpr-as-keyword.patch
  0016-CVE-2014-7204.patch
  0017-Go-language-support.patch
  0018-SUSE-man-page-changes.patch
  0019-Do-not-include-build-time-in-binary.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ctags.spec ++++++
--- /var/tmp/diff_new_pack.sloq0u/_old  2017-03-12 20:04:09.440421147 +0100
+++ /var/tmp/diff_new_pack.sloq0u/_new  2017-03-12 20:04:09.444420581 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package ctags
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -27,14 +27,30 @@
 # No resources to make this patch work with ctags-5.8 (applied to ctags-5.7)
 # Anyone is welcome to make it work again.
 Source2:        ctags-ycp-parser.diff
-Patch1:         ctags-5.7.diff
-Patch3:         ctags-date-time.patch
-Patch4:         go-tags.patch
-Patch5:         CVE-2014-7204.patch
+Patch1:         0001-Mixing-with-anjuta-tags-https-git.gnome.org-browse-a.patch
+Patch2:         0002-Making-inline-behave-like-an-attribute.-Fixes-1.patch
+Patch3:         0003-Treat-typename-as-an-attribute.patch
+Patch4:         0004-parseReturnType-should-start-from-the-first-non-brac.patch
+Patch5:         0005-Ensuring-a-space-is-printed-in-return-type-AFTER-the.patch
+Patch6:         0006-Prevent-C-static_assert-from-stopping-parsing.patch
+Patch7:         0007-c-Handle-C-11-noexcept.patch
+Patch8:         0008-c-Properly-parse-C-11-override-and-final-members.patch
+Patch9:         0009-Parse-C-11-enums-with-type-specifier.patch
+Patch10:        0010-Parse-C-11-classed-enums.patch
+Patch11:        0011-Handle-template-expressions-that-may-use-the-or-oper.patch
+Patch12:        0012-Make-sure-we-don-t-throw-things-away-while-collectin.patch
+Patch13:        0013-C-mitigate-matching-error-on-generics-containing-an-.patch
+Patch14:        0014-fix-wrongly-interpreted-in-template.patch
+Patch15:        0015-Added-constexpr-as-keyword.patch
+Patch16:        0016-CVE-2014-7204.patch
+Patch17:        0017-Go-language-support.patch
+Patch18:        0018-SUSE-man-page-changes.patch
+Patch19:        0019-Do-not-include-build-time-in-binary.patch
 BuildRequires:  update-alternatives
 Requires(pre):  update-alternatives
 Requires(post):  update-alternatives
 Requires(post): coreutils
+Provides:       arduino-ctags
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %description
@@ -44,11 +60,25 @@
 
 %prep
 %setup -q
-%patch1
-#%#patch2
+%patch1 -p1
+%patch2 -p1
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
 
 %build
 %configure

++++++ 0001-Mixing-with-anjuta-tags-https-git.gnome.org-browse-a.patch ++++++
++++ 2868 lines (skipped)

++++++ 0002-Making-inline-behave-like-an-attribute.-Fixes-1.patch ++++++
>From 9362fa70eaa37250afd5b36adb68295b54ae5c99 Mon Sep 17 00:00:00 2001
From: Federico Fissore <[email protected]>
Date: Mon, 5 Oct 2015 11:27:36 +0200
Subject: [PATCH 02/19] Making "inline" behave like an attribute. Fixes #1

---
 c.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/c.c b/c.c
index ccca3a4..af46dc4 100644
--- a/c.c
+++ b/c.c
@@ -1732,7 +1732,8 @@ static void processToken (tokenInfo *const token, 
statementInfo *const st)
 
                case KEYWORD_NONE:      processName (st);                       
break;
                case KEYWORD_ABSTRACT:  st->implementation = IMP_ABSTRACT;      
break;
-               case KEYWORD_ATTRIBUTE: skipParens (); initToken (token);       
break;
+               case KEYWORD_ATTRIBUTE:
+               case KEYWORD_INLINE:    skipParens (); initToken (token);       
break;
                case KEYWORD_BIND:      st->declaration = DECL_BASE;            
break;
                case KEYWORD_BIT:       st->declaration = DECL_BASE;            
break;
                case KEYWORD_CATCH:     skipParens (); skipBraces ();           
break;
-- 
2.11.0

++++++ 0003-Treat-typename-as-an-attribute.patch ++++++
>From 8c205231b591e954f763df794fc59a9f6a7e983b Mon Sep 17 00:00:00 2001
From: Chris--A <[email protected]>
Date: Thu, 8 Oct 2015 22:38:26 +1000
Subject: [PATCH 03/19] Treat 'typename' as an attribute.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Relates to #1
---
 c.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/c.c b/c.c
index af46dc4..ef81067 100644
--- a/c.c
+++ b/c.c
@@ -1733,6 +1733,7 @@ static void processToken (tokenInfo *const token, 
statementInfo *const st)
                case KEYWORD_NONE:      processName (st);                       
break;
                case KEYWORD_ABSTRACT:  st->implementation = IMP_ABSTRACT;      
break;
                case KEYWORD_ATTRIBUTE:
+               case KEYWORD_TYPENAME:
                case KEYWORD_INLINE:    skipParens (); initToken (token);       
break;
                case KEYWORD_BIND:      st->declaration = DECL_BASE;            
break;
                case KEYWORD_BIT:       st->declaration = DECL_BASE;            
break;
-- 
2.11.0

++++++ 0004-parseReturnType-should-start-from-the-first-non-brac.patch ++++++
>From 3b6e9256061bfcb70d2540c49b074b4be0ace4be Mon Sep 17 00:00:00 2001
From: Federico Fissore <[email protected]>
Date: Wed, 4 Nov 2015 12:48:02 +0100
Subject: [PATCH 04/19] parseReturnType should start from the first non-brace
 token

---
 c.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/c.c b/c.c
index ef81067..727d6bb 100644
--- a/c.c
+++ b/c.c
@@ -567,7 +567,6 @@ static const char *implementationString (const impType imp)
 /*
 *   Debugging functions
 */
-#define DEBUG
 #ifdef DEBUG
 
 #define boolString(c)   ((c) ? "TRUE" : "FALSE")
@@ -2120,6 +2119,7 @@ static void parseReturnType (statementInfo *const st)
 {
        int i;
        int lower_bound;
+       int upper_bound;
        tokenInfo * finding_tok;
        
        /* FIXME TODO: if java language must be supported then impement this 
here
@@ -2161,8 +2161,21 @@ static void parseReturnType (statementInfo *const st)
        }
        else
                lower_bound = 1;
-       
-       for (i = (unsigned int) NumTokens;  i > lower_bound;  i--)
+
+       upper_bound = -1;
+       for (i = 0; i < NumTokens; i++) {
+        tokenInfo *curr_tok;
+        curr_tok = prevToken (st, i);
+           if (curr_tok->type == TOKEN_BRACE_CLOSE || curr_tok->type == 
TOKEN_BRACE_OPEN) {
+               upper_bound = i - 1;
+               break;
+           }
+       }
+       if (upper_bound < 0) {
+           upper_bound = NumTokens - 1;
+       }
+
+       for (i = upper_bound;  i > lower_bound;  i--)
        {
                tokenInfo * curr_tok;
                curr_tok = prevToken (st, i);   
-- 
2.11.0

++++++ 0005-Ensuring-a-space-is-printed-in-return-type-AFTER-the.patch ++++++
>From b27f1a9c3468618eb6b2a02b33a9058f3ca567e6 Mon Sep 17 00:00:00 2001
From: Federico Fissore <[email protected]>
Date: Mon, 23 Nov 2015 10:47:18 +0100
Subject: [PATCH 05/19] Ensuring a space is printed in return type AFTER the
 keyword

---
 c.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/c.c b/c.c
index 727d6bb..c40cc42 100644
--- a/c.c
+++ b/c.c
@@ -2202,11 +2202,11 @@ static void parseReturnType (statementInfo *const st)
                                vStringPut (ReturnType, '&');
                                break;
 
-                       case TOKEN_KEYWORD:
-                               vStringPut (ReturnType, ' ');
-                               
                        default:
                                vStringCat (ReturnType, curr_tok->name);
+                               if (curr_tok->type == TOKEN_KEYWORD) {
+                                       vStringPut (ReturnType, ' ');
+                               }
                                break;                          
                }
        }
-- 
2.11.0

++++++ 0006-Prevent-C-static_assert-from-stopping-parsing.patch ++++++
>From ef67b47e61a1a5f6258e7034ddb520a57b0a477e Mon Sep 17 00:00:00 2001
From: Ivan Grokhotkov <[email protected]>
Date: Wed, 20 Jan 2016 12:19:13 +0300
Subject: [PATCH 06/19] Prevent C++ static_assert from stopping parsing

Manual cherry-pick of 
https://github.com/geany/geany/commit/fa0f92def2bf584ed1f6ae836e509f38324f8b6c
---
 c.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/c.c b/c.c
index c40cc42..6bc8b76 100644
--- a/c.c
+++ b/c.c
@@ -83,7 +83,7 @@ typedef enum eKeywordId {
        KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC,
        KEYWORD_REGISTER, KEYWORD_RETURN,
        KEYWORD_SHADOW, KEYWORD_STATE,
-       KEYWORD_SHORT, KEYWORD_SIGNED, KEYWORD_STATIC, KEYWORD_STRING,
+       KEYWORD_SHORT, KEYWORD_SIGNED, KEYWORD_STATIC, KEYWORD_STATIC_ASSERT, 
KEYWORD_STRING,
        KEYWORD_STRUCT, KEYWORD_SWITCH, KEYWORD_SYNCHRONIZED,
        KEYWORD_TASK, KEYWORD_TEMPLATE, KEYWORD_THIS, KEYWORD_THROW,
        KEYWORD_THROWS, KEYWORD_TRANSIENT, KEYWORD_TRANS, KEYWORD_TRANSITION,
@@ -437,6 +437,7 @@ static const keywordDesc KeywordTable [] = {
        { "signed",         KEYWORD_SIGNED,         { 1, 1, 0, 0, 0 } },
        { "state",          KEYWORD_STATE,          { 0, 0, 0, 0, 1 } },
        { "static",         KEYWORD_STATIC,         { 1, 1, 1, 1, 1 } },
+       { "static_assert",  KEYWORD_STATIC_ASSERT,  { 0, 1, 0, 0, 0} },
        { "string",         KEYWORD_STRING,         { 0, 0, 1, 0, 1 } },
        { "struct",         KEYWORD_STRUCT,         { 1, 1, 1, 0, 0 } },
        { "switch",         KEYWORD_SWITCH,         { 1, 1, 1, 1, 0 } },
@@ -1764,6 +1765,7 @@ static void processToken (tokenInfo *const token, 
statementInfo *const st)
                case KEYWORD_RETURN:    skipStatement (st);                     
break;
                case KEYWORD_SHORT:     st->declaration = DECL_BASE;            
break;
                case KEYWORD_SIGNED:    st->declaration = DECL_BASE;            
break;
+               case KEYWORD_STATIC_ASSERT:   skipParens();                     
break;
                case KEYWORD_STRING:    st->declaration = DECL_BASE;            
break;
                case KEYWORD_STRUCT:    st->declaration = DECL_STRUCT;          
break;
                case KEYWORD_TASK:      st->declaration = DECL_TASK;            
break;
-- 
2.11.0

++++++ 0007-c-Handle-C-11-noexcept.patch ++++++
>From 3a843374f200b80b7e155059cd4e73171597880d Mon Sep 17 00:00:00 2001
From: Ivan Grokhotkov <[email protected]>
Date: Wed, 20 Jan 2016 12:21:26 +0300
Subject: [PATCH 07/19] c++: Handle C++11 noexcept

Manual cherry-pick of 
https://github.com/geany/geany/commit/f60b31385e4da74d3b926c8e0c8f97c00a508d7b
---
 c.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/c.c b/c.c
index 6bc8b76..0dd84d7 100644
--- a/c.c
+++ b/c.c
@@ -77,7 +77,7 @@ typedef enum eKeywordId {
        KEYWORD_LOCAL, KEYWORD_LONG,
        KEYWORD_M_BAD_STATE, KEYWORD_M_BAD_TRANS, KEYWORD_M_STATE, 
KEYWORD_M_TRANS,
        KEYWORD_MUTABLE,
-       KEYWORD_NAMESPACE, KEYWORD_NEW, KEYWORD_NEWCOV, KEYWORD_NATIVE,
+       KEYWORD_NAMESPACE, KEYWORD_NEW, KEYWORD_NEWCOV, KEYWORD_NATIVE, 
KEYWORD_NOEXCEPT,
        KEYWORD_OPERATOR, KEYWORD_OUTPUT, KEYWORD_OVERLOAD, KEYWORD_OVERRIDE,
        KEYWORD_PACKED, KEYWORD_PORT, KEYWORD_PACKAGE, KEYWORD_PRIVATE,
        KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC,
@@ -419,6 +419,7 @@ static const keywordDesc KeywordTable [] = {
        { "native",         KEYWORD_NATIVE,         { 0, 0, 0, 1, 0 } },
        { "new",            KEYWORD_NEW,            { 0, 1, 1, 1, 0 } },
        { "newcov",         KEYWORD_NEWCOV,         { 0, 0, 0, 0, 1 } },
+       { "noexcept",       KEYWORD_NOEXCEPT,       { 0, 1, 0, 0, 0 } },
        { "operator",       KEYWORD_OPERATOR,       { 0, 1, 1, 0, 0 } },
        { "output",         KEYWORD_OUTPUT,         { 0, 0, 0, 0, 1 } },
        { "overload",       KEYWORD_OVERLOAD,       { 0, 1, 0, 0, 0 } },
@@ -1967,6 +1968,7 @@ static boolean skipPostArgumentStuff (
                                case KEYWORD_NAMESPACE:
                                case KEYWORD_NEW:
                                case KEYWORD_NEWCOV:
+                               case KEYWORD_NOEXCEPT:
                                case KEYWORD_OPERATOR:
                                case KEYWORD_OVERLOAD:
                                case KEYWORD_PRIVATE:
-- 
2.11.0

++++++ 0008-c-Properly-parse-C-11-override-and-final-members.patch ++++++
>From ce27db2946ae2ebc2766138af451d7d981201134 Mon Sep 17 00:00:00 2001
From: Ivan Grokhotkov <[email protected]>
Date: Wed, 20 Jan 2016 12:25:18 +0300
Subject: [PATCH 08/19] c++: Properly parse C++11 override and final members

Manual cherry-pick of
- https://github.com/geany/geany/commit/95a0d4db7e2188a62cf7770496ee2a51591f1962
- https://github.com/geany/geany/commit/641863c2647c21abb36aedc40ac93e6cc478f920
---
 c.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/c.c b/c.c
index 0dd84d7..6e8b5aa 100644
--- a/c.c
+++ b/c.c
@@ -1986,7 +1986,13 @@ static boolean skipPostArgumentStuff (
                                        break;
 
                                default:
-                                       if (isType (token, TOKEN_NONE))
+                                       /* "override" and "final" are only 
keywords in the declaration of a virtual
+                                        * member function, so need to be 
handled specially, not as keywords */
+                                       if (isLanguage(Lang_cpp) && isType 
(token, TOKEN_NAME) &&
+                                               (strcmp ("override", 
vStringValue (token->name)) == 0 ||
+                                                strcmp ("final", vStringValue 
(token->name)) == 0))
+                                               ;
+                                       else if (isType (token, TOKEN_NONE))
                                                ;
                                        else if (info->isKnrParamList  &&  
info->parameterCount > 0)
                                                ++elementCount;
@@ -2839,8 +2845,20 @@ static void tagCheck (statementInfo *const st)
                                        st->declaration == DECL_NAMESPACE ||
                                        st->declaration == DECL_PROGRAM)
                        {
-                               if (isType (prev, TOKEN_NAME))
+                               tokenInfo *name_token = (tokenInfo *)prev;
+
+                               /* C++ 11 allows class <name> final { ... } */
+                               if (isLanguage (Lang_cpp) && isType (prev, 
TOKEN_NAME) &&
+                                       strcmp("final", 
vStringValue(prev->name)) == 0 &&
+                                       isType(prev2, TOKEN_NAME))
+                               {
+                                       name_token = (tokenInfo *)prev2;
+                                       copyToken (st->blockName, name_token);
+                               }
+                               else if (isType (name_token, TOKEN_NAME))
+                               {
                                        copyToken (st->blockName, prev);
+                               }
                                else
                                {
                                        /*  For an anonymous struct or union we 
use a unique ID
-- 
2.11.0

++++++ 0009-Parse-C-11-enums-with-type-specifier.patch ++++++
>From cf9442ccad73448ff22ee96fa743893b29df5cfc Mon Sep 17 00:00:00 2001
From: Ivan Grokhotkov <[email protected]>
Date: Thu, 4 Feb 2016 19:36:35 +0300
Subject: [PATCH 09/19] Parse C++11 enums with type specifier

Manual cherry-pick of 
https://github.com/geany/geany/commit/f2f22d34ab9063852279bc6c5a45c8d3cfafdc0a
---
 c.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/c.c b/c.c
index 6e8b5aa..ff7aa24 100644
--- a/c.c
+++ b/c.c
@@ -2528,6 +2528,15 @@ static void processColon (statementInfo *const st)
                        else if (c == ';')
                                setToken (st, TOKEN_SEMICOLON);
                }
+               else if (isLanguage (Lang_cpp) && st->declaration == DECL_ENUM)
+               {
+                       /* skip enum's base type */
+                       c = skipToOneOf ("{;");
+                       if (c == '{')
+                               setToken (st, TOKEN_BRACE_OPEN);
+                       else if (c == ';')
+                               setToken (st, TOKEN_SEMICOLON);
+               }
                else
                {
                        const tokenInfo *const prev  = prevToken (st, 1);
-- 
2.11.0

++++++ 0010-Parse-C-11-classed-enums.patch ++++++
>From 688ba978ea2394eb7144c964811e2c531e5c9c19 Mon Sep 17 00:00:00 2001
From: Ivan Grokhotkov <[email protected]>
Date: Thu, 4 Feb 2016 19:40:15 +0300
Subject: [PATCH 10/19] Parse C++11 classed enums

Manual cherry-pick of 
https://github.com/geany/geany/commit/6c7f69578d8e142f5994cc9cf0e0abc83a606a1b
---
 c.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/c.c b/c.c
index ff7aa24..40db0e5 100644
--- a/c.c
+++ b/c.c
@@ -1725,6 +1725,12 @@ static void processInterface (statementInfo *const st)
        st->declaration = DECL_INTERFACE;
 }
 
+static void checkIsClassEnum (statementInfo *const st, const declType decl)
+{
+       if (! isLanguage (Lang_cpp) || st->declaration != DECL_ENUM)
+               st->declaration = decl;
+}
+
 static void processToken (tokenInfo *const token, statementInfo *const st)
 {
        switch (token->keyword)        /* is it a reserved word? */
@@ -1740,7 +1746,7 @@ static void processToken (tokenInfo *const token, 
statementInfo *const st)
                case KEYWORD_BIT:       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;
+               case KEYWORD_CLASS:     checkIsClassEnum (st, DECL_CLASS);      
break;
                case KEYWORD_CONST:     st->declaration = DECL_BASE;            
break;
                case KEYWORD_DOUBLE:    st->declaration = DECL_BASE;            
break;
                case KEYWORD_ENUM:      st->declaration = DECL_ENUM;            
break;
@@ -1768,7 +1774,7 @@ static void processToken (tokenInfo *const token, 
statementInfo *const st)
                case KEYWORD_SIGNED:    st->declaration = DECL_BASE;            
break;
                case KEYWORD_STATIC_ASSERT:   skipParens();                     
break;
                case KEYWORD_STRING:    st->declaration = DECL_BASE;            
break;
-               case KEYWORD_STRUCT:    st->declaration = DECL_STRUCT;          
break;
+               case KEYWORD_STRUCT:    checkIsClassEnum (st, DECL_STRUCT);     
break;
                case KEYWORD_TASK:      st->declaration = DECL_TASK;            
break;
                case KEYWORD_THROWS:    discardTypeList (token);                
break;
                case KEYWORD_UNION:     st->declaration = DECL_UNION;           
break;
-- 
2.11.0

++++++ 0011-Handle-template-expressions-that-may-use-the-or-oper.patch ++++++
>From e304e5ffff9718d99ab5767c8399225b79204c1f Mon Sep 17 00:00:00 2001
From: Daniel Garcia <[email protected]>
Date: Tue, 23 Feb 2016 17:16:58 -0800
Subject: [PATCH 11/19] Handle template expressions that may use the << or >>
 operators

---
 c.c | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/c.c b/c.c
index 40db0e5..b975453 100644
--- a/c.c
+++ b/c.c
@@ -1392,20 +1392,34 @@ static void skipToMatch (const char *const pair)
 
                if (c == begin)
                {
-                       ++matchLevel;
-                       if (braceFormatting  &&  getDirectiveNestLevel () != 
initialLevel)
-                       {
-                               skipToFormattedBraceMatch ();
-                               break;
+                       // watch out for '<<' in template arguments
+                       int x = cppGetc ();
+                       if(c == '<' && x == '<') { 
+                               // we've found a << - do nothing
+                       } else {
+                               cppUngetc (x);
+                               ++matchLevel;
+                               if (braceFormatting  &&  getDirectiveNestLevel 
() != initialLevel)
+                               {
+                                       skipToFormattedBraceMatch ();
+                                       break;
+                               }
                        }
                }
                else if (c == end)
                {
-                       --matchLevel;
-                       if (braceFormatting  &&  getDirectiveNestLevel () != 
initialLevel)
-                       {
-                               skipToFormattedBraceMatch ();
-                               break;
+                       // watch out for '>>' in template arguments
+                       int x = cppGetc ();
+                       if(c == '>' && x == '>') { 
+                               // we've found a >> in a template - skip it
+                       } else {
+                               cppUngetc (x);
+                               --matchLevel;
+                               if (braceFormatting  &&  getDirectiveNestLevel 
() != initialLevel)
+                               {
+                                       skipToFormattedBraceMatch ();
+                                       break;
+                               }
                        }
                }
        }
-- 
2.11.0

++++++ 0012-Make-sure-we-don-t-throw-things-away-while-collectin.patch ++++++
>From fe0ba956daf1f3940543e3dce8ec0befcab4d386 Mon Sep 17 00:00:00 2001
From: Daniel Garcia <[email protected]>
Date: Wed, 24 Feb 2016 00:59:15 -0800
Subject: [PATCH 12/19] Make sure we don't throw things away while collecting
 the signature, though

---
 c.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/c.c b/c.c
index b975453..386af29 100644
--- a/c.c
+++ b/c.c
@@ -1395,7 +1395,9 @@ static void skipToMatch (const char *const pair)
                        // watch out for '<<' in template arguments
                        int x = cppGetc ();
                        if(c == '<' && x == '<') { 
-                               // we've found a << - do nothing
+                               // we've found a << - do nothing except record 
the signature
+                               if (CollectingSignature)
+                                       vStringPut(Signature, x);
                        } else {
                                cppUngetc (x);
                                ++matchLevel;
@@ -1411,7 +1413,9 @@ static void skipToMatch (const char *const pair)
                        // watch out for '>>' in template arguments
                        int x = cppGetc ();
                        if(c == '>' && x == '>') { 
-                               // we've found a >> in a template - skip it
+                               // we've found a >> - do nothing except record 
the signature
+                               if (CollectingSignature)
+                                       vStringPut(Signature, x);
                        } else {
                                cppUngetc (x);
                                --matchLevel;
-- 
2.11.0

++++++ 0013-C-mitigate-matching-error-on-generics-containing-an-.patch ++++++
>From f928218c753e54968289a73285bf7c4345a8d553 Mon Sep 17 00:00:00 2001
From: Martino Facchin <[email protected]>
Date: Tue, 23 Feb 2016 12:58:40 +0100
Subject: [PATCH 13/19] C++: mitigate matching error on generics containing an
 expression

backport of 
https://github.com/geany/geany/commit/d40932ce4d05e57573a6d6c8f89f4aea8c42d4f3
---
 c.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/c.c b/c.c
index 386af29..1386ddd 100644
--- a/c.c
+++ b/c.c
@@ -1426,6 +1426,16 @@ static void skipToMatch (const char *const pair)
                                }
                        }
                }
+               /* early out if matching "<>" and we encounter a ";" or "{" to 
mitigate
+                * match problems with C++ generics containing a static 
expression like
+                *     foo<X<Y> bar;
+                * normally neither ";" nor "{" could appear inside "<>" 
anyway. */
+               else if (isLanguage (Lang_cpp) && begin == '<' &&
+                        (c == ';' || c == '{'))
+               {
+                       cppUngetc (c);
+                       break;
+               }
        }
        if (c == EOF)
        {
-- 
2.11.0

++++++ 0014-fix-wrongly-interpreted-in-template.patch ++++++
>From 5dbd71201f79e976a728802ca8638b14db0728dc Mon Sep 17 00:00:00 2001
From: Martino Facchin <[email protected]>
Date: Wed, 9 Mar 2016 15:03:07 +0100
Subject: [PATCH 14/19] fix wrongly interpreted >> in template

---
 c.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/c.c b/c.c
index 1386ddd..6add5f3 100644
--- a/c.c
+++ b/c.c
@@ -1410,20 +1410,14 @@ static void skipToMatch (const char *const pair)
                }
                else if (c == end)
                {
-                       // watch out for '>>' in template arguments
+                       // don't care if you find a '>>' (the important thing 
is closing the brackets)
                        int x = cppGetc ();
-                       if(c == '>' && x == '>') { 
-                               // we've found a >> - do nothing except record 
the signature
-                               if (CollectingSignature)
-                                       vStringPut(Signature, x);
-                       } else {
-                               cppUngetc (x);
-                               --matchLevel;
-                               if (braceFormatting  &&  getDirectiveNestLevel 
() != initialLevel)
-                               {
-                                       skipToFormattedBraceMatch ();
-                                       break;
-                               }
+                       cppUngetc (x);
+                       --matchLevel;
+                       if (braceFormatting  &&  getDirectiveNestLevel () != 
initialLevel)
+                       {
+                               skipToFormattedBraceMatch ();
+                               break;
                        }
                }
                /* early out if matching "<>" and we encounter a ";" or "{" to 
mitigate
-- 
2.11.0

++++++ 0015-Added-constexpr-as-keyword.patch ++++++
>From 83aa36d14a6b82e10b3ac55d54e0641648c56fcf Mon Sep 17 00:00:00 2001
From: Eric Sorton <[email protected]>
Date: Mon, 1 Aug 2016 23:04:35 -0400
Subject: [PATCH 15/19] Added constexpr as keyword.

---
 c.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/c.c b/c.c
index 6add5f3..105bfa8 100644
--- a/c.c
+++ b/c.c
@@ -62,7 +62,7 @@ typedef enum eKeywordId {
        KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT,
        KEYWORD_BOOLEAN, KEYWORD_BYTE, KEYWORD_BAD_STATE, KEYWORD_BAD_TRANS,
        KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT,
-       KEYWORD_CASE, KEYWORD_CATCH, KEYWORD_CHAR, KEYWORD_CLASS, KEYWORD_CONST,
+       KEYWORD_CASE, KEYWORD_CATCH, KEYWORD_CHAR, KEYWORD_CLASS, 
KEYWORD_CONST, KEYWORD_CONSTEXPR,
        KEYWORD_CONSTRAINT, KEYWORD_COVERAGE_BLOCK, KEYWORD_COVERAGE_DEF,
        KEYWORD_DEFAULT, KEYWORD_DELEGATE, KEYWORD_DELETE, KEYWORD_DO,
        KEYWORD_DOUBLE,
@@ -377,6 +377,7 @@ static const keywordDesc KeywordTable [] = {
        { "char",           KEYWORD_CHAR,           { 1, 1, 1, 1, 0 } },
        { "class",          KEYWORD_CLASS,          { 0, 1, 1, 1, 1 } },
        { "const",          KEYWORD_CONST,          { 1, 1, 1, 1, 0 } },
+       { "constexpr",      KEYWORD_CONSTEXPR,      { 0, 1, 0, 0, 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 } },
@@ -1770,6 +1771,7 @@ static void processToken (tokenInfo *const token, 
statementInfo *const st)
                case KEYWORD_CHAR:      st->declaration = DECL_BASE;            
break;
                case KEYWORD_CLASS:     checkIsClassEnum (st, DECL_CLASS);      
break;
                case KEYWORD_CONST:     st->declaration = DECL_BASE;            
break;
+               case KEYWORD_CONSTEXPR: st->declaration = DECL_BASE;            
break;
                case KEYWORD_DOUBLE:    st->declaration = DECL_BASE;            
break;
                case KEYWORD_ENUM:      st->declaration = DECL_ENUM;            
break;
                case KEYWORD_EXTENDS:   readParents (st, '.');
-- 
2.11.0

++++++ 0016-CVE-2014-7204.patch ++++++
>From 7f6e3f1177f0ed53cf2a66ac207f6834591c568c Mon Sep 17 00:00:00 2001
From: dfishburn <[email protected]>
Date: Wed, 24 Oct 2012 01:13:00 +0000
Subject: [PATCH 16/19] CVE-2014-7204

git-svn-id: svn://svn.code.sf.net/p/ctags/code/trunk@791 
c5d04d22-be80-434c-894e-aa346cc9e8e8
Signed-off-by: Petr Uzel <[email protected]>
---
 jscript.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 51 insertions(+), 3 deletions(-)

diff --git a/jscript.c b/jscript.c
index c4e5b1a..901641a 100644
--- a/jscript.c
+++ b/jscript.c
@@ -215,6 +215,7 @@ static void deleteToken (tokenInfo *const token)
  *      Tag generation functions
  */
 
+/*
 static void makeConstTag (tokenInfo *const token, const jsKind kind)
 {
        if (JsKinds [kind].enabled && ! token->ignoreTag )
@@ -238,12 +239,13 @@ static void makeJsTag (tokenInfo *const token, const 
jsKind kind)
 
        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 @@ static void makeJsTag (tokenInfo *const token, const 
jsKind kind)
                        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); *
+               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);
                }
-               makeConstTag (token, kind);
+
+               makeTagEntry (&e);
        }
 }
 
-- 
2.11.0

++++++ 0017-Go-language-support.patch ++++++
++++ 731 lines (skipped)

++++++ 0018-SUSE-man-page-changes.patch ++++++
>From e63684e0d8924dd6a56bda52ebfc81fb6c35811b Mon Sep 17 00:00:00 2001
From: Stepan Kasal <[email protected]>
Date: Mon, 31 Jan 2000 12:41:54 +0100
Subject: [PATCH 18/19] SUSE man page changes

---
 ctags.1 | 35 +++++++++++++++++++++++++++++------
 1 file changed, 29 insertions(+), 6 deletions(-)

diff --git a/ctags.1 b/ctags.1
index 2d89006..138e6ce 100644
--- a/ctags.1
+++ b/ctags.1
@@ -9,12 +9,29 @@ ctags \- Generate tag files for source code
 .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
@@ -1081,7 +1098,7 @@ embedded space. If this is a problem, use a configuration 
file instead.
 .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
@@ -1136,9 +1153,15 @@ lines to indicate separate command-line arguments.
 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
-- 
2.11.0

++++++ 0019-Do-not-include-build-time-in-binary.patch ++++++
>From 2814d01a6cdb52a336dc6d6243ecc3cad44e60f1 Mon Sep 17 00:00:00 2001
From: Unknown Lost in OBS Migration <[email protected]>
Date: Sun, 26 Feb 2017 05:34:04 +0100
Subject: [PATCH 19/19] Do not include build time in binary.

---
 main.c    | 11 -----------
 options.c |  1 -
 2 files changed, 12 deletions(-)

diff --git a/main.c b/main.c
index 79948fe..8bca242 100644
--- a/main.c
+++ b/main.c
@@ -93,17 +93,6 @@
 */
 static struct { long files, lines, bytes; } Totals = { 0, 0, 0 };
 
-#ifdef AMIGA
-# include "ctags.h"
-  static const char *VERsion = "$VER: "PROGRAM_NAME" "PROGRAM_VERSION" "
-# ifdef __SASC
-  __AMIGADATE__
-# else
-  __DATE__
-# endif
-  " "AUTHOR_NAME" $";
-#endif
-
 /*
 *   FUNCTION PROTOTYPES
 */
diff --git a/options.c b/options.c
index 1bee61d..0fc8e0c 100644
--- a/options.c
+++ b/options.c
@@ -926,7 +926,6 @@ static void printProgramIdentification (void)
        printf ("%s %s, %s %s\n",
                PROGRAM_NAME, PROGRAM_VERSION,
                PROGRAM_COPYRIGHT, AUTHOR_NAME);
-       printf ("  Compiled: %s, %s\n", __DATE__, __TIME__);
        printf ("  Addresses: <%s>, %s\n", AUTHOR_EMAIL, PROGRAM_URL);
        printFeatureList ();
 }
-- 
2.11.0


Reply via email to