bugGNU Octave - Bugs: bug #53841, Could not copy help collection to...

 
 

bug #53841: Could not copy help collection to temporary file. Cannot load sqlite database driver! with Qt 5.12

Submitted by:  None
Submitted on:  Sat 05 May 2018 04:22:56 AM UTC  
 
Category:  GUI Severity:  3 - Normal
Priority:  5 - Normal Item Group:  None
Status:  Fixed Assigned to:  None
Originator Name:  Originator Email:  -email is unavailable-
Open/Closed:  Closed Release:  5.0.91
Operating System:  Any

Add a New Comment (Rich Markup)
   

You are not logged in

Please log in, so followups can be emailed to you.

 

( Jump to the original submission)

Sat 23 Feb 2019 11:59:53 AM UTC, comment #56: 

I created an nsis installer with Octave hg id 3b0af21841d4 and MXE Octave hg id f5a1bf89669c.
After installation in the same folder that previously caused this error, Octave starts normally and the documentation panel works as expected.

Closing as fixed.

Markus Mützel <mmuetzel>
Project Member
Thu 14 Feb 2019 08:08:32 PM UTC, comment #55: 

Pushed here:
http://hg.savannah.gnu.org/hgweb/octave/rev/c66f509d9f5c

Marking as ready for test.

Markus Mützel <mmuetzel>
Project Member
Thu 14 Feb 2019 07:54:57 PM UTC, comment #54: 

John, thanks for your patch. I applied it on top of hg id b3b78bf83113 and build an nsis installer.
It works perfectly. No longer any error messages on each start. Also the documentation works.

Looking at the change and reading the docs for Qt4 and Qt5, I'd say it should be safe to apply it on stable.

Markus Mützel <mmuetzel>
Project Member
Thu 14 Feb 2019 02:22:25 AM UTC, comment #53: 

Ok, thanks for clarifying. All I can do is wait until I either get a working 5.12 qhelpgenerator or I get an update to 5.12.1 from the flatpak kde team.

I could try installing Qt 5.12.0 with Linuxbrew and building Octave against that, I'll follow up if I have the time to try that and any results worth reporting.

As things stand now I think we do want to apply your patch to Octave because this problem is very relevant on GNU/Linux systems that will start upgrading to 5.12 soon. Would be more confident if I could test various Qt combinations myself.

Mike Miller <mtmiller>
Project Administrator
Thu 14 Feb 2019 01:27:00 AM UTC, comment #52: 

For reference, the QT bug report for 5.11->5.12 and fix for 5.12.1 is

https://bugreports.qt.io/browse/QTBUG-72174

the QT bug report in comment #21 was a duplicate issue that was closed.

John Donoghue <lostbard>
Project Member
Thu 14 Feb 2019 01:13:38 AM UTC, comment #51: 

Yeah that would be right - the fix will only work with 5.12.1 and higher - 5.12 is just broken

I believe the only 'fix' for 5.12 is build the documentation file with 5.12+

John Donoghue <lostbard>
Project Member
Thu 14 Feb 2019 12:10:38 AM UTC, comment #50: 

John D - patching Octave 5.0.91 to apply readonlydoc.patch did not fix this problem for me on Debian with flatpak, building 5.0.91 official release candidate in flatpak against Qt 5.12 (*not* Qt 5.12.1), the error message persists and the docs are still unavailable.

Is it required to upgrade to Qt 5.12.1 as well as apply your patch? Is there any fix for this error in Qt 5.12?

Mike Miller <mtmiller>
Project Administrator
Wed 13 Feb 2019 10:58:27 PM UTC, comment #49: 

In the current flatpak Qt 5.12 runtime environment:

$ qhelpgenerator -h
Segmentation fault

So bigger problems going on there, I have no way to help test this, other than testing the patch to try to apply the read-only flag to the help collection.

Mike Miller <mtmiller>
Project Administrator
Wed 13 Feb 2019 10:50:40 PM UTC, comment #48: 

When I delete the qch and qhc files and try to let flatpak-build regenerate them using qhelpgenerator 5.12, it fails in the build with a segfault:

rm -f doc/interpreter/octave_interpreter.qhc doc/interpreter/octave_interpreter.qch && \
perl ./doc/interpreter/mk-qthelp.pl octave.html doc/interpreter/octave_interpreter && \
qhelpgenerator  doc/interpreter/octave_interpreter.qhcp -o doc/interpreter/octave_interpreter.qhc >/dev/null && \
rm -f doc/interpreter/octave_interpreter.qhcp doc/interpreter/octave_interpreter.qhp
/bin/sh: line 3: 17171 Segmentation fault      qhelpgenerator doc/interpreter/octave_interpreter.qhcp -o doc/interpreter/octave_interpreter.qhc > /dev/null

Not very encouraging. Note that this is also with QCOLLECTIONGENERATOR=qhelpgenerator, because the two tools were merged in Qt 5.12.

And yeah, I'm not dismissing mxe-octave, I know that it's not feasible to build both native and cross versions of Qt just to be able to build the help files with the same version of Qt. I just wanted to test to see whether building the help with the same version of Qt would resolve this, and I can't even test that.

Mike Miller <mtmiller>
Project Administrator
Wed 13 Feb 2019 10:31:28 PM UTC, comment #47: 

According to comments in the qt bug reports the files are backwards compatible but I guess its unknown if they tested or just think it is.

Forcing it to rebuild would fix it for the normal case - in mxe though, the helpgenerator is not a host created tool like the cross compiled moc, uic etc, so it ends up in that case that is uses whatever the user has installed.

So for mxe at least, either we need regenerate the updated one during the install or stop it from doing the updated on the file.

John Donoghue <lostbard>
Project Member
Wed 13 Feb 2019 09:39:04 PM UTC, comment #46: 

Aha, thank you, I think I finally understand that this is the same bug on Windows and on GNU/Linux. If someone builds Octave from the release tarball on ftp.gnu.org, they are running the Qt help files generated on jwe's system. So it's essentially the same situation where you are building the docs on your mxe-octave system with one version of Qt and reading them on a Windows system with Qt 5.12.

It looks to me like this isn't going to be fixed at some point, this is just the way Qt 5.12 and future versions are working, they have to upgrade the help file from the older format. So in general Octave will always be at risk of trying to load a help file from an older version of Qt, and we should support that. What about the inverse, a Qt help collection built with Qt 5.12 and then loaded on a system with Qt 5.9?

One thing I can test easily now is building in Flatpak again with Qt 5.12, but deleting the doc/interpreter/octave_interpreter.q* files in the distribution before running make. If I understand this right now, that should avoid this error message because the files will have been built by the same host version of Qt, right?

If these qch/qhc files are not safely forward and backward compatible between Qt releases, should we be including them in the source distribution at all?

Mike Miller <mtmiller>
Project Administrator
Wed 13 Feb 2019 09:17:01 PM UTC, comment #45: 

So is the patch as is something to push to octave, or just for mxe-octave ?

Apart from mxe-octave with its cross compiling, is there going to be a time where the version of the qt used to build will be different to the one its run against ?

John Donoghue <lostbard>
Project Member
Wed 13 Feb 2019 02:52:06 PM UTC, comment #44: 

I also tried the patch from comment #42 in Linux - it appears to have no bad effects with older versions of Qt.

John Donoghue <lostbard>
Project Member
Wed 13 Feb 2019 02:42:58 PM UTC, comment #43: 

I did try just a copy to the temp file, however at that point, although it doesn't complain about the file readly, it also doesn't show any documentation, instead 'doc plot' displays 'Your search did not match any documents'

So, so far patch from comment 42, is the working solution

John Donoghue <lostbard>
Project Member
Tue 12 Feb 2019 08:34:50 PM UTC, comment #42: 

The following patch works for me, although is not tested yet whether it causes issues on older versions of qt.

