Opened 5 years ago
Closed 3 years ago
#59898 closed defect (invalid)
pure-octave: why are we setting -std=gnu++11?
Reported by: | ryandesign (Ryan Carsten Schmidt) | Owned by: | agraef (Albert Graef) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.6.2 |
Keywords: | Cc: | ||
Port: | pure-octave |
Description
The pure-octave port contains this:
# Apparently the port group removes this for some reason, but we absolutely need this. configure.cxxflags-append -std=gnu++11
I agree that the port fails to build without that, but it shouldn't be our responsibility; the build system should be doing it. I don't understand where you think the build system would otherwise be adding that. I don't see a -std
flag in the pure-octave Makefile.
Change History (1)
comment:1 Changed 3 years ago by ryandesign (Ryan Carsten Schmidt)
Resolution: | → invalid |
---|---|
Status: | assigned → closed |
Note: See
TracTickets for help on using
tickets.
I see now. It is indeed the pure 1.0 portgroup that is causing the port to need to add this flag manually, but there is a good reason.
The C++11 requirement isn't coming from pure-octave itself; it's its dependency octave that requires C++11 or newer as of version 4.2 per an octave mailing list post mentioned in the octave Portfile. That's why the pure-octave Makefile wouldn't itself contain the
-std
flag.The pure modules don't have configure scripts and in that case it is the responsibility of the Portfile (or, for the pure modules, since they're all so similar, the code was abstracted out into the pure 1.0 portgroup) to ensure that the build happens using the compiler and flags MacPorts tells it to use. The pure 1.0 portgroup does this by running
make
with arguments to setCC
,CFLAGS
,CPPFLAGS
,CXX
,CXXFLAGS
, andLDFLAGS
. (Many Portfiles these days use the makefile 1.0 portgroup to do the same thing. The makefile 1.0 portgroup didn't exist when the pure 1.0 portgroup was written which is why it does it manually.)What's unique for pure-octave is that its Makefile compiles and links using
mkoctfile
which has its own knowledge of what compiler and flags to use for compiling and linking, as determined at the time octave was built. We don't want to use that compiler and flags since that compiler might no longer be installed now and the flags might for example reference an SDK that no longer exists.mkoctfile
's stored value ofCXX
contains the-std
flag:When the portgroup overrides the
CXX
variable when runningmake
, that's what causes the-std
flag to disappear. Since we want to continue to override the compiler value to ensure it's a compiler that exists, and sincemkoctfile
doesn't seem to have a way to obtain the-std
flag without simultaneously obtaining the unwanted compiler path, we have to add the-std
flag manually. (I suppose we could getmkoctfile -p CXX
and strip out the first word, but just adding the flag manually seems simpler for now.)In fact we were only correctly overriding the compiler for the compile step. For the link step, the compiler known to
mkoctfile
was still being used. I've fixed that so now the right compiler is used for linking too.