Opened 9 years ago
Closed 8 years ago
#51359 closed defect (fixed)
qhull fails to build on 10.6.8
Reported by: | dyne2meter | Owned by: | mamoll (Mark Moll) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | |
Keywords: | Cc: | mojca (Mojca Miklavec), udbraumann, dliessi (Davide Liessi), michaeld@… | |
Port: | qhull |
Description (last modified by mf2k (Frank Schima))
Log reports
:info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h: In member function ‘std::vector<T, std::allocator<_CharT> > orgQhull::QhullSet<T>::toStdVector() const’: :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:330: error: expected `;' before ‘i’ :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:331: error: expected `;' before ‘e’ :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:333: error: ‘i’ was not declared in this scope :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:333: error: ‘e’ was not declared in this scope
Change History (18)
comment:1 Changed 9 years ago by mf2k (Frank Schima)
Owner: | changed from macports-tickets@… to mmoll@… |
---|---|
Port: | qhull added |
comment:2 Changed 9 years ago by mf2k (Frank Schima)
Description: | modified (diff) |
---|
comment:5 Changed 8 years ago by udbraumann
Same error in 10.5.8 PPC with Apple's gcc 4.2. Note that the previous version 2012.1_3 could be built, while 2015.2_0 cannot.
Here is the code where the error occurs in /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h
(line numbers added here, similar code may follow in this file):
326 template <typename T> 327 std::vector<T> QhullSet<T>:: 328 toStdVector() const 329 { 330 QhullSet<T>::const_iterator i= begin(); 331 QhullSet<T>::const_iterator e= end(); 332 std::vector<T> vs; 333 while(i!=e){ 334 vs.push_back(*i++); 335 } 336 return vs; 337 }//toStdVector
Any ideas how to fix this? Macports' gcc5 fails due to the missing -arch
switch.
comment:7 Changed 8 years ago by josephsacco
This version of qhull does not build on a G4 based PPC running OS X 10.5.8 using Apple's gcc-4.2.1. It can be coerced to build using gcc5 by altering the configuration phase of the MacPorts build as shown:
diff -u Portfile- Portfile --- Portfile- 2016-05-16 15:31:11.000000000 -0400 +++ Portfile 2016-05-16 17:44:32.000000000 -0400 @@ -43,6 +43,11 @@ configure.optflags -O3 -pipe -march=native } +pre-configure { +# Suppress -arch flag + configure.args-append -DCMAKE_OSX_ARCHITECTURES="" + } + configure.args-append -DDOC_INSTALL_DIR=share/doc/qhull -DMAN_INSTALL_DIR=share/man/man1
To understand why this "ham-fisted" approach works, examine lines 122-174 of:
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/_resources/port1.0/group/cmake-1.0.tcl
The MacPorts implementation of cmake always sets the -arch flag for 'platform darwin' irrespective of the choice of compiler. Adding a pre-configure block to the Portfile overwrites what was done in cmake-1.0.tcl.
A better approach would be to modify that section of cmake-1.0.tcl to properly handle GNU compilers.
-Joseph
comment:8 follow-up: 9 Changed 8 years ago by mojca (Mojca Miklavec)
Joseph, see comment:29:ticket:37732.
Does this work with clang (say, clang 3.4)? Maybe we should just blacklist some compilers for qhull.
comment:9 Changed 8 years ago by udbraumann
Having made the changes in Portfile as proposed above, it was possible to build qhull @2015.2
with gcc5 (I guess, gcc48 or gcc49 would also do):
$ sudo port -s upgrade qhull configure.compile=macports-gcc-5
clang34 is presently no option on PPC, but gcc5 is.
comment:10 follow-up: 11 Changed 8 years ago by mojca (Mojca Miklavec)
Cc: | michaeld@… added |
---|---|
Version: | 2.3.4 |
clang worked for me last time I tested (but that was back in March).
I believe that this change requires an action in cmake or at least the cmake PortGroup rather than in this port alone.
comment:11 Changed 8 years ago by udbraumann
Replying to mojca@…:
clang worked for me last time I tested (but that was back in March).
This is amazing, could you please try this one-liner on 10.5.8 PPC:
$ printf '#include<stdio.h> \n int main(void) {fprintf(stderr,"Hello, world\\n");}' | clang-mp-3.4 -arch ppc -mmacosx-version-min=10.5 -x c -o out.exe - && ./out.exe && rm -r out.exe
I obtain heaps of Non-aligned pointer being freed
errors. So, while clang-3.4 can be built on PPC, there is still trouble. Unfortunately I find no time to look deeper into this issue, and as I was recommended, clang-3.7 would be the right version to start to tackle this PPC issues. Note that the command above works for cross compiling from a 10.6.8 Intel platform, and the resulting binary runs on 10.5.8 PPC, and also on 10.6.8 Intel using Rosetta.
I believe that this change requires an action in cmake or at least the cmake PortGroup rather than in this port alone.
This is beyond my expertise, what I would expect from a good solution is to not to block universal builds.
comment:12 follow-up: 13 Changed 8 years ago by filippo.delillo@…
Same problem,
the solutions proposed are only for PPC, right?
Replying to dyne2meter@…:
Log reports
:info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h: In member function ‘std::vector<T, std::allocator<_CharT> > orgQhull::QhullSet<T>::toStdVector() const’: :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:330: error: expected `;' before ‘i’ :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:331: error: expected `;' before ‘e’ :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:333: error: ‘i’ was not declared in this scope :info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_math_qhull/qhull/work/qhull-2015.2/src/libqhullcpp/QhullSet.h:333: error: ‘e’ was not declared in this scope
comment:13 follow-up: 14 Changed 8 years ago by udbraumann
Replying to filippo.delillo@…:
Same problem,
the solutions proposed are only for PPC, right?
Concerning the workaround proposed in comment:7 and comment:9 I would expect these also work on Intel platforms.
comment:14 follow-up: 15 Changed 8 years ago by dyne2meter
Replying to braumann@…:
Replying to filippo.delillo@…:
Same problem,
the solutions proposed are only for PPC, right?
Concerning the workaround proposed in comment:7 and comment:9 I would expect these also work on Intel platforms.
No, this does not work on the Intel platform, 10.6.8, with gcc5. Should I abandon gcc5 and go to gcc6? This is delaying upgrades of py##-matplotlib and octave. I have a Mavericks installation where the update of qhull proceeds normally.
comment:15 follow-up: 16 Changed 8 years ago by udbraumann
Replying to dyne2meter@…:
No, this does not work on the Intel platform, 10.6.8, with gcc5. Should I abandon gcc5 and go to gcc6? This is delaying upgrades of py##-matplotlib and octave. I have a Mavericks installation where the update of qhull proceeds normally.
Oh, I expected you to work on 10.5.8 Intel. However, if I remember right, on my 10.6.8 64 bit Intel machine qhull could be built without a Portfile change just by specifying sudo port -s upgrade qhull configure.compiler=macports-gcc-5
in the command line. To be honest, I was a bit surprised that no complaint came up concerning the -arch
switch on that machine. Anyway, I do not think that gcc6
would solve your issue. What is the error being issued on your 10.6.8 machine?
comment:16 Changed 8 years ago by dyne2meter
Replying to braumann@…:
Replying to dyne2meter@…:
No, this does not work on the Intel platform, 10.6.8, with gcc5. Should I abandon gcc5 and go to gcc6? This is delaying upgrades of py##-matplotlib and octave. I have a Mavericks installation where the update of qhull proceeds normally.
Oh, I expected you to work on 10.5.8 Intel. However, if I remember right, on my 10.6.8 64 bit Intel machine qhull could be built without a Portfile change just by specifying
sudo port -s upgrade qhull configure.compiler=macports-gcc-5
in the command line. To be honest, I was a bit surprised that no complaint came up concerning the-arch
switch on that machine. Anyway, I do not think thatgcc6
would solve your issue. What is the error being issued on your 10.6.8 machine?
The errors are the same as those in my initial report.
comment:17 Changed 8 years ago by dliessi (Davide Liessi)
comment:18 Changed 8 years ago by mamoll (Mark Moll)
Resolution: | → fixed |
---|---|
Status: | new → closed |
A proper fix was committed in r149962.
In the future, please use WikiFormatting, fill in the Port field and Cc the port maintainers (
port info --maintainers qhull
), if any.