Bug 207098

Summary: devel/qt5-linguisttools: error: non-virtual member function marked 'override' hides virtual member function (stops the build)
Product: Ports & Packages Reporter: Mark Millard <marklmi26-fbsd>
Component: Individual Port(s)Assignee: freebsd-kde (group) <kde>
Status: Closed FIXED    
Severity: Affects Only Me CC: w.schwarzenfeld
Priority: --- Flags: rakuco: maintainer-feedback+
Version: Latest   
Hardware: Any   
OS: Any   

Description Mark Millard 2016-02-11 03:28:24 UTC
[Context basics: projects/clang380-import -r295351 for buildworld/buildkernel that targeted an rpi2 (armv7-a/cortex-a7).]

When I attempt portinstall/portmaster builds for devel/qt5-linguisttools I get the following.

. . .
--- .obj/qdeclarative.o ---
/usr/bin/clang++ -c -O -pipe -target armv6--freebsd11.0-gnueabi -march=armv7-a -mcpu=cortex-a7 -mfloat-abi=softfp -mno-unaligned-access -mfloat-abi=softfp -fno-strict-aliasing -std=c++11 -fno-exceptions -Wall -W -pthread -D_THREAD_SAFE -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DPROEVALUATOR_CUMULATIVE -DPROEVALUATOR_INIT_PROPS -DPROEVALUATOR_DEBUG -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_QMLDEVTOOLS_LIB -DQT_XML_LIB -DQT_CORE_LIB -I. -I../shared -I/usr/local/include/qt5/QtCore/5.5.1 -I/usr/local/include/qt5/QtCore/5.5.1/QtCore -I/usr/local/include/qt5 -I/usr/local/include/qt5/QtQml -I/usr/local/include/qt5/QtQml/5.4.1 -I/usr/local/include/qt5/QtQml/5.4.1/QtQml -I/usr/local/include/qt5/QtXml -I/usr/local/include/qt5/QtCore -I.moc -I/usr/local/include -I/usr/local/lib/qt5/mkspecs/freebsd-clang -o .obj/qdeclarative.o qdeclarative.cpp
qdeclarative.cpp:428:65: error: non-virtual member function marked 'override' hides virtual member function
    void importFile(const QString &, const QString &, int, int) Q_DECL_OVERRIDE { consumeDirective(); }
                                                                ^
/usr/local/include/qt5/QtCore/qcompilerdetection.h:1027:26: note: expanded from macro 'Q_DECL_OVERRIDE'
# define Q_DECL_OVERRIDE override
                         ^
/usr/local/include/qt5/QtQml/5.4.1/QtQml/private/qqmljslexer_p.h:67:18: note: hidden overloaded virtual function 'QQmlJS::Directives::importFile' declared here: different number of parameters (2 vs 4)
    virtual void importFile(const QString &jsfile, const QString &module)
                 ^
qdeclarative.cpp:429:84: error: non-virtual member function marked 'override' hides virtual member function
    void importModule(const QString &, const QString &, const QString &, int, int) Q_DECL_OVERRIDE { consumeDirective(); }
                                                                                   ^
/usr/local/include/qt5/QtCore/qcompilerdetection.h:1027:26: note: expanded from macro 'Q_DECL_OVERRIDE'
# define Q_DECL_OVERRIDE override
                         ^
/usr/local/include/qt5/QtQml/5.4.1/QtQml/private/qqmljslexer_p.h:73:18: note: hidden overloaded virtual function 'QQmlJS::Directives::importModule' declared here: different number of parameters (3 vs 5)
    virtual void importModule(const QString &uri, const QString &version, const QString &module)
                 ^
2 errors generated.
*** [.obj/qdeclarative.o] Error code 1

make[2]: stopped in /usr/obj/portswork/usr/ports/devel/qt5-linguisttools/work/qttools-opensource-src-5.5.1/src/linguist/lupdate
1 error
. . .

which stops the overall build.

Stop reading the description here if you do not care about supporting details at this point.

Other context details:

# svnlite info /usr/ports/devel/qt5-linguisttools
Path: devel/qt5-linguisttools
Working Copy Root Path: /usr/ports
URL: https://svn0.us-west.freebsd.org/ports/head/devel/qt5-linguisttools
Relative URL: ^/head/devel/qt5-linguisttools
Repository Root: https://svn0.us-west.freebsd.org/ports
Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Revision: 408464
Node Kind: directory
Schedule: normal
Last Changed Author: rakuco
Last Changed Rev: 407169
Last Changed Date: 2016-01-24 18:10:14 +0000 (Sun, 24 Jan 2016)

# freebsd-version -ku; uname -aKU
11.0-CURRENT
11.0-CURRENT
FreeBSD rpi2 11.0-CURRENT FreeBSD 11.0-CURRENT #14 r295351M: Sun Feb  7 03:23:24 PST 2016     markmi@FreeBSDx64:/usr/obj/clang/arm.armv6/usr/src/sys/RPI2-NODBG  arm 1100097 1100097

