[MacPorts] #60070: Ports opportunistically use libmacho and libunwind; fail when architectures don't match (was: port install wine -universal fails because of bison build failure)

MacPorts noreply at macports.org
Tue Feb 11 01:49:12 UTC 2020


#60070: Ports opportunistically use libmacho and libunwind; fail when architectures
don't match
----------------------------------+--------------------
  Reporter:  TheLastLovemark      |      Owner:  (none)
      Type:  defect               |     Status:  new
  Priority:  Normal               |  Milestone:
 Component:  ports                |    Version:  2.6.2
Resolution:                       |   Keywords:
      Port:  libmacho, libunwind  |
----------------------------------+--------------------
Changes (by ryandesign):

 * cc: ryandesign (removed)
 * cc: jeremyhu (added)
 * port:  bison => libmacho, libunwind


Comment:

 The wine port is not like other ports. In other ports, building non-
 universal means building for the CPU's native architecture—e.g. on an
 x86_64 processor it would build for x86_64. In wine, on the other hand,
 building non-universal means building for i386, even on an x86_64
 processor. See comment:ticket:58025:3 for why it is this way and some
 solutions we might be able to use in the future.

 So when you are asking MacPorts to install wine non-universal on an x86_64
 system, the only thing you are accomplishing is that you are preventing
 yourself from being able to run 64-bit Windows software with it. MacPorts
 will still need to build wine's dependencies universal. That's why it's
 building bison universal. And that's failing, with this message from
 configure:

 {{{
 :info:configure checking whether the C compiler works... no
 :info:configure configure: error: in
 `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_bison/bison/work/bison-3.5.1':
 :info:configure configure: error: C compiler cannot create executables
 :info:configure See `config.log' for more details
 }}}

 And this message in config.log:

 {{{
 configure:5208: checking whether the C compiler works
 configure:5230: /usr/bin/clang -pipe -Os -arch x86_64 -arch i386
 -I/opt/local/include -L/opt/local/lib -Wl,-headerpad_max_install_names
 -arch x86_64 -arch i386 conftest.c  >&5
 ld: warning: The i386 architecture is deprecated for macOS (remove from
 the Xcode build setting: ARCHS)
 ld: in '/opt/local/lib/libunwind.dylib', file was built for x86_64 which
 is not the architecture being linked (i386):
 /opt/local/lib/libunwind.dylib for architecture i386
 }}}

 libunwind is part of the operating system. But apparently we also have a
 port for it. And you apparently have that port installed. So anything that
 uses libunwind is going to find the MacPorts copy instead. And it's going
 to need to have been built for the same architectures, which on your
 system it's not, just as on your system libmacho, another part of the
 operating system, had a corresponding port installed shadowing the system
 version. I do not know why we have there ports or why you have them
 installed. To solve this, either install the libunwind port with the
 universal variant, or better yet, uninstall it, along with the libmacho
 port mentioned previously.

 I'm going to un-Cc myself since I am very busy this month and this is not
 a problem with wine. In my opinion, the problem is that the libmacho and
 libunwind ports exist, because the only consequence of that seems to be
 that it enables users to shoot themselves in the foot by installing them.

-- 
Ticket URL: <https://trac.macports.org/ticket/60070#comment:4>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list