bugGNU Octave - Bugs: bug #59806, SuiteSparse headers not found

 
 

bug #59806: SuiteSparse headers not found

Submitter:  None
Submitted:  Sun 03 Jan 2021 05:23:47 AM UTC
   
 
Category:  Configuration and Build System Severity:  3 - Normal
Priority:  5 - Normal Item Group:  Build Failure
Status:  Fixed Assigned to:  None
Originator Name:  Kyle Guinn Originator Email:  -email is unavailable-
Open/Closed:  * Closed Release:  * dev
Operating System:  * Any Fixed Release:  None
Planned Release:  None
* Mandatory Fields

Add a New Comment Rich Markup
   

Jump to the original submission

Thu 11 Mar 2021 05:12:04 PM UTC, comment #21: 

I changed the priority of top-level headers by re-ordering the parameter lists to OCTAVE_CHECK_LIB in this changeset http://hg.savannah.gnu.org/hgweb/octave/rev/dba6e9920113.

I removed the search for Suitesparse headers in the ancient ufsparse directory by removing those instances from the parameter list of OCTAVE_CHECK_LIB in this changeset http://hg.savannah.gnu.org/hgweb/octave/rev/73db3b4d2188.

Everything seems to have been completed for this report so I'm closing it.

Rik <rik5>
Group administrator
Thu 11 Mar 2021 03:16:06 AM UTC, comment #20: 

Yeah, I don't know about qhull.  I don't know whether there are any distributions that install the header as qhull.h now.  Since I think that is an obsolete name, we should probably check for the headers in the following order:


libqhull.h
libqhull/libqhull.h
qhull/libqhull.h
qhull.h
qhull/qhull.h


John W. Eaton <jwe>
Group administrator
Thu 11 Mar 2021 12:53:47 AM UTC, comment #19: 

In terms of changesets, it would be best to make the changes jwe suggested in two different commits.  The first commit would change the ordering and the second commit would remove the ufsparse/ prefix.  Just in case something goes wrong, it would be better to be able to atomically undo the changes which caused a problem rather than having a single mixed changeset.

Rik <rik5>
Group administrator
Thu 11 Mar 2021 12:44:35 AM UTC, comment #18: 

Just to understand things more clearly, how does this check for a Qhull header in configure.ac get updated?


OCTAVE_CHECK_LIB(qhull, QHull,
  [Qhull library not found.  This will result in loss of functionality for some geometry functions.],
  [libqhull/libqhull.h qhull/libqhull.h libqhull.h qhull/qhull.h qhull.h],


There is apparently a preference for libqhull.h over qhull.h.  Should that be respected or should all header files without a directory take precedence over all header files with a directory?

Option 1 : Precedence only within group


  [libqhull.h libqhull/libqhull.h qhull/libqhull.h qhull.h qhull/qhull.h],


Option 2 : Global preference for headers without a directory component.


  [libqhull.h qhull.h libqhull/libqhull.h qhull/libqhull.h qhull/qhull.h],


Rik <rik5>
Group administrator
Wed 10 Mar 2021 04:43:41 AM UTC, comment #17: 

I agree with checking for the header file without a directory prefix first.  Unless there is a special reason to handle some header files differently, then we should probably do that for all headers, not just suitesparse.  For suitesparse, we can also probably drop the ufsparse/ prefix now.

John W. Eaton <jwe>
Group administrator
Tue 09 Mar 2021 04:24:55 PM UTC, comment #16: 

Can we decide on whether the order of checking SuiteSparse headers needs to be changed.  If not, we might as well close this report since no one seems to be working on it.

Rik <rik5>
Group administrator
Tue 12 Jan 2021 07:14:13 AM UTC, comment #15: 

The build error on stable seems to be fixed.
The remaining issue is probably better suited for the default branch.
Changing target release to "dev".

Markus Mützel <mmuetzel>
Group administrator
Mon 11 Jan 2021 09:38:47 AM UTC, comment #14: 

The discussion here became a bit confusing because two completely different issues are discussed.
Off-topic comments are:
comment #5, comment #6, comment #7, comment #8, comment #9, comment #10, comment #12, comment #13

This report is still open about the point raised in comment #11: Should the order in which we check for SuiteSparse headers be changed? And is it save to do so?

Markus Mützel <mmuetzel>
Group administrator
Sun 10 Jan 2021 02:17:48 PM UTC, comment #13: 

comment #12:

> Stefan, I pushed a changeset for the bison problem here:
>
> http://hg.savannah.gnu.org/hgweb/octave/rev/59696b24ea53
>
> Thanks for the report about that.


I think you missed line 1344 of file  oct-parse.yy.

Stefan Husmann <haawda>
Wed 06 Jan 2021 10:18:35 PM UTC, comment #12: 

Stefan, I pushed a changeset for the bison problem here:

http://hg.savannah.gnu.org/hgweb/octave/rev/59696b24ea53

Thanks for the report about that.

John W. Eaton <jwe>
Group administrator
Tue 05 Jan 2021 01:57:34 AM UTC, comment #11: 

comment #3:

> I see how changing the order in which OCTAVE_CHECK_LIB checks for headers might make a difference.
> But if I understand that function correctly, it stops checking as soon as it found the first header in the list:
> https://hg.savannah.gnu.org/hgweb/octave/file/70ae19d4e67b/m4/acinclude.m4#l847
>
> Does changing the order of the includes in oct-sparse.h make any difference?
>
> I'd agree that testing for the header without sub-folder first is probably a good idea.
> I don't know how different distributions install these headers. So, I'm not sure if changing the order in which the different sub-folders are checked could be important.
> Is there a reason you changed those as well?


Changing the OCTAVE_CHECK_LIB order does the real magic; changing the order in oct-sparse.h was cosmetic and meant to match how OCTAVE_CHECK_LIB searches.  As long as nobody is hand-editing their config.h files and enabling more than one HAVE_*_H option at a time, the oct-sparse.h change isn't strictly necessary.

My only concern is if it happens to find some unrelated header with the same name in a default search path, when previously it would have found the one in a subdirectory first.  That seems like a more general problem of naming conflicts between packages and ordering the CPPFLAGS correctly to avoid it if it does happen.

Anonymous
Mon 04 Jan 2021 09:48:25 PM UTC, comment #10: 

You were right, with bison 3.7.2 it works as expected.

Stefan Husmann <haawda>
Mon 04 Jan 2021 09:03:18 PM UTC, comment #9: 

Hmm, I looked at the bison sources and found this commit from yesterday:

https://git.savannah.gnu.org/cgit/bison.git/commit/?id=e2199d0fb2e83d908b7a300da0ad00bea0d30e46

style: YYUSE is private, make it YY_USE
This macro is not exposed to users, make start it with 'YY_'.

I will check in a change that will avoid warnings from bison about unused values in rules that doesn't rely on YYUSE.

John W. Eaton <jwe>
Group administrator
Mon 04 Jan 2021 08:17:15 PM UTC, comment #8: 

You might also try building in a completely clean build tree.

John W. Eaton <jwe>
Group administrator
Mon 04 Jan 2021 07:39:04 PM UTC, comment #7: 

Bison 3.7.4+ from git, will try with stable one.

Stefan Husmann <haawda>
Mon 04 Jan 2021 06:43:18 PM UTC, comment #6: 

What version of bison do you have?  This looks like an unrelated build error.  YYUSE should be defined in the generated oct-parse.cc file.

John W. Eaton <jwe>
Group administrator
Mon 04 Jan 2021 06:31:43 PM UTC, comment #5: 

I think this patch did break the build for me. r29254.11343ca3c125 was the last one that succeeds.

  CXX      libinterp/parse-tree/libparse_tree_la-oct-parse.lo
../libinterp/parse-tree/oct-parse.yy: In function 'int octave_push_parse(octave_pstate*, int, const OCTAVE_STYPE*, octave::base_parser&)':
../libinterp/parse-tree/oct-parse.yy:385:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  385 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:394:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  394 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:411:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  411 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:449:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  449 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:559:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  559 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:581:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  581 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:607:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  607 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:615:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  615 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:621:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  621 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:627:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  627 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:656:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  656 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:686:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  686 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:695:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  695 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:704:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  704 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:718:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  718 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:725:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  725 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:732:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  732 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:741:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  741 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:756:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  756 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:768:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  768 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:780:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  780 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:792:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  792 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:810:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  810 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:859:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  859 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:871:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  871 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:883:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  883 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:895:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  895 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:909:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  909 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:928:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  928 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:940:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
  940 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1102:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1102 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1144:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1144 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1159:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1159 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1170:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1170 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1183:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1183 |                     YYUSE ($4);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1217:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1217 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1226:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1226 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1239:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1239 |                     YYUSE ($5);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1251:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1251 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1258:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1258 |                     YYUSE ($4);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1270:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1270 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1284:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1284 |                     YYUSE ($4);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1296:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1296 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1336:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1336 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1349:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1349 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1361:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1361 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1391:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1391 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1408:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1408 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1460:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1460 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1479:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1479 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1507:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1507 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1531:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1531 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1563:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1563 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1591:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1591 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1628:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1628 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1638:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1638 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1699:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1699 |                     YYUSE ($5);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1706:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1706 |                     YYUSE ($4);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1736:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1736 |                     YYUSE ($5);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1757:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1757 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1769:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1769 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1780:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1780 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1787:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1787 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1802:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1802 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1814:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1814 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1820:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1820 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1835:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1835 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1851:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1851 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1858:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1858 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1865:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1865 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1872:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1872 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1882:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1882 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1901:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1901 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1912:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1912 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1948:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1948 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1958:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1958 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:1989:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 1989 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2013:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2013 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2029:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2029 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2043:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2043 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2062:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2062 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2072:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2072 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2085:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2085 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2104:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2104 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2114:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2114 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2123:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2123 |                     YYUSE ($3);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2165:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2165 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2171:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2171 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2177:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2177 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2183:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2183 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2203:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2203 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2209:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2209 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2217:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2217 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2223:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2223 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2229:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2229 |                     YYUSE ($1);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2235:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2235 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2241:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2241 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
../libinterp/parse-tree/oct-parse.yy:2247:21: error: 'YYUSE' was not declared in this scope; did you mean 'YY_USE'?
 2247 |                     YYUSE ($2);
      |                     ^~~~~
      |                     YY_USE
make[2]: * [Makefile:21089: libinterp/parse-tree/libparse_tree_la-oct-parse.lo] Error 1

Stefan Husmann <haawda>
Mon 04 Jan 2021 01:53:50 PM UTC, comment #4: 

I pushed the patch from comment #1 to stable here:
https://hg.savannah.gnu.org/hgweb/octave/rev/87ca5976c648

I'll leave this report open for the potential changes described in comment #2.

Markus Mützel <mmuetzel>
Group administrator
Mon 04 Jan 2021 11:16:33 AM UTC, comment #3: 

I see how changing the order in which OCTAVE_CHECK_LIB checks for headers might make a difference.
But if I understand that function correctly, it stops checking as soon as it found the first header in the list:
https://hg.savannah.gnu.org/hgweb/octave/file/70ae19d4e67b/m4/acinclude.m4#l847

Does changing the order of the includes in oct-sparse.h make any difference?

I'd agree that testing for the header without sub-folder first is probably a good idea.
I don't know how different distributions install these headers. So, I'm not sure if changing the order in which the different sub-folders are checked could be important.
Is there a reason you changed those as well?

Markus Mützel <mmuetzel>
Group administrator
Mon 04 Jan 2021 05:49:34 AM UTC, comment #2: 

Yes that patch fixes it.

I'm experimenting with changing the header search order; patch is attached.  With this it's preferring <amd.h>, etc. instead of <amd/amd.h>, and would fail when oct-sparse.h can't find any of the SuiteSparse headers.  Previously it would fail when umfpack.h can't find amd.h, kind of an obscure case.

(file #50638)

Anonymous
Sun 03 Jan 2021 10:56:53 AM UTC, comment #1: 

It doesn't fail for me on Ubuntu 20.10. But that is probably because that distribution doesn't use pkg-config for amd.

I'll still mark this as confirmed because I think I can follow your logic here.

Is compilation successful on your system if you apply the attached patch?

(file #50628)

Markus Mützel <mmuetzel>
Group administrator
Sun 03 Jan 2021 05:23:47 AM UTC, original submission:  


/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -std=gnu++11 -DHAVE_CONFIG_H -I.  -Iliboctave -I./liboctave -I./liboctave/array -Iliboctave/numeric -I./liboctave/numeric -Iliboctave/operators -I./liboctave/operators -I./liboctave/system -I./liboctave/util -I./libinterp/octave-value -Ilibinterp -I./libinterp -I./libinterp/operators -Ilibinterp/parse-tree -I./libinterp/parse-tree -Ilibinterp/corefcn -I./libinterp/corefcn -I./liboctave/wrappers  -I/usr/include/ImageMagick-6  -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include     -fPIC -pthread -fopenmp -Wall -W -Wshadow -Woverloaded-virtual -Wold-style-cast -Wformat -Wpointer-arith -Wwrite-strings -Wcast-align -Wcast-qual -O2 -fPIC -c -o libinterp/corefcn/libinterp_corefcn_libcorefcn_la-amd.lo `test -f 'libinterp/corefcn/amd.cc' || echo './'`libinterp/corefcn/amd.cc
libtool: compile:  g++ -std=gnu++11 -DHAVE_CONFIG_H -I. -Iliboctave -I./liboctave -I./liboctave/array -Iliboctave/numeric -I./liboctave/numeric -Iliboctave/operators -I./liboctave/operators -I./liboctave/system -I./liboctave/util -I./libinterp/octave-value -Ilibinterp -I./libinterp -I./libinterp/operators -Ilibinterp/parse-tree -I./libinterp/parse-tree -Ilibinterp/corefcn -I./libinterp/corefcn -I./liboctave/wrappers -I/usr/include/ImageMagick-6 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIC -pthread -fopenmp -Wall -W -Wshadow -Woverloaded-virtual -Wold-style-cast -Wformat -Wpointer-arith -Wwrite-strings -Wcast-align -Wcast-qual -O2 -fPIC -c libinterp/corefcn/amd.cc  -fPIC -DPIC -o libinterp/corefcn/.libs/libinterp_corefcn_libcorefcn_la-amd.o
In file included from ./liboctave/util/oct-sparse.h:86:0,
                 from libinterp/corefcn/amd.cc:39:
/usr/include/umfpack/umfpack.h:89:17: fatal error: amd.h: No such file or directory


None of the SuiteSparse CPPFLAGS appear in those commands.  Likely related to the changes in bug #57459, I don't think the flags are being applied with the files in their new location.  Here are my relevant flags (all derived from pkg-config):


  AMD CPPFLAGS:                  -I/usr/include/amd
  CAMD CPPFLAGS:                 -I/usr/include/camd
  CCOLAMD CPPFLAGS:              -I/usr/include/ccolamd
  CHOLMOD CPPFLAGS:              -I/usr/include/cholmod -I/usr/include/amd -I/usr/include/colamd -I/usr/include/camd -I/usr/include/ccolamd -I/usr/include/metis
  COLAMD CPPFLAGS:               -I/usr/include/colamd
  CXSPARSE CPPFLAGS:             -I/usr/include/cxsparse
  KLU CPPFLAGS:                  -I/usr/include/klu -I/usr/include/amd -I/usr/include/colamd -I/usr/include/btf
  UMFPACK CPPFLAGS:              -I/usr/include/umfpack -I/usr/include/cholmod -I/usr/include/amd -I/usr/include/colamd -I/usr/include/camd -I/usr/include/ccolamd -I/usr/include/metis


Quick fix is to add $(AMD_CPPFLAGS) (at a minimum, $(SPARSE_XCPPFLAGS) is probably better) to the libcorefcn.la target.  I'm not sure if any others are needed, I see references to $(ARPACK_CPPFLAGS) and $(QRUPDATE_CPPFLAGS) that also disappeared during the move.

But there's something else going on that makes it fragile.  It appears the SuiteSparse header search is done without considering those CPPFLAGS variables given above, or it's not giving them priority.  So on my system it's preferring to use <amd/amd.h>, <umfpack/umfpack.h>, etc. just from finding them with /usr/include as the default search path.  (Things like HAVE_AMD_AMD_H are set in config.h.)  Then when umfpack.h includes a bare "amd.h" without specifying a directory, the missing -I flags cause it to fail.  If <amd.h>, etc. was preferred instead, maybe it would have failed earlier or more often since it's not in any default search path.

Anonymous

 

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

Attach Files:
   
   
Comment:
   

Attached Files
file #50638:  bug59806_sparse_headers.patch added by None (7KiB - text/x-patch - Adjust SuiteSparse header search order)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by rik5 (Posted a comment)
  • -email is unavailable- added by jwe (Posted a comment)
  • -email is unavailable- added by haawda (Posted a comment)
  • -email is unavailable- added by mmuetzel (Updated the item)
  • -email is unavailable- added by None (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only group members can vote.

     

    Follow 8 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2021-03-11 rik5 StatusIn Progress Fixed
        Open/ClosedOpen Closed
    2021-01-12 mmuetzel Release6.1.0 dev
    2021-01-04 mmuetzel StatusConfirmed In Progress
    2021-01-04 mmuetzel Operating SystemGNU/Linux Any
    2021-01-04 None Attached File- Added bug59806_sparse_headers.patch, #50638
    2021-01-03 mmuetzel Attached File- Added bug59806_sparse_xcppflags.patch, #50628
        StatusNone Confirmed

    Back to the top

    Powered by Savane 3.13-4448.
    Corresponding source code