Bug 230412 - graphics/GraphicsMagick: fails to build with libc++ 7
Summary: graphics/GraphicsMagick: fails to build with libc++ 7
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Only Me
Assignee: freebsd-toolchain mailing list
URL:
Keywords: needs-qa
Depends on:
Blocks: 230355
  Show dependency treegraph
 
Reported: 2018-08-06 16:47 UTC by Jan Beich
Modified: 2018-10-14 17:39 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jan Beich freebsd_committer 2018-08-06 16:47:27 UTC
$ c++ -v
FreeBSD clang version 7.0.0 (branches/release_70 338892) (based on LLVM 7.0.0svn)
Target: x86_64-unknown-freebsd12.0
Thread model: posix
InstalledDir: /usr/bin

$ make
[...]
checking whether the compiler supports ISO C++ standard library... no
checking whether the compiler supports ios::binary... no
checking whether C++ compiler is sufficient for Magick++... no (failed tests)
[...]
pkg-static: Unable to access file /wrkdirs/usr/ports/graphics/GraphicsMagick/work/stage/usr/local/bin/GraphicsMagick++-config:No such file or directory
pkg-static: Unable to access file /wrkdirs/usr/ports/graphics/GraphicsMagick/work/stage/usr/local/include/GraphicsMagick/Magick++.h:No such file or directory
[...]

build log: https://ptpb.pw/KrTc

$ echo '#include <fstream>' | g++7 -xc++ - -std=c++03 -nostdinc++ -isystem/usr/include/c++/v1
In file included from /usr/include/c++/v1/__locale:15:0,
                 from /usr/include/c++/v1/ios:216,
                 from /usr/include/c++/v1/ostream:138,
                 from /usr/include/c++/v1/fstream:184,
                 from <stdin>:1:
/usr/include/c++/v1/string:811:35: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
     basic_string(const _CharT* __s) {
                                   ^
/usr/include/c++/v1/string:821:62: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         basic_string(const _CharT* __s, const _Allocator& __a);
                                                              ^
/usr/include/c++/v1/string:832:70: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         basic_string(size_type __n, _CharT __c, const _Allocator& __a);
                                                                      ^
/usr/include/c++/v1/string:843:75: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
                               const allocator_type& __a = allocator_type());
                                                                           ^
/usr/include/c++/v1/string:847:45: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         explicit basic_string(const _Tp& __t);
                                             ^
/usr/include/c++/v1/string:851:72: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         explicit basic_string(const _Tp& __t, const allocator_type& __a);
                                                                        ^
/usr/include/c++/v1/string:874:43: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
     basic_string& operator=(const _Tp& __t)
                                           ^
Comment 1 Jan Beich freebsd_committer 2018-08-06 16:51:00 UTC
USES=compiler:gcc-c++11-lib where -std= < C++11 was broken by https://reviews.llvm.org/rL336132
Comment 2 Antoine Brodin freebsd_committer 2018-09-15 21:16:36 UTC
Is there some progress on this issue?
Comment 3 Dimitry Andric freebsd_committer 2018-09-16 07:15:13 UTC
(In reply to Antoine Brodin from comment #2)
> Is there some progress on this issue?

I've just tried "make configure" in the port, which is at r477008, and it ran without any errors.  This is with clang700-import r338690:

===>  Configuring for GraphicsMagick-1.3.30,1
configure: loading site script /share/dim/ports/Templates/config.site
configuring GraphicsMagick 1.3.30
checking build system type... amd64-portbld-freebsd12.0
checking host system type... amd64-portbld-freebsd12.0
checking whether build environment is sane... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for a thread-safe mkdir -p... (cached) /bin/mkdir -p
checking for gawk... (cached) /usr/bin/awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for style of include used by make... GNU
checking for gcc... gcc7
[...]
checking whether C++ compiler is sufficient for Magick++... yes

and the port compiles to the end.  Maybe this is because of sunpoet's recent update to 1.3.0?

Jan's example test still fails, though, but I'm not sure if it is still relevant:

$ echo '#include <fstream>' | g++7 -xc++ - -std=c++03 -nostdinc++ -isystem/usr/include/c++/v1
In file included from /usr/include/c++/v1/__locale:15:0,
                 from /usr/include/c++/v1/ios:216,
                 from /usr/include/c++/v1/ostream:138,
                 from /usr/include/c++/v1/fstream:184,
                 from <stdin>:1:
/usr/include/c++/v1/string:811:35: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
     basic_string(const _CharT* __s) {
                                   ^
/usr/include/c++/v1/string:821:62: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         basic_string(const _CharT* __s, const _Allocator& __a);
                                                              ^
/usr/include/c++/v1/string:832:70: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         basic_string(size_type __n, _CharT __c, const _Allocator& __a);
                                                                      ^
/usr/include/c++/v1/string:843:75: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
                               const allocator_type& __a = allocator_type());
                                                                           ^
/usr/include/c++/v1/string:847:45: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         explicit basic_string(const _Tp& __t);
                                             ^
/usr/include/c++/v1/string:851:72: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
         explicit basic_string(const _Tp& __t, const allocator_type& __a);
                                                                        ^
/usr/include/c++/v1/string:874:43: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
     basic_string& operator=(const _Tp& __t)
                                           ^

This actually seems to be an issue in the <string> header, I'm checking it with upstream now.
Comment 4 Jan Beich freebsd_committer 2018-09-16 07:44:03 UTC
(In reply to Dimitry Andric from comment #3)
> I've just tried "make configure" in the port,
> which is at r477008, and it ran without any errors.
> This is with clang700-import r338690:

FWIW, I have clang700-import from r338597 and GraphicsMagick still fails to build, see https://ptpb.pw/7La2
Comment 5 Dimitry Andric freebsd_committer 2018-09-16 10:08:10 UTC
(In reply to Jan Beich from comment #4)
> (In reply to Dimitry Andric from comment #3)
> > I've just tried "make configure" in the port,
> > which is at r477008, and it ran without any errors.
> > This is with clang700-import r338690:
> 
> FWIW, I have clang700-import from r338597 and GraphicsMagick still fails to
> build, see https://ptpb.pw/7La2

Right, it's only in the install phase that it fails, due to it apparently not wanting to install any C++ headers or libraries.

Maybe as a short-term fix we can undo r446932, which dialed down the C++ standard to C++03, specifically for a missing operator delete(void*, size_t) -- see bug 221065, bug 219486 et al.

But this operator was already merged to stable/10 in base r321222, and it ended up in 10.4-RELEASE, so those problems are obsolete now.

Meanwhile, I have submitted an upstream bug for the <string> issue here: https://bugs.llvm.org/show_bug.cgi?id=38964
Comment 6 Antoine Brodin freebsd_committer 2018-10-07 10:57:40 UTC
@sunpoet : can you verify that the c++03 is no longer needed and remove it?
Comment 7 commit-hook freebsd_committer 2018-10-14 16:30:07 UTC
A commit references this bug:

Author: sunpoet
Date: Sun Oct 14 16:29:18 UTC 2018
New revision: 482063
URL: https://svnweb.freebsd.org/changeset/ports/482063

Log:
  Fix build with libc++ 7

  PR:		230412
  Reported by:	jbeich
  Submitted by:	dim

Changes:
  head/graphics/GraphicsMagick/Makefile
Comment 8 Sunpoet Po-Chuan Hsieh freebsd_committer 2018-10-14 17:39:12 UTC
Committed. Thanks!