homebrew-core icon indicating copy to clipboard operation
homebrew-core copied to clipboard

icu4c 75.1

Open cho-m opened this issue 2 years ago • 6 comments

Created with brew bump-formula-pr.


Major changes

This release introduces C++17 minimum which impacts various dependents.

Versioning attempt

As reference:

  • Previous bump - #153108
  • CI runtime: https://github.com/Homebrew/homebrew-core/actions/runs/8007761525/usage (2d 6h Intel macOS, 1d 17hr Linux)

May try versioning approach and test largest dep group to see if it improves anything.

EDIT: The largest connected deps group means at least 42 formulae need to be migrated on macOS (more if including Linux due to libxml2 and other common dependencies).

cho-m avatar Apr 16 '24 22:04 cho-m

This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. To keep this pull request open, add a help wanted or in progress label.

github-actions[bot] avatar Apr 20 '24 14:04 github-actions[bot]

harfbuzz not happy:

  In file included from ../src/hb-icu.cc:39:
  In file included from /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/unorm2.h:35:
  In file included from /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uset.h:36:
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/localpointer.h:561:26: error: 'auto' not allowed in template parameter until C++17
  template <typename Type, auto closeFunction>
                           ^~~~
  In file included from ../src/hb-icu.cc:39:
  In file included from /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/unorm2.h:35:
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uset.h:358:53: error: value of type 'void (USet *)' is not implicitly convertible to 'int'
  U_DEFINE_LOCAL_OPEN_POINTER(LocalUSetPointer, USet, uset_close);
                                                      ^~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/urename.h:1753:20: note: expanded from macro 'uset_close'
  #define uset_close U_ICU_ENTRY_POINT_RENAME(uset_close)
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uvernum.h:123:47: note: expanded from macro 'U_ICU_ENTRY_POINT_RENAME'
  #       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uvernum.h:122:51: note: expanded from macro 'U_DEF2_ICU_ENTRY_POINT_RENAME'
  #       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uvernum.h:121:50: note: expanded from macro 'U_DEF_ICU_ENTRY_POINT_RENAME'
  #       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
                                                   ^~~~~~
  <scratch space>:71:1: note: expanded from here
  uset_close_75
  ^~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/localpointer.h:551:68: note: expanded from macro 'U_DEFINE_LOCAL_OPEN_POINTER'
      using LocalPointerClassName = internal::LocalOpenPointer<Type, closeFunction>
                                                                     ^~~~~~~~~~~~~
  In file included from ../src/hb-icu.cc:39:
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/unorm2.h:286:69: error: value of type 'void (UNormalizer2 *)' is not implicitly convertible to 'int'
  U_DEFINE_LOCAL_OPEN_POINTER(LocalUNormalizer2Pointer, UNormalizer2, unorm2_close);
                                                                      ^~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/urename.h:1257:22: note: expanded from macro 'unorm2_close'
  #define unorm2_close U_ICU_ENTRY_POINT_RENAME(unorm2_close)
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uvernum.h:123:47: note: expanded from macro 'U_ICU_ENTRY_POINT_RENAME'
  #       define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)
                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uvernum.h:122:51: note: expanded from macro 'U_DEF2_ICU_ENTRY_POINT_RENAME'
  #       define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y)
                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/uvernum.h:121:50: note: expanded from macro 'U_DEF_ICU_ENTRY_POINT_RENAME'
  #       define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y
                                                   ^~~~~~
  <scratch space>:141:1: note: expanded from here
  unorm2_close_75
  ^~~~~~~~~~~~~~~
  /opt/homebrew/Cellar/icu4c@75/75.1/include/unicode/localpointer.h:551:68: note: expanded from macro 'U_DEFINE_LOCAL_OPEN_POINTER'
      using LocalPointerClassName = internal::LocalOpenPointer<Type, closeFunction>
                                                                     ^~~~~~~~~~~~~
  3 errors generated.

See https://github.com/harfbuzz/harfbuzz/issues/4671 and https://cgit.freebsd.org/ports/commit/?id=4816cd49210c3c1413219b8884a17655cf4be340

fxcoudert avatar Apr 26 '24 10:04 fxcoudert

Sounds like the ICU's minimum C++ standard is now C++17. Can try to force it, but may cause problems with dependents.

cho-m avatar Apr 26 '24 12:04 cho-m

Okay, let's give this another run with the conflicts fixed.

SMillerDev avatar Jun 09 '24 17:06 SMillerDev

Will start working on this again soon. Need to get dotnet@6 (#180575) and qt (#180185) fixes in.

cho-m avatar Aug 22 '24 13:08 cho-m

Blocked by yaz checksum change - https://github.com/Homebrew/homebrew-core/pull/182130

cho-m avatar Aug 23 '24 14:08 cho-m

Will try to finish https://github.com/Homebrew/brew/pull/18229 before continuing this.

cho-m avatar Oct 03 '24 15:10 cho-m

Going to actually fix main keg-only failure due to libpsl with #192894.

cho-m avatar Oct 05 '24 15:10 cho-m

This might be the wrong PR/commit to comment on but Homebrew's recent renaming of "icu4c" to "icu4c@75" breaks libraries like github.com/mattn/go-sqlite3 (repro with: go build -tags sqlite_icu) that rely on the previous icu4c library location /usr/local/opt/icu4c or /opt/homebrew/opt/icu4c.

Are there any plans to reintroduce an icu4c formula that has the name "icu4c" (the same as it used to be) or are there suggestions for how non-brew managed libs/programs that depend on icu4c should handle this change?

Another issue here is that the pkg-config for icu4c is in a non-standard location which makes switching to pkg-config a big difficult (since uses would need to update the PKG_CONFIG_PATH env var for it to work).

Also, thank you for all of your work on Homebrew!

charlievieth avatar Oct 30 '24 23:10 charlievieth

This might be the wrong PR/commit to comment on but Homebrew's recent renaming of "icu4c" to "icu4c@75" breaks libraries like github.com/mattn/go-sqlite3 (repro with: go build -tags sqlite_icu) that rely on the previous icu4c library location /usr/local/opt/icu4c or /opt/homebrew/opt/icu4c.

It should be available, but may not have gotten auto-upgraded since there wasn't a revision bump.

A workaround for now is brew reinstall icu4c.

Given ICU 76 is almost ready, can add a revision bump when migrating icu4c alias to icu4c@76.

cho-m avatar Oct 30 '24 23:10 cho-m

Thank you for the very quick response and brew reinstall icu4 works!

charlievieth avatar Oct 30 '24 23:10 charlievieth