Opened 3 years ago

Last modified 3 years ago

#62548 closed defect

icu +universal does not work on Big Sur x86_64 — at Version 2

Reported by: CharlesJS Owned by:
Priority: Normal Milestone:
Component: ports Version:
Keywords: Cc:
Port: icu

Description (last modified by jmroot (Joshua Root))

Many ports depend on the icu port. Unfortunately, its universal build does not work.

When trying to build a dependent port:

$ sudo port install gnutls +universal  
Warning: The macOS 11.2 SDK does not appear to be installed. Ports may not build correctly.
Warning: You can install it as part of the Xcode Command Line Tools package by running `xcode-select --install'.
--->  Computing dependencies for gnutls
Error: Cannot install libxslt for the archs 'arm64 x86_64' because
Error: its dependency icu cannot build for the required archs.
Error: Follow https://guide.macports.org/#project.tickets to report a bug.
Error: Processing of port gnutls failed

But:

$ port variants icu
icu has the variants:
   universal: Build for multiple architectures

And yet:

$ sudo port install icu +universal
--->  Fetching archive for icu
--->  Attempting to fetch icu-67.1_3.darwin_20.x86_64.tbz2 from https://pek.cn.packages.macports.org/macports/packages/icu
--->  Attempting to fetch icu-67.1_3.darwin_20.x86_64.tbz2.rmd160 from https://pek.cn.packages.macports.org/macports/packages/icu
--->  Installing icu @67.1_3
--->  Activating icu @67.1_3
--->  Cleaning icu
--->  Updating database of binaries
--->  Scanning binaries for linking errors
--->  No broken files found.
--->  No broken ports found.

$ file /opt/local/lib/libicudata.dylib
/opt/local/lib/libicudata.dylib: Mach-O 64-bit dynamically linked shared library x86_64

Change History (2)

comment:1 Changed 3 years ago by kencu (Ken)

I won't go into any great detail in this ticket about this issue, but you can try this one, if you feel so inclined:

<https://github.com/kencu/myports/tree/master/devel/icu>

I upgraded it to 68.2 but you can downgrade it back to 67.1 if you prefer.

% port -v installed icu
The following ports are currently installed:
  icu @68.2_0+universal (active) platform='darwin 20' archs='arm64 x86_64' date='2021-03-24T15:49:28-0700'
% file /opt/local/lib/libicudata.dylib
/opt/local/lib/libicudata.dylib: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64]
/opt/local/lib/libicudata.dylib (for architecture x86_64):	Mach-O 64-bit dynamically linked shared library x86_64
/opt/local/lib/libicudata.dylib (for architecture arm64):	Mach-O 64-bit dynamically linked shared library arm64
Last edited 3 years ago by kencu (Ken) (previous) (diff)

comment:2 Changed 3 years ago by jmroot (Joshua Root)

Description: modified (diff)
Port: icu added
Summary: Universal variant for icu, which many ports depend on, doesn't workicu +universal does not work on Big Sur x86_64

The technical details are that icu apparently needs to run executables that are built during the build process, and also can't be built with multiple -arch flags at once, but needs to build each arch separately and lipo them together. This means that it can be built +universal on Big Sur on arm64 hardware but not on x86_64.

Note: See TracTickets for help on using tickets.