commit:     9322294404f2c5011564047a1534c4c049a7ccfa
Author:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Tue Sep 18 23:00:00 2018 +0000
Commit:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Tue Sep 18 23:04:07 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=93222944

dev-util/cppcheck: Add upstream patch to fix test

On some platforms 'char' is unsigned by default, causing the test to
fail.

See https://trofi.github.io/posts/203-signed-char-or-unsigned-char.html

 dev-util/cppcheck/cppcheck-1.84-r1.ebuild          | 110 +++++++++++++++++++++
 .../files/cppcheck-1.84-char-signedness.patch      |  88 +++++++++++++++++
 2 files changed, 198 insertions(+)

diff --git a/dev-util/cppcheck/cppcheck-1.84-r1.ebuild 
b/dev-util/cppcheck/cppcheck-1.84-r1.ebuild
new file mode 100644
index 00000000000..4d0e7a668ec
--- /dev/null
+++ b/dev-util/cppcheck/cppcheck-1.84-r1.ebuild
@@ -0,0 +1,110 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )
+
+inherit distutils-r1 flag-o-matic qmake-utils toolchain-funcs
+
+DESCRIPTION="Static analyzer of C/C++ code"
+HOMEPAGE="http://cppcheck.sourceforge.net";
+SRC_URI="https://github.com/danmar/cppcheck/archive/${PV}.tar.gz -> 
${P}.tar.gz"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~sparc ~x86"
+IUSE="htmlreport pcre qt5"
+
+RDEPEND="
+       dev-libs/tinyxml2:=
+       htmlreport? ( dev-python/pygments[${PYTHON_USEDEP}] )
+       pcre? ( dev-libs/libpcre )
+       qt5? (
+               dev-qt/qtcore:5
+               dev-qt/qtgui:5
+               dev-qt/qtprintsupport:5
+       )
+"
+DEPEND="${RDEPEND}
+       app-text/docbook-xsl-stylesheets
+       dev-libs/libxslt
+       virtual/pkgconfig
+"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.75-tinyxml2.patch
+       "${FILESDIR}"/${PN}-1.84-char-signedness.patch
+)
+
+src_prepare() {
+       default
+       append-cxxflags -std=c++0x
+
+       # Drop bundled libs, patch Makefile generator and re-run it
+       rm -r externals/tinyxml || die
+       tc-export CXX
+       emake dmake
+       ./dmake || die
+}
+
+src_configure() {
+       if use pcre ; then
+               sed -e '/HAVE_RULES=/s:=no:=yes:' \
+                       -i Makefile || die
+       fi
+}
+
+src_compile() {
+       export LIBS="$(pkg-config --libs tinyxml2)"
+       emake ${PN} man \
+               CFGDIR="${EROOT}usr/share/${PN}/cfg" \
+               
DB2MAN="${EROOT}usr/share/sgml/docbook/xsl-stylesheets/manpages/docbook.xsl"
+
+       if use qt5 ; then
+               pushd gui || die
+               eqmake5
+               emake
+               popd || die
+       fi
+       if use htmlreport ; then
+               pushd htmlreport || die
+               distutils-r1_src_compile
+               popd || die
+       fi
+}
+
+src_test() {
+       # safe final version
+       mv -v ${PN}{,.final} || die
+       mv -v lib/library.o{,.final} || die
+       mv -v cli/cppcheckexecutor.o{,.final} || die
+       #trigger recompile with CFGDIR inside ${S}
+       emake check CFGDIR="${S}/cfg"
+       # restore
+       mv -v ${PN}{.final,} || die
+       mv -v lib/library.o{.final,} || die
+       mv -v cli/cppcheckexecutor.o{.final,} || die
+}
+
+src_install() {
+       # it's not autotools-based, so "${ED}" here, not "${D}", bug 531760
+       emake install DESTDIR="${ED}"
+
+       insinto "/usr/share/${PN}/cfg"
+       doins cfg/*.cfg
+       if use qt5 ; then
+               dobin gui/${PN}-gui
+               dodoc gui/{projectfile.txt,gui.${PN}}
+       fi
+       if use htmlreport ; then
+               pushd htmlreport || die
+               distutils-r1_src_install
+               popd || die
+               find "${D}" -name "*.egg-info" -delete
+       else
+               rm "${ED}/usr/bin/cppcheck-htmlreport" || die
+       fi
+       doman ${PN}.1
+       dodoc -r triage
+}

diff --git a/dev-util/cppcheck/files/cppcheck-1.84-char-signedness.patch 
b/dev-util/cppcheck/files/cppcheck-1.84-char-signedness.patch
new file mode 100644
index 00000000000..ee1b136c9a9
--- /dev/null
+++ b/dev-util/cppcheck/files/cppcheck-1.84-char-signedness.patch
@@ -0,0 +1,88 @@
+From 320a957bbc912325363cf86b61108db860195ec3 Mon Sep 17 00:00:00 2001
+From: Alexander Mai <a...@users.sf.net>
+Date: Thu, 28 Jun 2018 22:16:18 +0200
+Subject: [PATCH] Extend TestSymbolDatabase::findFunction19 to outline
+ different results depending whether char is signed or unsigned on compile
+ time
+
+---
+ test/testsymboldatabase.cpp | 28 ++++++++++++++++++++--------
+ 1 file changed, 20 insertions(+), 8 deletions(-)
+
+diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp
+index 0dafd2730..28473e8e9 100644
+--- a/test/testsymboldatabase.cpp
++++ b/test/testsymboldatabase.cpp
+@@ -26,6 +26,7 @@
+ #include "tokenlist.h"
+ #include "utils.h"
+ 
++#include <climits>
+ #include <cstddef>
+ #include <list>
+ #include <map>
+@@ -5065,6 +5066,7 @@ private:
+                       "    long               get(long x) { return x; }\n"
+                       "    long long          get(long long x) { return x; 
}\n"
+                       "    unsigned char      get(unsigned char x) { return 
x; }\n"
++                      "    signed char        get(signed char x) { return x; 
}\n"
+                       "    unsigned short     get(unsigned short x) { return 
x; }\n"
+                       "    unsigned int       get(unsigned int x) { return x; 
}\n"
+                       "    unsigned long      get(unsigned long x) { return 
x; }\n"
+@@ -5079,12 +5081,13 @@ private:
+                       "        long               v5  = 1;      v5  = 
get(get(v5));\n"
+                       "        long long          v6  = 1;      v6  = 
get(get(v6));\n"
+                       "        unsigned char      v7  = '1';    v7  = 
get(get(v7));\n"
+-                      "        unsigned short     v8  = 1;      v8  = 
get(get(v8));\n"
+-                      "        unsigned int       v9  = 1;      v9  = 
get(get(v9));\n"
+-                      "        unsigned long      v10 = 1;      v10 = 
get(get(v10));\n"
+-                      "        unsigned long long v11 = 1;      v11 = 
get(get(v11));\n"
+-                      "        E1                 v12 = e1;     v12 = 
get(get(v12));\n"
+-                      "        E2                 v13 = E2::e2; v13 = 
get(get(v13));\n"
++                      "        signed char        v8  = '1';    v8  = 
get(get(v8));\n"
++                      "        unsigned short     v9  = 1;      v9  = 
get(get(v9));\n"
++                      "        unsigned int       v10 = 1;      v10 = 
get(get(v10));\n"
++                      "        unsigned long      v11 = 1;      v11 = 
get(get(v11));\n"
++                      "        unsigned long long v12 = 1;      v12 = 
get(get(v12));\n"
++                      "        E1                 v13 = e1;     v13 = 
get(get(v13));\n"
++                      "        E2                 v14 = E2::e2; v14 = 
get(get(v14));\n"
+                       "    }\n"
+                       "};");
+ 
+@@ -5094,7 +5097,10 @@ private:
+         ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 4);
+ 
+         f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v2 ) ) 
;");
+-        ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 5);
++        if (std::numeric_limits<char>::is_signed)
++            ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 5);
++        else
++            ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 10);
+ 
+         f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v3 ) ) 
;");
+         ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 6);
+@@ -5112,7 +5118,10 @@ private:
+         ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 10);
+ 
+         f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v8 ) ) 
;");
+-        ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 11);
++        if (std::numeric_limits<char>::is_signed)
++            ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 5);
++        else
++            ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 10);
+ 
+         f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v9 ) ) 
;");
+         ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 12);
+@@ -5128,6 +5137,9 @@ private:
+ 
+         f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v13 ) ) 
;");
+         ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 16);
++
++        f = Token::findsimplematch(tokenizer.tokens(), "get ( get ( v14 ) ) 
;");
++        ASSERT_EQUALS(true, db && f && f->function() && 
f->function()->tokenDef->linenr() == 17);
+     }
+ 
+     void findFunction20() { // # 8280
+-- 
+2.16.4
+

Reply via email to