Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix build with ICU 76 #936

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Fix build with ICU 76 #936

wants to merge 1 commit into from

Conversation

cho-m
Copy link

@cho-m cho-m commented Oct 31, 2024

Due to unicode-org/icu@199bc82, ICU 76 no longer adds icu-uc by default. This causes linker errors for undefined symbols like icu_76::UnicodeString::doReplace(...), referenced from: zim::removeAccents(...) in tools.cpp.o.

Meson will automatically flatten the dependencies list as documented at https://mesonbuild.com/Reference-manual_functions.html#build_target


There didn't seem to be any usage of icu_dep methods and only passing it to dependencies: [..., icu_dep, ...]. If this changes, then may need to use multiple variables.

@kelson42 kelson42 added this to the 9.3.0 milestone Oct 31, 2024
@cho-m
Copy link
Author

cho-m commented Oct 31, 2024

Linux CI has an unrelated failure trying to find software-properties-common which isn't available in Debian Trixie.


Windows CI has a related failure as it looks like icu-i18n.pc is manually created.

Maybe a workaround like:

dependency('icu-uc', required: host_machine.system() != 'windows', static:static_linkage)

or

icu_dep = [dependency('icu-i18n', required:xapian_dep.found(), static:static_linkage)]
if build_machine.system() != 'windows'
    icu_dep += [dependency('icu-uc', required:xapian_dep.found(), static:static_linkage)]
endif

@kelson42
Copy link
Contributor

@cho-m Thank you for your PR. CI was OK a month ago, I will have a look and try to fix them so we can test your PR properly.

Due to unicode-org/icu@199bc82, ICU 76 no longer adds `icu-uc` by
default. This causes linker errors for undefined symbols like
`icu_76::UnicodeString::doReplace(...)`, referenced from:
`zim::removeAccents(...)` in tools.cpp.o.

Meson will automatically flatten the dependencies list as documented
at https://mesonbuild.com/Reference-manual_functions.html#build_target
@kelson42
Copy link
Contributor

@cho-m I have fixed a few things but we have a serious problem with the Windows CI. The CI for Windows does not pass for the moment on main either... although it does not block at the line you have added. My that be that your code is not compatible with older version of libicu? https://github.com/kiwix/kiwix-build/blob/main/kiwixbuild/dependencies/icu4c.py

@cho-m
Copy link
Author

cho-m commented Dec 20, 2024

code is not compatible with older version of libicu? https://github.com/kiwix/kiwix-build/blob/main/kiwixbuild/dependencies/icu4c.py

The official (Unix) pkgconfig files are compatible (icu-uc.pc has been around as long as icu-i18n.pc, i.e. ICU 59 - unicode-org/icu@d390758)

However, Windows build is using custom/3rd-party pkgconfig files. Ideally would have provided other pkgconfig files like Cygwin (https://cygwin.com/packages/x86_64/libicu-devel/libicu-devel-73.2-1)

    2023-08-03 01:02        1232 usr/lib/pkgconfig/icu-i18n.pc
    2023-08-03 01:02        1224 usr/lib/pkgconfig/icu-io.pc
    2023-08-03 01:02        1256 usr/lib/pkgconfig/icu-uc.pc

Anyways, PR most likely needs a build_machine.system() != 'windows' conditional to work around Windows.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants