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

 
 

bug #59806: SuiteSparse headers not found

Submitted by:  None
Submitted on:  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:  In Progress Assigned to:  None
Originator Name:  Kyle Guinn Originator Email:  -email is unavailable-
Open/Closed:  Open Release:  dev
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)

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>
Project Member
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>
Project Member
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>
Project 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>
Project 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>
Project 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>
Project 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>
Project Member
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>
Project Member
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>
Project Member
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 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)
  •  

    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 6 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    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.5