# more /etc/make.conf 
DEFAULT_VERSIONS+=perl5=5.22
WRKDIRPREFIX=/usr/obj/portswork
WITH_DEBUG=
WITH_DEBUG_FILES=
MALLOC_PRODUCTION=
#
TO_TYPE=armv6
VERSION_CONTEXT=11.0
CFLAGS+=-target ${TO_TYPE}--freebsd${VERSION_CONTEXT}-gnueabi -march=armv7-a -mcpu=cortex-a7 -mfloat-abi=softfp -mno-unaligned-access
.if ${.MAKE.LEVEL} == 0
CC=/usr/bin/clang
CXX=/usr/bin/clang++
CPP=/usr/bin/clang-cpp
.export CC
.export CXX
.export CPP
.endif

(This is a clang 3.8.0 testing/usage context, in case that was not clear.)
Comment 1 w.schwarzenfeld 2016-02-11 03:55:12 UTC
The error is here  => different number of parameters (3 vs 5)

qqmljslexer.cpp - line 1423
http://fossies.org/linux/qt-everywhere-opensource-src/qtdeclarative/src/qml/parser/qqmljslexer.cpp


(header-file qqmljslexer_p.h https://codereview.qt-project.org/#/c/108051/4/src/tools/qdoc/qmlparser/qqmljslexer_p.h)
Comment 2 w.schwarzenfeld 2016-02-11 04:05:31 UTC
But I can't reproduce on my box, so I cannot provide a patch.
Comment 3 Mark Millard 2016-02-11 04:42:58 UTC
(In reply to w.schwarzenfeld from comment #2)

Are you using clang 3.8.0? My submittal might effectively be an early warning of what happens in that context. (I do not have a normal clang 3.7.1 context set up to compare with 3.8.0 results.)


If my 3.8.0 explorations and the resulting report are an early warning and it takes a while for things to work in that context, it is not a problem for me personally but it might eventually be for others.



There was also a 2 vs. 4 count in the report:

note: . . . different number of parameters (2 vs 4)
    virtual void importFile(const QString &jsfile, const QString &module)

in addition to the 3 vs. 5 one:

note: . . . different number of parameters (3 vs 5)
    virtual void importModule(const QString &uri, const QString &version, const QString &module)
Comment 4 w.schwarzenfeld 2016-02-11 04:49:38 UTC
I don't use clang38, but the line in the file is on my system:

   428     void importFile(const QString &, const QString &, int, int) Q_DECL_OVERRIDE { consumeD    428 irective(); }
    429     void importModule(const QString &, const QString &, const QString &, int, int) Q_DECL_    429 OVERRIDE { consumeDirective(); }
Comment 5 w.schwarzenfeld 2016-02-11 04:53:43 UTC
was unclear, cause of linebreaks, correct it:


src/qml/parser/qqmljslexer.cpp

428     void importFile(const QString &, const QString &, int, int) Q_DECL_OVERRIDE { consumeDirective(); }
    429     void importModule(const QString &, const QString &, const QString &, int, int) Q_DECL_OVERRIDE { consumeDirective(); }
Comment 6 Mark Millard 2016-02-11 05:35:31 UTC
(In reply to w.schwarzenfeld from comment #1)

Looks like the commit that contains those changes in that specific .h has about 6 .h files and 3 .cpp files involved overall.

I'm not sure that I'll try all that. I may just wait.

I quote the commit message below, just for reference. (The copy/paste put the line numbers to the right for what I copied.)

Parent:     fd826c11 ([QFontEngineFT] Fix alphamap creation for a cached glyph with no data)	1
Author:     Martin Smith <martin.smith@digia.com>	2
AuthorDate: 2015-03-09 10:23:50 +0100	3
Commit:     Martin Smith <martin.smith@digia.com>	4
CommitDate: 2015-03-12 08:32:30 +0000	5
6
qdoc: Bring qdoc's QML parser up to date	7
8
qdoc's QML parser has fallen behind the QML: parser in	9
QtDeclarative. Bring it up to date.	10
11
Change-Id: I12a688873564762434852960350c56655004e460	12
Task-number: QTBUG-44868	13
Reviewed-by: Martin Smith <martin.smith@digia.com>
Comment 7 Mark Millard 2016-02-11 06:10:59 UTC
(In reply to w.schwarzenfeld from comment #5)

I finally noticed what is likely the essential problem: implicit use of /usr/local/include/qt5/. . . mixed with the failing lang/qt5-qml build.

It appears that the compile is picking up include files from the prior installation of qt pkgs and/or ports (I do not remember which):

/usr/local/include/qt5/QtCore/qcompilerdetection.h:1027:26: note: . . .

/usr/local/include/qt5/QtQml/5.4.1/QtQml/private/qqmljslexer_p.h:67:18: note: . . .

/usr/local/include/qt5/QtCore/qcompilerdetection.h:1027:26: note: . . .

/usr/local/include/qt5/QtQml/5.4.1/QtQml/private/qqmljslexer_p.h:73:18: note: . . .

Since building lang/qt5-qml is failing the 2 lines mentioning qt5/QtQml/5.4.1/QtQml have not been updated from 5.4.1 to anything more recent yet.

It looks like lang/qt5-qml needs to come first before building devel/qt5-linguisttools (as long as /usr/local/include/qt5/. . . is in use for this). Otherwise devel/qt5-linguisttools would need its own copies of the files to find (unlikely).

Should the build failure of lang/qt5-qml have stopped the attempt at building devel/qt5-linguisttools because of such dependencies between them?
Comment 8 w.schwarzenfeld 2016-02-11 06:36:30 UTC
=> from the prior installation

Did you try to deinstall both packages before recompile?
Comment 9 w.schwarzenfeld 2016-02-11 06:53:29 UTC
If I understood right. You are trying buildworld/buildkernel (not update)?
If it is so recent version of qt5 is 5.5.1.
Comment 10 Mark Millard 2016-02-11 07:49:52 UTC
(In reply to w.schwarzenfeld from comments #9 & #8)

I originally did an svnlite update -r408464 /usr/ports . This should have updated all the source for qt5 to 5.5.1. Then I used portupdate -a . (The original qt5 use is indirect through other things I explicitly installed.) Most of the involved parts of qt5 built fine. But qt5-qml and qt5-lingisttools did not complete at the time.

(buildworld/buildkernel is not directly involved at this stage: world and kernel were already installed and booted well before this and they do not involve qt5.)

As for the current effort (comment #8 reply):

Trying pkg deletes first resulted in . . .

pkg delete qt5-qml did not ask about deleting anything else, leaving the old qt5-linguisttools in place.

pkg delete qt5-linguisttools did not ask about deleting anything else.

I then decided to initially try just

portinstall devel/qt5-lingisttools

to see what it would do about lang/qt5/qml not being there. It completed fine this time. So devel/qt5-lingisttools is apparently an example of needing a clean starting environment that does not have a prior version of various material still around that other related portinstall's would replace (possibly later depending on the ordering).

It was not obvious to me that one or both pkg delete's were a requirement to do the original portupgrade's of these two ports. But if such is standard/expected then possibly this bug report (207098) can be closed.

Then I tried

portinstall lang/qt5-qml

to see what it would do. This was without -w so my prior source change that you had suggested was replaced by official materials. This still gets the

error: "The cacheFlush support is missing on this platform."

that I reported in bug 207099 . In essence there is nothing new here relative to the lang/qt5-qml bug.
Comment 11 w.schwarzenfeld 2016-02-11 09:36:46 UTC
=> But if such is standard/expected...
No is not. But sometimes it helps.
Comment 12 w.schwarzenfeld 2016-02-11 09:45:25 UTC
If pkg delete removes nothing, I fear there is something badly weird on your system.
Comment 13 Mark Millard 2016-02-11 10:22:44 UTC
(In reply to w.schwarzenfeld from comment #12)

You misinterpret me. I'll try a different wording. . .

pkg delete qt5-qml did delete qt5-qml.
pkg delete qt5-lingisttools did delete qt5-lingisttools.

But in both cases no dependencies were present to cause anything else to be deleted by the command.

In particular qt5-lingisttools is not handled as being dependent on qt5-qml.

This may be expected. But I had guessed from the 5.4.1 qt5-qml header files being involved and causing problems before the deletes that there was (or should be) a dependency of qt5-lingisttools on qt5-qml . Apparently I was wrong about that.


These 2 deletes were enough of a context change for "portinstall qt5-lingisttools" to then complete.

I do not know if this should have required the deletes or not. But the observation is that the deletes were sufficient to establish a context for qt5-lingisttools to be installed from.
Comment 14 commit-hook freebsd_committer freebsd_triage 2016-02-11 10:34:54 UTC
A commit references this bug:

Author: rakuco
Date: Thu Feb 11 10:34:38 UTC 2016
New revision: 408682
URL: https://svnweb.freebsd.org/changeset/ports/408682

Log:
  Readd lang/qt5-qml as a build-dependency after r407169.

  lupdate needs QmlDevTools; if the dependency is not present, an update
  might try to use an older qt5-qml version and fail.

  No PORTREVISION bump necessary: the generated package does not change,
  and if the port built successfully it means the right qt5-qml version
  was used.

  PR:		207098

Changes:
  head/devel/qt5-linguisttools/Makefile
Comment 15 Raphael Kubo da Costa freebsd_committer freebsd_triage 2016-02-11 10:36:36 UTC
As noted before in this bug, qt5-linguisttools needs to build-depend on qt5-qml. Removing this dependency in ports r407169 was a mistake which I've fixed in ports r408682.