(file #46245)

John Donoghue <lostbard>
Project Member
Tue 12 Feb 2019 07:26:24 PM UTC, comment #41: 

From the QT docuemnttation:

QHelpEngine::QHelpEngine: Constructs a new help engine with the given parent. The help engine uses the information stored in the collectionFile for providing help. If the collection file does not already exist, it will be created.

Which I guess means it not read only.

QHelpEngineCore::copyCollectionFile: Creates the file fileName and copies all contents from the current collection file into the newly created file, and returns true if successful; otherwise returns false.

Which I am guessing may mean it creates a copy - it doesn't say 'uses the copy'

linguist does a cache copy from the read only source using copyCollectionFile and then opens it in the a new QHelpEngine instance.

John Donoghue <lostbard>
Project Member
Tue 12 Feb 2019 07:01:06 PM UTC, comment #40: 

I am trying something at the moment. At 12.0 put some extra tables in doc file, so since we are not building with 12, it doesnt put them in, however when we run the program, it sees they are not there and tries to put them in.

As part of that, if I am correct, the fix in qt 12.1
https://codereview.qt-project.org/#/c/248149/6//ALL

provides the ability to be read only, however, does not set the read only property in the engine.

For the assistant program, they explicity set the readonly property so that it will not update the source file.

So we either need to 'set' the property to be read only and it wont update the source, or need to to a sudo run on the files when installing them, or use a older version of qt - however it will appear again when other OSs move to qt 5.12.

I'll know in a little while if the proty set works.

John Donoghue <lostbard>
Project Member
Tue 12 Feb 2019 06:54:40 PM UTC, comment #39: 

So your theory is that a QtHelp file successfully built with Qt 5.11 cannot be used as-is with Qt 5.12, that some kind of sql update procedure needs to be run and is run by Qt automatically when it is opened the first time?

Is there an explanation for why copying the file to a temporary location and opening it from there doesn't work? I still don't understand that part. Is that a problem in copyCollectionFile, since it's a Qt library method, it also requires that the original file be writeable by the user? Can we just use a normal file copy method instead of whatever copyCollectionFile does?

Mike Miller <mtmiller>
Project Administrator
Tue 12 Feb 2019 06:28:24 PM UTC, comment #38: 

I have Qt5 v5.11.1 on Ubuntu 18.10. I usually build the 7z-dist target and unpack to a location where I have write permission. So I didn't notice the error before.

Is there something we can do to ship a qhc with added sql tables?

Markus Mützel <mmuetzel>
Project Member
Tue 12 Feb 2019 01:30:11 PM UTC, comment #37: 

I think part of the issue may be that, we don't build qhelpgenerator as part of our qt5, so when building octave, its using the system installed one, which isn't adding sql tables it should have (that was fixed in qt 5.12.1)

John Donoghue <lostbard>
Project Member
Tue 12 Feb 2019 01:16:41 PM UTC, comment #36: 

I have admin perms on my computer so wasn't seeing it happen, but if I mark the file as readonly before running octave, I see the issue as well.

John Donoghue <lostbard>
Project Member
Mon 11 Feb 2019 09:48:55 PM UTC, comment #35: 

Sorry for the confusion, I really should have opened a new bug report.

In libgui/src/documentation.cc (documentation::documentation) we call m_help_engine->copyCollectionFile (m_collection) to copy the collection file from its original (write-protected) location to the temp directory. That was failing for me.
After running, Octave once as an administrator (i.e. with write access to the location the collection file is stored) the error disappeared. During this run, the collection file changed in size.
That makes me believe that copyCollectionFile writes to the file at its original location, which I think it shouldn't need to.

Markus Mützel <mmuetzel>
Project Member
Mon 11 Feb 2019 09:13:51 PM UTC, comment #34: 

This bug log is confusing. It was originally about user error, an incomplete Qt installation causing these error messages in either Qt 4 or Qt 5, solved by ensuring that QtSql is installed, done.

Now there is a regression with the update to Qt 5.12. I have also seen this on GNU/Linux with the flatpak build of Octave using Qt 5.12, and rolling back to Qt 5.11 solves it. So I agree this is a new bug in Qt 5.12, not related to how this bug report started.

Ignoring that confusion and reopening.

I don't think that making the help directory writeable by any user is a possible solution, Octave has to be able to run with its entire directory read-only.

If we are copying the help file to a temporary directory and using that file, why is this error happening? Where does the real error originate in the Qt libraries?

Flatpak does not have a working Qt 5.12.1 yet so I can't test to compare it against 5.12.

Mike Miller <mtmiller>
Project Administrator
Mon 11 Feb 2019 09:01:54 PM UTC, comment #33: 

I think this is still a bug in Qt. We explicitly use copyCollectionFile to copy the help collection to the writable temp folder. And I sure can find that file there, too (oct-qhelp-*). Why is it necessary to modify the original file for this?

As a work-around: Can that specific folder be created with write access for all users?

If that or another solution is not easily possible, it might be OK if the user had to run Octave as administrator once. (But I don't really like that.)

Markus Mützel <mmuetzel>
Project Member
Mon 11 Feb 2019 08:16:32 PM UTC, comment #32: 

Yes, it grows for me.

Doing a hexdump and diff on your before/after against mine shows minor differences - which might be expected anyway ?

John Donoghue <lostbard>
Project Member
Mon 11 Feb 2019 07:37:04 PM UTC, comment #31: 

Both the Octave and the MXE Octave sources were clean.

Does the file grow in size for you at the first start after installation?

Markus Mützel <mmuetzel>
Project Member
Mon 11 Feb 2019 07:32:07 PM UTC, comment #30: 

I don't see any issues on the 5.12 or 5.21.1 on my machine.

Are you applying any patches to octave in your mxe build ?

John Donoghue <lostbard>
Project Member
Mon 11 Feb 2019 06:41:30 PM UTC, comment #29: 

I made a clean dist-build of Octave (hg id 7b9a5ab8350f) and build the nsis-installer from scratch with MXE Octave hg id ddd66d48a646.
Unfortunately, I still see the same error message.

I also tried installing the 5.0.91 from alpha.gnu.org on a different Windows 10 PC. On that PC, I don't see the error message and the documentation shows as expected.
On both systems, I am logged in as a user with administrative rights with UAC. On both systems, I let the installer open Octave at the end of the installation. At that point, and at every sub-sequent start, I received the same message that the qhc file could not be changed on my home PC.

I then started Octave with "run as administrator" and the message did not show. It also stopped displaying that message if I start Octave without administrative rights now.

I made a copy of the .qhc file before and after the start as admin. I am attaching both files in case that might help.

(file #46236, file #46237)

Markus Mützel <mmuetzel>
Project Member
Sat 09 Feb 2019 03:42:45 PM UTC, comment #28: 

I have a patch for 5.12.1 - currently doing the slow compile to see what happens

John Donoghue <lostbard>
Project Member
Sat 09 Feb 2019 03:21:00 PM UTC, comment #27: 

According to [1], the issue is fixed in Qt5.12.1. I didn't know that it was released already.
Upgrading sounds like a good plan to me.

Markus Mützel <mmuetzel>
Project Member
Sat 09 Feb 2019 03:13:31 PM UTC, comment #26: 

we could also try a upgrade to 5.12.1

I thought there was some other issues that 5.12 fixed, so going back may just introduce them again

John Donoghue <lostbard>
Project Member
Sat 09 Feb 2019 03:09:50 PM UTC, comment #25: 

1. In Octave:

>> tempname ()
ans = C:\Users\Markus\AppData\Local\Temp\oct-mRAKWB

2. On a Windows command prompt:

C:\Octave\Octave-5.0.91\mingw64\share\octave\5.0.91\doc>dir /q
Datenträger in Laufwerk C: ist OS
Volumeseriennummer: 3EF0-CDF2

Verzeichnis von C:\Octave\Octave-5.0.91\mingw64\share\octave\5.0.91\doc

09.02.2019  13:47    <DIR>          VORDEFINIERT\Administra.
09.02.2019  13:47    <DIR>          VORDEFINIERT\Administra..
04.02.2019  22:37         6.103.040 VORDEFINIERT\Administraoctave_interpreter.qch
04.02.2019  22:37            32.768 VORDEFINIERT\Administraoctave_interpreter.qhc
               2 Datei(en),      6.135.808 Bytes
               2 Verzeichnis(se), 76.102.656.000 Bytes frei

Markus Mützel <mmuetzel>
Project Member
Sat 09 Feb 2019 03:00:17 PM UTC, comment #24: 

2 things I think

1. what does something like tempname() return

2. does the file referenced in the error message exist?

John Donoghue <lostbard>
Project Member
Sat 09 Feb 2019 02:54:28 PM UTC, comment #23: 

This seems to be a regression in Qt5.12. Alternatively, we could downgrade to 5.11.2 in MXE Octave for the release.

Markus Mützel <mmuetzel>
Project Member
Sat 09 Feb 2019 02:30:09 PM UTC, comment #22: 

I am seeing this with the Windows installers for 5.0.90 and 5.0.91. Please see the attached screen shot.

If the database has to be modified only once, can this be done before packaging the installer?
Alternatively, can the installer do this while it still has elevated rights?

CC'ing JohnD. Should I open a new report? IMHO, this is a blocker for Octave 5 since the default documentation (e.g. "doc plot") is un-usable in the GUI.


Markus Mützel <mmuetzel>
Project Member
Fri 18 Jan 2019 05:15:30 PM UTC, comment #21: 

I didn't read the whole discussion, so this may be mentioned already. But anyway, here is the solution that worked for me. I run Octave 4.4.1 from the Arch Linux repo.

Executing assistant on a file in readonly location fails due to bug:

$  assistant -collectionFile /usr/share/octave/4.4.1/doc/octave_interpreter.qch
Error reading collection file '/usr/share/octave/4.4.1/doc/octave_interpreter.qch': Cannot create index tables in file /usr/share/octave/4.4.1/doc/octave_interpreter.qch..

QHelpEngine fails to open collection in readonly location
https://bugreports.qt.io/browse/QTBUG-73036

But executing it with sudo works fine and after doing this once Octave no longer shows the error dialog:

$ sudo assistant -collectionFile /usr/share/octave/4.4.1/doc/octave_interpreter.qch

I've also installed qt5-base and qt5-doc, but I'm not sure if that makes any difference.

Sergey Bon. <sbon>
Mon 14 May 2018 04:45:39 PM UTC, comment #20: 

Thank you Mike.

I installed the following.

sudo apt-get install qt5-default
sudo apt-get install libqt5scintilla2-dev

Unfortunately I ran into this error.

  CXX      libgui/src/m-editor/libgui_src_libgui_src_la-moc-file-editor-interface.lo
libgui/src/m-editor/moc-file-editor-interface.cc:16:2: error: #error "This file was generated using the moc from 4.8.7. It"
#error "This file was generated using the moc from 4.8.7. It"
  ^
libgui/src/m-editor/moc-file-editor-interface.cc:17:2: error: #error "cannot be used with the include files from this version of Qt."
#error "cannot be used with the include files from this version of Qt."
  ^
libgui/src/m-editor/moc-file-editor-interface.cc:18:2: error: #error "(The moc has changed too much.)"
#error "(The moc has changed too much.)"
  ^
libgui/src/m-editor/moc-file-editor-interface.cc:87:7: error: ‘QMetaObjectExtraData’ does not name a type
const QMetaObjectExtraData octave::file_editor_interface::staticMetaObjectExtraData = {
       ^
libgui/src/m-editor/moc-file-editor-interface.cc:93:52: error: ‘staticMetaObjectExtraData’ was not declared in this scope
       qt_meta_data_octave__file_editor_interface, &staticMetaObjectExtraData }
                                                    ^
libgui/src/m-editor/moc-file-editor-interface.cc: In member function ‘virtual const QMetaObject* octave::file_editor_interface::metaObject() const’:
libgui/src/m-editor/moc-file-editor-interface.cc:102:71: error: conditional expression between distinct pointer types ‘QDynamicMetaObjectData*’ and ‘const QMetaObject*’ lacks a cast
     return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
                                                                       ^
Makefile:17178: recipe for target 'libgui/src/m-editor/libgui_src_libgui_src_la-moc-file-editor-interface.lo' failed
make[2]: *** [libgui/src/m-editor/libgui_src_libgui_src_la-moc-file-editor-interface.lo] Error 1
make[2]: Leaving directory '/home/octave-4.4.0'
Makefile:26469: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/octave-4.4.0'
Makefile:10185: recipe for target 'all' failed
make: *** [all] Error 2

Then I deleted the autogenerated "moc" files (rm libgui/src/m-editor/moc*) and the make script recreated them using the newly installed qt5 version of moc.

After that the compilation went smoothly and it runs :)

Ceral Paquet <octavebugs>
Fri 11 May 2018 05:27:31 PM UTC, comment #19: 

That means Octave was configured and compiled with Qt 4.

Ceral - you should probably build Octave with Qt 5 from now on.

Closing as works.

Mike Miller <mtmiller>
Project Administrator
Fri 11 May 2018 02:55:26 PM UTC, comment #18: 

Sorry, I copied the wrong list.  Here is the package file list for libqt4-sql-sqlite:

/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/qt4
/usr/lib/x86_64-linux-gnu/qt4/plugins
/usr/lib/x86_64-linux-gnu/qt4/plugins/sqldrivers
/usr/lib/x86_64-linux-gnu/qt4/plugins/sqldrivers/libqsqlite.so
/usr/share
/usr/share/doc
/usr/share/doc/libqt4-sql-sqlite
/usr/share/doc/libqt4-sql-sqlite/LGPL_EXCEPTION.txt
/usr/share/doc/libqt4-sql-sqlite/changelog.Debian.gz
/usr/share/doc/libqt4-sql-sqlite/copyright

Nothing in there looks suspicious.  I don't know why your QHelpEngine wants to use Qt4.

Dan Sebald <sebald>
Fri 11 May 2018 02:48:30 PM UTC, comment #17: 

The QHelpEngine is looking for Qt4 versions for some reason, I would guess.  I'm using Mint (Ubuntu) and don't have libqt4-sql-sqlite installed.  I see no problems.  I don't have any Qt4 development packages installed though.  Do you have development versions of the Qt4 libraries installed (look for similarly named packages but with a "-dev" in the name)?

/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libQtSql.so.4
/usr/lib/x86_64-linux-gnu/libQtSql.so.4.8
/usr/lib/x86_64-linux-gnu/libQtSql.so.4.8.7
/usr/share
/usr/share/doc
/usr/share/doc/libqt4-sql
/usr/share/doc/libqt4-sql/LGPL_EXCEPTION.txt
/usr/share/doc/libqt4-sql/changelog.Debian.gz
/usr/share/doc/libqt4-sql/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libqt4-sql

I don't see any files in that list that look like something Qt5 would need, except maybe this "overrides" file.  I have no idea what that is about.  Inside the file it says:

libqt4-sql: package-name-doesnt-match-sonames libQtSql4

Mike, what is that overrides file about?

Dan Sebald <sebald>
Fri 11 May 2018 11:57:49 AM UTC, comment #16: 

SOLVED:  sudo apt-get install libqt4-sql-sqlite

The above has solved the issue. Don't ask me how!

Ceral Paquet <octavebugs>
Wed 09 May 2018 10:06:47 PM UTC, comment #15: 

You're right, I was running it from ./run-octave --gui. I went ahead and did a make install and launched octave --gui and the two popups are still happening but with the path:

/usr/local/share/octave/4.4.0/doc/octave_interpreter.qhc

The assistant command works fine (opens docs in GUI).

assistant -collectionFile /usr/local/share/octave/4.4.0/doc/octave_interpreter.qhc

Ceral Paquet <octavebugs>
Wed 09 May 2018 04:29:40 PM UTC, comment #14: 

The more robust error message is showing that Octave is looking for the help file in

/home/octave-4.4.0/doc/interpreter/octave_interpreter.qhc

rather than the system directory.  How are you running Octave? 

Either one should do a "make install", in which case launching Octave would simply be "octave --gui &".  Otherwise, if it is a local build then one would do something like "<path-to-build-dir>/run-octave --gui &".  That "run-octave" sets up the environment properly.

But the path above makes no sense to me.  /home/octave-4.4.0 would be a user account "octave-4.4.0", not some "directory".  I can't imagine you created a system account "octave-4.4.0".

Dan Sebald <sebald>
Wed 09 May 2018 04:13:23 PM UTC, comment #13: 

Thanks Pantxo. I read that assistant was bundled with qt5-doc so installed

 sudo apt-get install qt5-doc

and then executed

assistant -collectionFile /usr/local/share/octave/4.4.0/doc/octave_interpreter.qhc

This opened a GUI containing the Octave manual. Success!

Then I configured and compiled with the robust help patch below. However, launching Octave (octave --gui) still gives 2 dialog boxes that need to be OK'd before the octave GUI opens.

The message in the first dialog box now reads:

Could not copy help collection

/home/octave-4.4.0/doc/interpreter/octave_interpreter.qhc

to a temporary file

/tmp/oct-qhelp-KOdbkB

Search capabilities may be affected.

QHelpEnging: Cannot load sqlite database driver!

Ceral Paquet <octavebugs>
Wed 09 May 2018 09:11:43 AM UTC, comment #12: 

@Ceral: Do you have "assistant" (Qt's help viewer) installed? If not can you install it (package name is "qt5-assistant") and then check it works properly with Octave's help collection? Something like:

assistant -collectionFile /usr/local/share/octave/4.4.0/doc/octave_interpreter.qhc

Pantxo Diribarne <pantxo>
Project Member
Wed 09 May 2018 06:10:07 AM UTC, comment #11: 

Thanks I will try to get the right Qt component(s) installed.

DOES NOT WORK: sudo apt-get install libqt5sql5-sqlite
DOES NOT WORK: sudo apt-get install qt5-default
DOES NOT WORK: sudo apt-get install libqt5-dev libqtcore5 libqtwebkit5 libqt5-network libqtgui5 libqt5-opengl-dev
DOES NOT WORK: sudo apt-get install libqt5gui5 libqt5help5 libqt5sql5
DOES NOT WORK:  sudo apt-get install qttools5-dev qttools5-dev-tools qtbase5-dev qtbase5-dev-tools
DOES NOT WORK: sudo apt-get install libqt5opengl5-dev libqt5scintilla2-dev

I'm just guessing, could definitely use some help!! :)

Ceral Paquet <octavebugs>
Tue 08 May 2018 04:50:15 PM UTC, comment #10: 

> Just wondering why compiling with ./configure --disable-docs doesn't make this go away?


Because the GUI looks for the Qt-Help-formatted user manual regardless of whether you built with --disable-docs or not. It is expected that the Qt Help files will always be there and can be used by the GUI.

Mike Miller <mtmiller>
Project Administrator
Tue 08 May 2018 04:11:41 PM UTC, comment #9: 

Since you are building from scratch, here's a diff file that you may patch with

linux $ ~/octave/octave/octave/patch -p1 < octave-documentation_more_robust_warning_message-djs2018may08.patch

Perhaps that will shed some light on what's happening.

When you are done testing, use "hg revert --all" to undo changes.

(file #44123)

Dan Sebald <sebald>
Tue 08 May 2018 01:11:08 PM UTC, comment #8: 

$ sudo apt-get install libqt5sql5-sqlite
Reading package lists... Done
Building dependency tree      
Reading state information... Done
libqt5sql5-sqlite is already the newest version (5.5.1+dfsg-16ubuntu7.5).

  1. upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Still does not work for me :(

Just wondering why compiling with ./configure --disable-docs doesn't make this go away?

Ceral Paquet <octavebugs>
Mon 07 May 2018 11:16:47 PM UTC, comment #7: 

Correct. The Qt5Sql module is already correctly listed as a dependency on Qt5Help, so it is taken care of. The liboctgui.so library already depends on and links with libQt5Sql, so again, taken care of. This is only a result of fine-grained packaging decisions in Debian-based distributions. There is nothing for Octave to do here.

Mike Miller <mtmiller>
Project Administrator
Mon 07 May 2018 11:11:15 PM UTC, comment #6: 

I wondered if the QtSql and Qt5Sql packages should be included (see attached changeset), e.g.,

http://hg.savannah.gnu.org/hgweb/octave/rev/ba5af45bbfc4
https://wiki.qt.io/Qt_Library_Cross_Dependencies

but that change doesn't seem to affect anything.  If libqt5sql5-sqlite is removed, the GUI is still configured in and compiles successfully.  Guess it is solely a runtime thing.

(file #44117)

Dan Sebald <sebald>
Mon 07 May 2018 10:12:05 PM UTC, comment #5: 

I can confirm the exact error message pop ups when Octave starts if I remove the package libqt5sql5-sqlite from my system.

This package should be installed by default on most current Debian and Ubuntu systems with the necessary Qt 5 packages for Octave, so this doesn't seem to be an Octave bug.

Please install libqt5sql5-sqlite and the messages should go away.

Mike Miller <mtmiller>
Project Administrator
Mon 07 May 2018 06:43:00 AM UTC, comment #4: 

OK, that's a little more info.  Well, the code for this is in ./libgui/src/documentation.cc.  Here's the pertinent lines:

    // Get original collection
    QString collection = getenv ("OCTAVE_QTHELP_COLLECTION");
    if (collection.isEmpty ())
      collection = QString::fromStdString (config::oct_doc_dir ()
                                           + sys::file_ops::dir_sep_str ()
                                           + "octave_interpreter.qhc");

    // Setup the help engine with the original collection, use a writable copy
    // of the original collection and load the help data
    m_help_engine = new QHelpEngine (collection, this);

    QString tmpdir = QDir::tempPath();
    m_collection
      = QString::fromStdString (sys::tempnam (tmpdir.toStdString (),
                                              "oct-qhelp-"));

    if (m_help_engine->copyCollectionFile (m_collection))
      m_help_engine->setCollectionFile (m_collection);
    else
      QMessageBox::warning (this, tr ("Octave Documentation"),
                            tr ("Could not copy help collection to temporary\n"
                                "file. Search capabilities may be affected.\n"
                                "%1").arg (m_help_engine->error ()));

First, I'll point out that the warning message is a bit deficient in the sense it should print out the name m_collection as part of the message.

Second, I see that the latter portion of the error message is generated by Qt help engine, i.e., the %1 above would be "Cannot load sqlite database driver!" in your message.  So it may be something as simple as missing the sqlite database driver on your system.  Open your package manager and search for something that would handle sqlite support in a Qt framework.  I think most package managers have a search feature and then a filter search, so search on "qt5" or "sqlite" or something.  If it isn't installed, then install it.  In the Synaptic package manager I'm seeing:

libqt5sql5-sqlite
Qt 5 SQLite 3 database driver
Version: 5.5.1+dfsg-16ubuntu7.5

You could try setting environment variable OCTAVE_QTHELP_COLLECTION to point to the collection (i.e., the 4.4.0 patch), but I doubt that's the (sole) problem because one would think the Qt message would say it can't find file XYZ.

Dan Sebald <sebald>
Mon 07 May 2018 05:29:05 AM UTC, comment #3: 

Thanks - I checked the locations you specified and the files are present in /usr/local/share/octave/4.4.0/doc/ but there is no sign of the oct-qhelp file in /tmp.

No idea why as I have write permission there. For a giggle I executed sudo octave --force-gui and received the same error/warning messages.

Ceral Paquet <octavebugs>
Sat 05 May 2018 05:54:57 AM UTC, comment #2: 

Figure out why Octave can't copy the help files and fix it, I guess.

One scenario is that the help files don't exist where they are supposed to.  It looks like on my system the help files are located somewhere like

linux # ls /usr/local/share/octave/4.5.0+/doc/ -l
total 4888
-rw-r--r-- 1 root root 4994048 Mar 30 15:26 octave_interpreter.qch
-rw-r--r-- 1 root root    8192 Mar 30 15:26 octave_interpreter.qhc

Of course, you would have a "4.4.0" rather than 4.5.0+.

A second scenario is that the temporary directory /tmp is not accessible to you for some reason.  It looks as though it is only the octave_interpreter.qhc file that gets copied:

linux # ls /tmp -l
total 36
-rw-r--r-- 1 sebald sebald 8192 May  5 00:41 oct-qhelp-5mbeqh

Notice the matching file size of 8192.

Dan Sebald <sebald>
Sat 05 May 2018 04:39:05 AM UTC, comment #1: 

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by GNU Octave configure 4.4.0, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ ./configure --disable-docs

## --------- ##
## Platform. ##
## --------- ##

hostname = acer
uname -m = x86_64
uname -r = 4.4.0-36-generic
uname -s = Linux
uname -v = #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = unknown
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /usr/local/sbin
PATH: /usr/local/bin
PATH: /usr/sbin
PATH: /usr/bin
PATH: /sbin
PATH: /bin
PATH: /usr/games
PATH: /usr/local/games
PATH: /snap/bin
PATH: /usr/local/bin
PATH: /usr/local/bin
PATH: /usr/local/MATLAB/R2017a/bin

## ----------- ##
## Core tests. ##
## ----------- ##

configure:5189: checking for a BSD-compatible install
configure:5257: result: /usr/bin/install -c
configure:5268: checking whether build environment is sane
configure:5323: result: yes
configure:5474: checking for a thread-safe mkdir -p
configure:5513: result: /bin/mkdir -p
configure:5520: checking for gawk
configure:5536: found /usr/bin/gawk
configure:5547: result: gawk
configure:5558: checking whether make sets $(MAKE)
configure:5580: result: yes
configure:5609: checking whether make supports nested variables
configure:5626: result: yes
configure:5715: checking whether UID '1000' is supported by ustar format
configure:5718: result: yes
configure:5725: checking whether GID '1000' is supported by ustar format
configure:5728: result: yes
configure:5736: checking how to create a ustar tar archive
configure:5747: tar --version
tar (GNU tar) 1.28
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
configure:5750: $? = 0
configure:5790: tardir=conftest.dir && eval tar --format=ustar -chf - "$tardir" >conftest.tar
configure:5793: $? = 0
configure:5797: tar -xf - <conftest.tar
configure:5800: $? = 0
configure:5802: cat conftest.dir/file
GrepMe
configure:5805: $? = 0
configure:5818: result: gnutar
configure:5881: checking whether make supports nested variables
configure:5898: result: yes
configure:5914: checking build system type
configure:5928: result: x86_64-pc-linux-gnu
configure:5948: checking host system type
configure:5961: result: x86_64-pc-linux-gnu
configure:6017: checking for style of include used by make
configure:6045: result: GNU
configure:6116: checking for gcc
configure:6132: found /usr/bin/gcc
configure:6143: result: gcc
configure:6466: checking for C compiler version
configure:6475: gcc --version >&5
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:6486: $? = 0
configure:6475: gcc -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.9' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)
configure:6486: $? = 0
configure:6475: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:6486: $? = 1
configure:6475: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'
gcc: fatal error: no input files
compilation terminated.
configure:6486: $? = 1
configure:6475: gcc -version >&5
gcc: error: unrecognized command line option '-version'
gcc: fatal error: no input files
compilation terminated.
configure:6486: $? = 1
configure:6506: checking whether the C compiler works
configure:6528: gcc -O2 -march=native -momit-leaf-frame-pointer -s -fPIC   conftest.c  >&5
configure:6532: $? = 0
configure:6580: result: yes
configure:6583: checking for C compiler default output file name
configure:6585: result: a.out
configure:6591: checking for suffix of executables
configure:6598: gcc -o conftest -O2 -march=native -momit-leaf-frame-pointer -s -fPIC   conftest.c  >&5
configure:6602: $? = 0
configure:6624: result:
configure:6646: checking whether we are cross compiling
configure:6654: gcc -o conftest -O2 -march=native -momit-leaf-frame-pointer -s -fPIC   conftest.c  >&5
configure:6658: $? = 0
configure:6665: ./conftest
configure:6669: $? = 0
configure:6684: result: no
configure:6689: checking for suffix of object files
configure:6711: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:6715: $? = 0
configure:6736: result: o
configure:6740: checking whether we are using the GNU C compiler
configure:6759: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:6759: $? = 0
configure:6768: result: yes
configure:6777: checking whether gcc accepts -g
configure:6797: gcc -c -g  conftest.c >&5
configure:6797: $? = 0
configure:6838: result: yes
configure:6855: checking for gcc option to enable C11 features
configure:7058: gcc  -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7058: $? = 0
configure:7072: result: none needed
configure:7375: checking dependency style of gcc
configure:7486: result: gcc3
configure:7507: checking how to run the C preprocessor
configure:7538: gcc -E  conftest.c
configure:7538: $? = 0
configure:7552: gcc -E  conftest.c
conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory
compilation terminated.
configure:7552: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU Octave"
| #define PACKAGE_TARNAME "octave"
| #define PACKAGE_VERSION "4.4.0"
| #define PACKAGE_STRING "GNU Octave 4.4.0"
| #define PACKAGE_BUGREPORT "https://octave.org/bugs.html"
| #define PACKAGE_URL "https://www.gnu.org/software/octave/"
| #define PACKAGE "octave"
| #define VERSION "4.4.0"
| #define OCTAVE_SOURCE 1
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:7577: result: gcc -E
configure:7597: gcc -E  conftest.c
configure:7597: $? = 0
configure:7611: gcc -E  conftest.c
conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory
compilation terminated.
configure:7611: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU Octave"
| #define PACKAGE_TARNAME "octave"
| #define PACKAGE_VERSION "4.4.0"
| #define PACKAGE_STRING "GNU Octave 4.4.0"
| #define PACKAGE_BUGREPORT "https://octave.org/bugs.html"
| #define PACKAGE_URL "https://www.gnu.org/software/octave/"
| #define PACKAGE "octave"
| #define VERSION "4.4.0"
| #define OCTAVE_SOURCE 1
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:7640: checking for grep that handles long lines and -e
configure:7698: result: /bin/grep
configure:7703: checking for egrep
configure:7765: result: /bin/grep -E
configure:7770: checking for ANSI C header files
configure:7790: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7790: $? = 0
configure:7863: gcc -o conftest -O2 -march=native -momit-leaf-frame-pointer -s -fPIC   conftest.c  >&5
configure:7863: $? = 0
configure:7863: ./conftest
configure:7863: $? = 0
configure:7874: result: yes
configure:7887: checking for sys/types.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for sys/stat.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for stdlib.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for string.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for memory.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for strings.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for inttypes.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for stdint.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7887: checking for unistd.h
configure:7887: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7887: $? = 0
configure:7887: result: yes
configure:7900: checking minix/config.h usability
configure:7900: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
conftest.c:55:26: fatal error: minix/config.h: No such file or directory
compilation terminated.
configure:7900: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU Octave"
| #define PACKAGE_TARNAME "octave"
| #define PACKAGE_VERSION "4.4.0"
| #define PACKAGE_STRING "GNU Octave 4.4.0"
| #define PACKAGE_BUGREPORT "https://octave.org/bugs.html"
| #define PACKAGE_URL "https://www.gnu.org/software/octave/"
| #define PACKAGE "octave"
| #define VERSION "4.4.0"
| #define OCTAVE_SOURCE 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <minix/config.h>
configure:7900: result: no
configure:7900: checking minix/config.h presence
configure:7900: gcc -E  conftest.c
conftest.c:22:26: fatal error: minix/config.h: No such file or directory
compilation terminated.
configure:7900: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU Octave"
| #define PACKAGE_TARNAME "octave"
| #define PACKAGE_VERSION "4.4.0"
| #define PACKAGE_STRING "GNU Octave 4.4.0"
| #define PACKAGE_BUGREPORT "https://octave.org/bugs.html"
| #define PACKAGE_URL "https://www.gnu.org/software/octave/"
| #define PACKAGE "octave"
| #define VERSION "4.4.0"
| #define OCTAVE_SOURCE 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| /* end confdefs.h.  */
| #include <minix/config.h>
configure:7900: result: no
configure:7900: checking for minix/config.h
configure:7900: result: no
configure:7924: checking whether it is safe to define _EXTENSIONS_
configure:7942: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:7942: $? = 0
configure:7949: result: yes
configure:7982: checking whether _XOPEN_SOURCE should be defined
configure:8001: gcc -c -O2 -march=native -momit-leaf-frame-pointer -s -fPIC  conftest.c >&5
configure:8001: $? = 0
configure:8025: result: no
configure:8045: result: defining octlibdir to be ${libdir}/octave/${version}
configure:8055: result: defining archlibdir to be ${libexecdir}/octave/${version}/exec/${canonical_host_type}
configure:8064: result: defining localarchlibdir to be ${libexecdir}/octave/site/exec/${canonical_host_type}
configure:8071: result: defining localapiarchlibdir to be ${libexecdir}/octave/${api_version}/site/exec/${canonical_host_type}
configure:8078: result: defining localverarchlibdir to be ${libexecdir}/octave/${version}/site/exec/${canonical_host_type}
configure:8088: result: defining octfiledir to be ${libdir}/octave/${version}/oct/${canonical_host_type}
configure:8099: result: defining localoctfiledir to be ${libdir}/octave/site/oct/${canonical_host_type}
configure:8106: result: defining localapioctfiledir to be ${libdir}/octave/site/oct/${api_version}/${canonical_host_type}
configure:8113: result: defining localveroctfiledir to be ${libdir}/octave/${version}/site/oct/${canonical_host_type}
configure:8121: result: defining octincludedir to be ${includedir}/octave-${version}/octave
configure:8131: result: defining fcnfiledir to be ${datadir}/octave/${version}/m
configure:8141: result: defining localfcnfiledir to be ${datadir}/octave/site/m
configure:8148: result: defining localapifcnfiledir to be ${datadir}/octave/site/${api_version}/m
configure:8155: result: defining localverfcnfiledir to be ${datadir}/octave/${version}/site/m
configure:8163: result: defining octetcdir to be ${datadir}/octave/${version}/etc
configure:8171: result: defining octlocaledir to be ${datadir}/octave/${version}/locale
configure:8179: result: defining doc_cache_file to be ${octetcdir}/doc-cache
configure:8187: result: defining octtestsdir to be ${octetcdir}/tests
configure:8195: result: defining texi_macros_file to be ${octetcdir}/macros.texi
configure:8203: result: defining imagedir to be ${datadir}/octave/${version}/imagelib
configure:8211: result: defining octdatadir to be ${datadir}/octave/${version}/data
configure:8219: result: defining octdocdir to be ${datadir}/octave/${version}/doc
configure:8227: result: defining octfontsdir to be ${datadir}/octave/${version}/fonts
configure:8235: result: defining startupfiledir to be ${fcnfiledir}/startup
configure:8241: result: defining localstartupfiledir to be ${localfcnfiledir}/startup
configure:8249: result: defining man1dir to be ${mandir}/man1
configure:8255: result: defining man1ext to be .1
configure:8261: result: defining infofile to be ${infodir}/octave.info
configure:8318: checking for pkg-config
configure:8336: found /usr/bin/pkg-config
configure:8348: result: /usr/bin/pkg-config
configure:8373: checking pkg-config is at least version 0.9.0
configure:8376: result: yes
configure:8391: checking for gawk
configure:8418: result: gawk
configure:8429: checking for grep that handles long lines and -e
configure:8487: result: /bin/grep
configure:8497: checking for gfind
configure:8527: result: no
configure:8497: checking for find
configure:8513: found /usr/bin/find
configure:8524: result: find
configure:8537: checking for a usable sed
configure:8615: result: /bin/sed
configure:8621: checking for perl
configure:8637: found /usr/bin/perl
configure:8648: result: perl
configure:8663: checking for gperf
configure:8679: found /usr/bin/gperf
configure:8690: result: gperf
configure:8719: checking for flex
configure:8735: found /usr/bin/flex
configure:8746: result: flex
configure:8784: flex conftest.l
configure:8788: $? = 0
configure:8790: checking lex output file root
configure:8804: result: lex.yy
configure:8809: checking lex library
configure:8823: gcc -o conftest -O2 -march=native -momit-leaf-frame-pointer -s -fPIC   conftest.c   >&5
/tmp/ccdpfMUw.o: In function `yylex':
conftest.c:(.text+0x1187): undefined reference to `yywrap'
conftest.c:(.text+0x133f): undefined reference to `yywrap'
/tmp/ccdpfMUw.o: In function `main':
conftest.c:(.text.startup+0x9): undefined reference to `yywrap'
collect2: error: ld returned 1 exit status
configure:8823: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU Octave"
| #define PACKAGE_TARNAME "octave"
| #define PACKAGE_VERSION "4.4.0"
| #define PACKAGE_STRING "GNU Octave 4.4.0"
| #define PACKAGE_BUGREPORT "https://octave.org/bugs.html"
| #define PACKAGE_URL "https://www.gnu.org/software/octave/"
| #define PACKAGE "octave"
| #define VERSION "4.4.0"
| #define OCTAVE_SOURCE 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define _EXTENSIONS_ 1
| #define _ALL_SOURCE 1
| #define _DARWIN_C_SOURCE 1
| #define _GNU_SOURCE 1
| #define _NETBSD_SOURCE 1
| #define _OPENBSD_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _STDC_WANT_IEC_60559_ATTRIBS_EXT_ 1
| #define _STDC_WANT_IEC_60559_BFP_EXT_ 1
| #define _STDC_WANT_IEC_60559_DFP_EXT_ 1
| #define _STDC_WANT_IEC_60559_FUNCS_EXT_ 1
| #define _STDC_WANT_IEC_60559_TYPES_EXT_ 1
| #define _STDC_WANT_LIB_EXT2_ 1
| #define _STDC_WANT_MATH_SPEC_FUNCS_ 1
| #define _TANDEM_SOURCE 1
| #define _HPUX_ALT_XOPEN_SOCKET_API 1
| /* end confdefs.h.  */
|
| #line 3 "lex.yy.c"
|
| #define  YY_INT_ALIGNED short int
|
| /* A lexical scanner generated by flex */
|
| #define FLEX_SCANNER
| #define YY_FLEX_MAJOR_VERSION 2
| #define YY_FLEX_MINOR_VERSION 6
| #define YY_FLEX_SUBMINOR_VERSION 0
| #if YY_FLEX_SUBMINOR_VERSION > 0
| #define FLEX_BETA
| #endif
|
| /* First, we deal with  platform-specific or compiler-specific issues. */
|
| /* begin standard C headers. */
| #include <stdio.h>
| #include <string.h>
| #include <errno.h>
| #include <stdlib.h>
|
| /* end standard C headers. */
|
| /* flex integer type definitions */
|
| #ifndef FLEXINT_H
| #define FLEXINT_H
|
| /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
|
| #if defined (_STDC_VERSION_) && _STDC_VERSION_ >= 199901L
|
| /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
|  * if you want the limit (max/min) macros for int types.
|  */
| #ifndef __STDC_LIMIT_MACROS
| #define __STDC_LIMIT_MACROS 1
| #endif
|
| #include <inttypes.h>
| typedef int8_t flex_int8_t;
| typedef uint8_t flex_uint8_t;
| typedef int16_t flex_int16_t;
| typedef uint16_t flex_uint16_t;
| typedef int32_t flex_int32_t;
| typedef uint32_t flex_uint32_t;
| #else
| typedef signed char flex_int8_t;
| typedef short int flex_int16_t;
| typedef int flex_int32_t;
| typedef unsigned char flex_uint8_t;
| typedef unsigned short int flex_uint16_t;
| typedef unsigned int flex_uint32_t;
|
| /* Limits of integral types. */
| #ifndef INT8_MIN
| #define INT8_MIN               (-128)
| #endif
| #ifndef INT16_MIN
| #define INT16_MIN              (-32767-1)
| #endif
| #ifndef INT32_MIN
| #define INT32_MIN              (-2147483647-1)
| #endif
| #ifndef INT8_MAX
| #define INT8_MAX               (127)
| #endif
| #ifndef INT16_MAX
| #define INT16_MAX              (32767)
| #endif
| #ifndef INT32_MAX
| #define INT32_MAX              (2147483647)
| #endif
| #ifndef UINT8_MAX
| #define UINT8_MAX              (255U)
| #endif
| #ifndef UINT16_MAX
| #define UINT16_MAX             (65535U)
| #endif
| #ifndef UINT32_MAX
| #define UINT32_MAX             (4294967295U)
| #endif
|
| #endif /* ! C99 */
|
| #endif /* ! FLEXINT_H */
|
| #ifdef __cplusplus
|
| /* The "const" storage-class-modifier is valid. */
| #define YY_USE_CONST
|
| #else /* ! __cplusplus */
|
| /* C99 requires _STDC_ to be defined as 1. */
| #if defined (_STDC_)
|
| #define YY_USE_CONST
|
| #endif /* defined (_STDC_) */
| #endif /* ! __cplusplus */
|
| #ifdef YY_USE_CONST
| #define yyconst const
| #else
| #define yyconst
| #endif
|
| /* Returned upon end-of-file. */
| #define YY_NULL 0
|
| /* Promotes a possibly negative, possibly signed char to an unsigned
|  * integer for use as an array index.  If the signed char is negative,
|  * we want to instead treat it as an 8-bit unsigned char, hence the
|  * double cast.
|  */
| #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
|
| /* Enter a start condition.  This macro really ought to take a parameter,
|  * but we do it the disgusting crufty way forced on us by the ()-less
|  * definition of BEGIN.
|  */
| #define BEGIN (yy_start) = 1 + 2 *
|
| /* Translate the current start state into a value that can be later handed
|  * to BEGIN to return to the state.  The YYSTATE alias is for lex
|  * compatibility.
|  */
| #define YY_START (((yy_start) - 1) / 2)
| #define YYSTATE YY_START
|
| /* Action number for EOF rule of a given start state. */
| #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
|
| /* Special action meaning "start processing a new file". */
| #define YY_NEW_FILE yyrestart(yyin  )
|
| #define YY_END_OF_BUFFER_CHAR 0
|
| /* Size of default input buffer. */
| #ifndef YY_BUF_SIZE
| #ifdef _ia64_
| /* On IA-64, the buffer size is 16k, not 8k.
|  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
|  * Ditto for the _ia64_ case accordingly.
|  */
| #define YY_BUF_SIZE 32768
| #else
| #define YY_BUF_SIZE 16384
| #endif /* _ia64_ */
| #endif
|
| /* The state buf must be large enough to hold one state per character in the main buffer.
|  */
| #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
|
| #ifndef YY_TYPEDEF_YY_BUFFER_STATE
| #define YY_TYPEDEF_YY_BUFFER_STATE
| typedef struct yy_buffer_state *YY_BUFFER_STATE;
| #endif
|
| #ifndef YY_TYPEDEF_YY_SIZE_T
| #define YY_TYPEDEF_YY_SIZE_T
| typedef size_t yy_size_t;
| #endif
|
| extern yy_size_t yyleng;
|
| extern FILE yyin, yyout;
|
| #define EOB_ACT_CONTINUE_SCAN 0
| #define EOB_ACT_END_OF_FILE 1
| #define EOB_ACT_LAST_MATCH 2
|
|     #define YY_LESS_LINENO(n)
|     #define YY_LINENO_REWIND_TO(ptr)
|    
| /* Return all but the first "n" matched characters back to the input stream. */
| #define yyless(n) \
| do \
| { \
| /* Undo effects of setting up yytext. */ \
|         int yyless_macro_arg = (n); \
|         YY_LESS_LINENO(yyless_macro_arg);\
| *yy_cp = (yy_hold_char); \
| YY_RESTORE_YY_MORE_OFFSET \
| (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
| YY_DO_BEFORE_ACTION; /* set up yytext again */ \
| } \
| while ( 0 )
|
| #define unput(c) yyunput( c, (yytext_ptr)  )
|
| #ifndef YY_STRUCT_YY_BUFFER_STATE
| #define YY_STRUCT_YY_BUFFER_STATE
| struct yy_buffer_state
| {
| FILE *yy_input_file;
|
| char yy_ch_buf; / input buffer */
| char yy_buf_pos; / current position in input buffer */
|
| /* Size of input buffer in bytes, not including room for EOB
| * characters.
| */
| yy_size_t yy_buf_size;
|
| /* Number of characters read into yy_ch_buf, not including EOB
| * characters.
| */
| int yy_n_chars;
|
| /* Whether we "own" the buffer - i.e., we know we created it,
| * and can realloc() it to grow it, and should free() it to
| * delete it.
| */
| int yy_is_our_buffer;
|
| /* Whether this is an "interactive" input source; if so, and
| * if we're using stdio for input, then we want to use getc()
| * instead of fread(), to make sure we stop fetching input after
| * each newline.
| */
| int yy_is_interactive;
|
| /* Whether we're considered to be at the beginning of a line.
| * If so, '^' rules will be active on the next match, otherwise
| * not.
| */
| int yy_at_bol;
|
|     int yy_bs_lineno; /**< The line count. */
|     int yy_bs_column; /**< The column count. */
|    
| /* Whether to try to fill the input buffer when we reach the
| * end of it.
| */
| int yy_fill_buffer;
|
| int yy_buffer_status;
|
| #define YY_BUFFER_NEW 0
| #define YY_BUFFER_NORMAL 1
| /* When an EOF's been seen but there's still some text to process
| * then we mark the buffer as YY_EOF_PENDING, to indicate that we
| * shouldn't try reading from the input source any more.  We might
| * still have a bunch of tokens to match, though, because of
| * possible backing-up.
| *
| * When we actually see the EOF, we change the status to "new"
| * (via yyrestart()), so that the user can continue scanning by
| * just pointing yyin at a new input file.
| */
| #define YY_BUFFER_EOF_PENDING 2
|
| };
| #endif /* !YY_STRUCT_YY_BUFFER_STATE */
|
| /* Stack of input buffers. */
| static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
| static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
| static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
|
| /* We provide macros for accessing buffer states in case in the
|  * future we want to put the buffer states in a more general
|  * "scanner state".
|  *
|  * Returns the top of the stack, or NULL.
|  */
| #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
|                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
|                           : NULL)
|
| /* Same as previous macro, but useful when we know that the buffer stack is not
|  * NULL or when we need an lvalue. For internal use only.
|  */
| #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
|
| /* yy_hold_char holds the character lost when yytext is formed. */
| static char yy_hold_char;
| static int yy_n_chars; /* number of characters read into yy_ch_buf */
| yy_size_t yyleng;
|
| /* Points to current character in buffer. */
| static char yy_c_buf_p = (char ) 0;
| static int yy_init = 0; /* whether we need to initialize */
| static int yy_start = 0; /* start state number */
|
| /* Flag which is used to allow yywrap()'s to do buffer switches
|  * instead of setting up a fresh yyin.  A bit of a hack ...
|  */
| static int yy_did_buffer_switch_on_eof;
|
| void yyrestart (FILE *input_file  );
| void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
| YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
| void yy_delete_buffer (YY_BUFFER_STATE b  );
| void yy_flush_buffer (YY_BUFFER_STATE b  );
| void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
| void yypop_buffer_state (void );
|
| static void yyensure_buffer_stack (void );
| static void yy_load_buffer_state (void );
| static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
|
| #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
|
| YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
| YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
| YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
|
| void *yyalloc (yy_size_t  );
| void yyrealloc (void ,yy_size_t  );
| void yyfree (void *  );
|
| #define yy_new_buffer yy_create_buffer
|
| #define yy_set_interactive(is_interactive) \
| { \
| if ( ! YY_CURRENT_BUFFER ){ \
|         yyensure_buffer_stack (); \
| YY_CURRENT_BUFFER_LVALUE =    \
|             yy_create_buffer(yyin,YY_BUF_SIZE ); \
| } \
| YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
| }
|
| #define yy_set_bol(at_bol) \
| { \
| if ( ! YY_CURRENT_BUFFER ){\
|         yyensure_buffer_stack (); \
| YY_CURRENT_BUFFER_LVALUE =    \
|             yy_create_buffer(yyin,YY_BUF_SIZE ); \
| } \
| YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
| }
|
| #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
|
| /* Begin user sect3 */
|
| typedef unsigned char YY_CHAR;
|
| FILE yyin = (FILE ) 0, yyout = (FILE ) 0;
|
| typedef int yy_state_type;
|
| extern int yylineno;
|
| int yylineno = 1;
|
| extern char *yytext;
| #ifdef yytext_ptr
| #undef yytext_ptr
| #endif
| #define yytext_ptr yytext
|
| static yy_state_type yy_get_previous_state (void );
| static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
| static int yy_get_next_buffer (void );
| #if defined(_GNUC_) && _GNUC_ >= 3
| _attribute_((_noreturn_))
| #endif
| static void yy_fatal_error (yyconst char msg[]  );
|
| /* Done after the current pattern has been matched and before the
|  * corresponding action - sets up yytext.
|  */
| #define YY_DO_BEFORE_ACTION \
| (yytext_ptr) = yy_bp; \
| (yytext_ptr) -= (yy_more_len); \
| yyleng = (size_t) (yy_cp - (yytext_ptr)); \
| (yy_hold_char) = *yy_cp; \
| *yy_cp = '\0'; \
| (yy_c_buf_p) = yy_cp;
|
| #define YY_NUM_RULES 8
| #define YY_END_OF_BUFFER 9
| /* This struct is not used in this scanner,
|    but its presence is necessary. */
| struct yy_trans_info
| {
| flex_int32_t yy_verify;
| flex_int32_t yy_nxt;
| };
| static yyconst flex_int16_t yy_acclist[23] =
|     {   0,
|         9,    7,    8,    8,    1,    7,    8,    2,    7,    8,
|         3,    7,    8,    4,    7,    8,    5,    7,    8,    6,
|         7,    8
|     } ;
|
| static yyconst flex_int16_t yy_accept[14] =
|     {   0,
|         1,    1,    1,    2,    4,    5,    8,   11,   14,   17,
|        20,   23,   23
|     } ;
|
| static yyconst YY_CHAR yy_ec[256] =
|     {   0,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    3,    4,    5,    6,
|
|         7,    8,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
|         1,    1,    1,    1,    1
|     } ;
|
| static yyconst YY_CHAR yy_meta[9] =
|     {   0,
|         1,    1,    1,    1,    1,    1,    1,    1
|     } ;
|
| static yyconst flex_uint16_t yy_base[13] =
|     {   0,
|         0,    0,    9,   10,   10,   10,   10,   10,   10,   10,
|        10,   10
|     } ;
|
| static yyconst flex_int16_t yy_def[13] =
|     {   0,
|        12,    1,   12,   12,   12,   12,   12,   12,   12,   12,
|        12,    0
|     } ;
|
| static yyconst flex_uint16_t yy_nxt[19] =
|     {   0,
|         4,    5,    6,    7,    8,    9,   10,   11,   12,    3,
|        12,   12,   12,   12,   12,   12,   12,   12
|     } ;
|
| static yyconst flex_int16_t yy_chk[19] =
|     {   0,
|         1,    1,    1,    1,    1,    1,    1,    1,    3,   12,
|        12,   12,   12,   12,   12,   12,   12,   12
|     } ;
|
| extern int yy_flex_debug;
| int yy_flex_debug = 0;
|
| static yy_state_type yy_state_buf=0, yy_state_ptr=0;
| static char *yy_full_match;
| static int yy_lp;
| #define REJECT \
| { \
| yy_cp = (yy_hold_char); / undo effects of setting up yytext */ \
| yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
| ++(yy_lp); \
| goto find_rule; \
| }
|
| static int yy_more_flag = 0;
| static int yy_more_len = 0;
| #define yymore() ((yy_more_flag) = 1)
| #define YY_MORE_ADJ (yy_more_len)
| #define YY_RESTORE_YY_MORE_OFFSET
| char *yytext;
| #line 1 "conftest.l"
| #line 484 "lex.yy.c"
|
| #define INITIAL 0
|
| #ifndef YY_NO_UNISTD_H
| /* Special case for "unistd.h", since it is non-ANSI. We include it way
|  * down here because we want the user's section 1 to have been scanned first.
|  * The user has a chance to override it with an option.
|  */
| #include <unistd.h>
| #endif
|
| #ifndef YY_EXTRA_TYPE
| #define YY_EXTRA_TYPE void *
| #endif
|
| static int yy_init_globals (void );
|
| /* Accessor methods to globals.
|    These are made visible to non-reentrant scanners for convenience. */
|
| int yylex_destroy (void );
|
| int yyget_debug (void );
|
| void yyset_debug (int debug_flag  );
|
| YY_EXTRA_TYPE yyget_extra (void );
|
| void yyset_extra (YY_EXTRA_TYPE user_defined  );
|
| FILE *yyget_in (void );
|
| void yyset_in  (FILE * _in_str  );
|
| FILE *yyget_out (void );
|
| void yyset_out  (FILE * _out_str  );
|
| yy_size_t yyget_leng (void );
|
| char *yyget_text (void );
|
| int yyget_lineno (void );
|
| void yyset_lineno (int _line_number  );
|
| /* Macros after this point can all be overridden by user definitions in
|  * section 1.
|  */
|
| #ifndef YY_SKIP_YYWRAP
| #ifdef __cplusplus
| extern "C" int yywrap (void );
| #else
| extern int yywrap (void );
| #endif
| #endif
|
| #ifndef YY_NO_UNPUT
|    
|     static void yyunput (int c,char *buf_ptr  );
|    
| #endif
|
| #ifndef yytext_ptr
| static void yy_flex_strncpy (char ,yyconst char ,int );
| #endif
|
| #ifdef YY_NEED_STRLEN
| static int yy_flex_strlen (yyconst char * );
| #endif
|
| #ifndef YY_NO_INPUT
|
| #ifdef __cplusplus
| static int yyinput (void );
| #else
| static int input (void );
| #endif
|
| #endif
|
| /* Amount of stuff to slurp up with each read. */
| #ifndef YY_READ_BUF_SIZE
| #ifdef _ia64_
| /* On IA-64, the buffer size is 16k, not 8k */
| #define YY_READ_BUF_SIZE 16384
| #else
| #define YY_READ_BUF_SIZE 8192
| #endif /* _ia64_ */
| #endif
|
| /* Copy whatever the last rule matched to the standard output. */
| #ifndef ECHO
| /* This used to be an fputs(), but since the string might contain NUL's,
|  * we now use fwrite().
|  */
| #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
| #endif
|
| /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
|  * is returned in "result".
|  */
| #ifndef YY_INPUT
| #define YY_INPUT(buf,result,max_size) \
| if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
| { \
| int c = '*'; \
| size_t n; \
| for ( n = 0; n < max_size && \
|      (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
| buf[n] = (char) c; \
| if ( c == '\n' ) \
| buf[n++] = (char) c; \
| if ( c == EOF && ferror( yyin ) ) \
| YY_FATAL_ERROR( "input in flex scanner failed" ); \
| result = n; \
| } \
| else \
| { \
| errno=0; \
| while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
| { \
| if( errno != EINTR) \
| { \
| YY_FATAL_ERROR( "input in flex scanner failed" ); \
| break; \
| } \
| errno=0; \
| clearerr(yyin); \
| } \
| }\
| \
|
| #endif
|
| /* No semi-colon after return; correct usage is to write "yyterminate();" -
|  * we don't want an extra ';' after the "return" because that will cause
|  * some compilers to complain about unreachable statements.
|  */
| #ifndef yyterminate
| #define yyterminate() return YY_NULL
| #endif
|
| /* Number of entries by which start-condition stack grows. */
| #ifndef YY_START_STACK_INCR
| #define YY_START_STACK_INCR 25
| #endif
|
| /* Report a fatal error. */
| #ifndef YY_FATAL_ERROR
| #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
| #endif
|
| /* end tables serialization structures and prototypes */
|
| /* Default declaration of generated scanner - a define so the user can
|  * easily add parameters.
|  */
| #ifndef YY_DECL
| #define YY_DECL_IS_OURS 1
|
| extern int yylex (void);
|
| #define YY_DECL int yylex (void)
| #endif /* !YY_DECL */
|
| /* Code executed at the beginning of each rule, after yytext and yyleng
|  * have been set up.
|  */
| #ifndef YY_USER_ACTION
| #define YY_USER_ACTION
| #endif
|
| /* Code executed at the end of each rule. */
| #ifndef YY_BREAK
| #define YY_BREAK /*LINTED*/break;
| #endif
|
| #define YY_RULE_SETUP \
| YY_USER_ACTION
|
| /** The main scanner function which does all the work.
|  */
| YY_DECL
| {
| yy_state_type yy_current_state;
| char yy_cp, yy_bp;
| int yy_act;
|    
| if ( !(yy_init) )
| {
| (yy_init) = 1;
|
| #ifdef YY_USER_INIT
| YY_USER_INIT;
| #endif
|
|         /* Create the reject buffer large enough to save one state per allowed character. */
|         if ( ! (yy_state_buf) )
|             (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE  );
|             if ( ! (yy_state_buf) )
|                 YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
|
| if ( ! (yy_start) )
| (yy_start) = 1; /* first start state */
|
| if ( ! yyin )
| yyin = stdin;
|
| if ( ! yyout )
| yyout = stdout;
|
| if ( ! YY_CURRENT_BUFFER ) {
| yyensure_buffer_stack ();
| YY_CURRENT_BUFFER_LVALUE =
| yy_create_buffer(yyin,YY_BUF_SIZE );
| }
|
| yy_load_buffer_state( );
| }
|
| {
| #line 1 "conftest.l"
|
| #line 710 "lex.yy.c"
|
| while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
| {
| (yy_more_len) = 0;
| if ( (yy_more_flag) )
| {
| (yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
| (yy_more_flag) = 0;
| }
| yy_cp = (yy_c_buf_p);
|
| /* Support of yytext. */
| *yy_cp = (yy_hold_char);
|
| /* yy_bp points to the position in yy_ch_buf of the start of
| * the current run.
| */
| yy_bp = yy_cp;
|
| yy_current_state = (yy_start);
|
| (yy_state_ptr) = (yy_state_buf);
| *(yy_state_ptr)++ = yy_current_state;
|
| yy_match:
| do
| {
| YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
| while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
| {
| yy_current_state = (int) yy_def[yy_current_state];
| if ( yy_current_state >= 13 )
| yy_c = yy_meta[(unsigned int) yy_c];
| }
| yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
| *(yy_state_ptr)++ = yy_current_state;
| ++yy_cp;
| }
| while ( yy_base[yy_current_state] != 10 );
|
| yy_find_action:
| yy_current_state = *--(yy_state_ptr);
| (yy_lp) = yy_accept[yy_current_state];
| find_rule: /* we branch to this label when backing up */
| for ( ; ; ) /* until we find what rule we matched */
| {
| if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
| {
| yy_act = yy_acclist[(yy_lp)];
| {
| (yy_full_match) = yy_cp;
| break;
| }
| }
| --yy_cp;
| yy_current_state = *--(yy_state_ptr);
| (yy_lp) = yy_accept[yy_current_state];
| }
|
| YY_DO_BEFORE_ACTION;
|
| do_action: /* This label is used only to access EOF actions. */
|
| switch ( yy_act )
| { /* beginning of action switch */
| case 1:
| YY_RULE_SETUP
| #line 2 "conftest.l"
| { ECHO; }
| YY_BREAK
| case 2:
| YY_RULE_SETUP
| #line 3 "conftest.l"
| { REJECT; }
| YY_BREAK
| case 3:
| YY_RULE_SETUP
| #line 4 "conftest.l"
| { yymore (); }
| YY_BREAK
| case 4:
| YY_RULE_SETUP
| #line 5 "conftest.l"
| { yyless (1); }
| YY_BREAK
| case 5:
| YY_RULE_SETUP
| #line 6 "conftest.l"
| { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
|     yyless ((input () != 0)); }
| YY_BREAK
| case 6:
| YY_RULE_SETUP
| #line 8 "conftest.l"
| { unput (yytext[0]); }
| YY_BREAK
| case 7:
| YY_RULE_SETUP
| #line 9 "conftest.l"
| { BEGIN INITIAL; }
| YY_BREAK
| case 8:
| YY_RULE_SETUP
| #line 10 "conftest.l"
| ECHO;
| YY_BREAK
| #line 817 "lex.yy.c"
| case YY_STATE_EOF(INITIAL):
| yyterminate();
|
| case YY_END_OF_BUFFER:
| {
| /* Amount of text matched not including the EOB char. */
| int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
|
| /* Undo the effects of YY_DO_BEFORE_ACTION. */
| *yy_cp = (yy_hold_char);
| YY_RESTORE_YY_MORE_OFFSET
|
| if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
| {
| /* We're scanning a new file or input source.  It's
| * possible that this happened because the user
| * just pointed yyin at a new source and called
| * yylex().  If so, then we have to assure
| * consistency between YY_CURRENT_BUFFER and our
| * globals.  Here is the right place to do so, because
| * this is the first action (other than possibly a
| * back-up) that will match for the new input source.
| */
| (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
| YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
| YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
| }
|
| /* Note that here we test for yy_c_buf_p "<=" to the position
| * of the first EOB in the buffer, since yy_c_buf_p will
| * already have been incremented past the NUL character
| * (since all states make transitions on EOB to the
| * end-of-buffer state).  Contrast this with the test
| * in input().
| */
| if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
| { /* This was really a NUL. */
| yy_state_type yy_next_state;
|
| (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
|
| yy_current_state = yy_get_previous_state(  );
|
| /* Okay, we're now positioned to make the NUL
| * transition.  We couldn't have
| * yy_get_previous_state() go ahead and do it
| * for us because it doesn't know how to deal
| * with the possibility of jamming (and we don't
| * want to build jamming into it because then it
| * will run more slowly).
| */
|
| yy_next_state = yy_try_NUL_trans( yy_current_state );
|
| yy_bp = (yytext_ptr) + YY_MORE_ADJ;
|
| if ( yy_next_state )
| {
| /* Consume the NUL. */
| yy_cp = ++(yy_c_buf_p);
| yy_current_state = yy_next_state;
| goto yy_match;
| }
|
| else
| {
| yy_cp = (yy_c_buf_p);
| goto yy_find_action;
| }
| }
|
| else switch ( yy_get_next_buffer(  ) )
| {
| case EOB_ACT_END_OF_FILE:
| {
| (yy_did_buffer_switch_on_eof) = 0;
|
| if ( yywrap( ) )
| {
| /* Note: because we've taken care in
| * yy_get_next_buffer() to have set up
| * yytext, we can now set up
| * yy_c_buf_p so that if some total
| * hoser (like flex itself) wants to
| * call the scanner after we return the
| * YY_NULL, it'll still work - another
| * YY_NULL will get returned.
| */
| (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
|
| yy_act = YY_STATE_EOF(YY_START);
| goto do_action;
| }
|
| else
| {
| if ( ! (yy_did_buffer_switch_on_eof) )
| YY_NEW_FILE;
| }
| break;
| }
|
| case EOB_ACT_CONTINUE_SCAN:
| (yy_c_buf_p) =
| (yytext_ptr) + yy_amount_of_matched_text;
|
| yy_current_state = yy_get_previous_state(  );
|
| yy_cp = (yy_c_buf_p);
| yy_bp = (yytext_ptr) + YY_MORE_ADJ;
| goto yy_match;
|
| case EOB_ACT_LAST_MATCH:
| (yy_c_buf_p) =
| &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
|
| yy_current_state = yy_get_previous_state(  );
|
| yy_cp = (yy_c_buf_p);
| yy_bp = (yytext_ptr) + YY_MORE_ADJ;
| goto yy_find_action;
| }
| break;
| }
|
| default:
| YY_FATAL_ERROR(
| "fatal flex scanner internal error--no action found" );
| } /* end of action switch */
| } /* end of scanning one token */
| } /* end of user's declarations */
| } /* end of yylex */
|
| /* yy_get_next_buffer - try to read in a new buffer
|  *
|  * Returns a code representing an action:
|  * EOB_ACT_LAST_MATCH -
|  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
|  * EOB_ACT_END_OF_FILE - end of file
|  */
| static int yy_get_next_buffer (void)
| {
|     char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
| char *source = (yytext_ptr);
| yy_size_t number_to_move, i;
| int ret_val;
|
| if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
| YY_FATAL_ERROR(
| "fatal flex scanner internal error--end of buffer missed" );
|
| if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
| { /* Don't try to fill the buffer, so this is an EOF. */
| if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
| {
| /* We matched a single character, the EOB, so
| * treat this as a final EOF.
| */
| return EOB_ACT_END_OF_FILE;
| }
|
| else
| {
| /* We matched some text prior to the EOB, first
| * process it.
| */
| return EOB_ACT_LAST_MATCH;
| }
| }
|
| /* Try to read more data. */
|
| /* First move last chars to start of buffer. */
| number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
|
| for ( i = 0; i < number_to_move; ++i

Anonymous
Sat 05 May 2018 04:22:56 AM UTC, original submission:  

After compiling and launching 4.4 I get two GUI popup messages.

Could not copy help collection to temporary file. Search capabilities may be affected. Cannot load sqlite database driver!

OK

Then

Could not setup the data required for the documentation viewer. Only help texts in the Console Widget will be available.

OK

After clicking OK both times, it all works fine. Any way to remove the popups? I tried recompiling with --disable-docs but it didn't change the outcome.

Anonymous

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

Attached Files
file #46245:  readonlydoc.patch added by lostbard (965B - application/octet-stream)
file #46236:  octave_interpreter_before.qhc added by mmuetzel (32KiB - application/octet-stream)
file #46237:  octave_interpreter_after.qhc added by mmuetzel (464KiB - application/octet-stream)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by lostbard (Posted a comment)
  • -email is unavailable- added by mmuetzel (Updated the item)
  • -email is unavailable- added by mmuetzel
  • -email is unavailable- added by pantxo (Posted a comment)
  • -email is unavailable- added by octavebugs (Posted a comment)
  • -email is unavailable- added by sebald (Posted a comment)
  •  

    Do you think this task is very important?
    If so, you can add your encouragement to it.
    This task has 0 encouragements so far.

    Only project members can vote.

     

     

     

    Follow 23 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2019-02-23 mmuetzel StatusReady For Test => Fixed
        Open/ClosedOpen => Closed
    2019-02-14 mmuetzel StatusPatch Submitted => Ready For Test
        Operating SystemGNU/Linux => Any
    2019-02-14 mmuetzel Release4.4.0 => 5.0.91
    2019-02-12 lostbard Attached File- => Added readonlydoc.patch, #46245
        StatusConfirmed => Patch Submitted
    2019-02-11 mtmiller StatusWorks For Me => Confirmed
        Open/ClosedClosed => Open
        SummaryCould not copy help collection to temporary file. Cannot load sqlite database driver! => Could not copy help collection to temporary file. Cannot load sqlite database driver! with Qt 5.12
    2019-02-11 mtmiller Carbon-CopyRemoved 80942 => -
    2019-02-11 mmuetzel Attached File- => Added octave_interpreter_before.qhc, #46236
        Attached File- => Added octave_interpreter_after.qhc, #46237
    2019-02-09 sbon Carbon-CopyRemoved 135355 => -
    2019-02-09 mmuetzel Attached File- => Added bug53841_Windows_help_collection.png, #46221
        Carbon-Copy- => Added lostbard
    2018-05-11 mtmiller Open/ClosedOpen => Closed
    2018-05-08 mtmiller Open/ClosedClosed => Open
    2018-05-08 sebald Attached File- => Added octave-documentation_more_robust_warning_message-djs2018may08.patch, #44123
    2018-05-07 sebald Attached File- => Added octave-gui_qt_sql_module-djs2018may07.patch, #44117
    2018-05-07 mtmiller CategoryNone => GUI
        StatusNone => Works For Me
        Open/ClosedOpen => Closed

    Back to the top


    Powered by Savane 3.5