Bug 258576

Summary: www/chromium: build fails with harfbuzz 3.0.0
Product: Ports & Packages Reporter: Stefan Ehmann <shoesoft>
Component: Individual Port(s)Assignee: freebsd-chromium (Nobody) <chromium>
Status: Closed FIXED    
Severity: Affects Only Me CC: dch, grahamperrin, jbeich, junchoon, leres, pete, tagattie
Priority: --- Flags: bugzilla: maintainer-feedback? (chromium)
Version: Latest   
Hardware: Any   
OS: Any   

Description Stefan Ehmann 2021-09-18 15:40:33 UTC
Today, I got this error when starting chromium:

$ chrome
ld-elf.so.1: /usr/local/share/chromium/chrome: Undefined symbol "hb_subset_input_set_retain_gids"

Haven't tried downgrading yet, but very likely related to the update of print/harfbuzz from 2.9.1 to 3.0.0.

Rebuilding chromium fails with this error:

FAILED: obj/skia/skia/SkPDFSubsetFont.o 
c++ -MMD -MF obj/skia/skia/SkPDFSubsetFont.o.d -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -DUSE_X11=1 -DOFFICIAL_BUILD -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D_GNU_SOURCE -DCR_CLANG_REVISION=\"llvmorg-13-init-10392-gd3676d4b-2\" -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DSK_UNTIL_CRBUG_1187654_IS_FIXED -DSK_CODEC_DECODES_PNG -DSK_CODEC_DE
CODES_WEBP -DSK_ENCODE_PNG -DSK_ENCODE_WEBP -DSK_USER_CONFIG_HEADER=\"../../skia/config/SkUserConfig.h\" -DSK_GL -DSK_CODEC_DECODES_JPEG -DSK_ENCODE_JPEG -DSK_HAS_WUFFS_LIBRARY -DSK_VULKAN_HEADER=\"../../skia/config/SkVulkanConfig.h\" -DSK_VULKAN=1 -DSK_SUPPORT_GPU=1 -DSK_GPU_WORKAROUNDS_HEADER=\"gpu/config/gpu_driver_bug_workaround_autogen.h\" -DVK_USE_PLATFORM_XCB_KHR -DSKIA_IMPLEMENTATION=1 -DSK_GAMMA_EXPON
ENT=1.2 -DSK_GAMMA_CONTRAST=0.2 -DSK_DEFAULT_FONT_CACHE_LIMIT=20971520 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40 -DUSE_SYSTEM_LIBJPEG -DU_USING_ICU_NAMESPACE=0 -DU_ENABLE_DYLOAD=0 -DUSE_CHROMIUM_ICU=1 -DU_ENABLE_TRACING=1 -DU_ENABLE_RESOURCE_TRACING=0 -DU_STATIC_IMPLEMENTATION -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE -I../.. -Igen -I../../third_party/skia -I../..
/third_party/wuffs/src/release/c -I../../third_party/vulkan/include -I../../third_party/vulkan-deps/vulkan-headers/src/include -I../../third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -Igen/shim_headers/libpng_shim -Igen/shim_headers/libwebp_shim -I../../third_party/abseil-cpp -I../../third_party/boringssl/src/include -I../../third_party/protobuf/src -Igen/protoc_
out -I../../third_party/icu/source/common -I../../third_party/icu/source/i18n -I../../third_party/zlib -fno-delete-null-pointer-checks -fno-ident -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pthread -fcolor-diagnostics -fmerge-all-constants -m64 -march=x86-64 -msse3 -Xclang -fdebug-compilation-dir -Xclang . -no-canonical-prefixes -fn
o-omit-frame-pointer -g0 -fvisibility=hidden -Wall -Wno-unused-variable -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-unneeded-internal-declaration -Wno-undefined-var-template -Wno-ignored-pragma-optimize -Wno-implicit-int-float-conversion -Wno-final-dtor-non-final-class -Wno-builtin-assume-aligned-alignment -Wno-deprecated-copy -Wno-thread-safety-analysis -Wno-thread-safety-a
ttributes -O2 -fdata-sections -ffunction-sections -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -DPROTOBUF_ALLOW_DEPRECATED=1 -I/usr/local/include/libpng16 -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/harfbuzz -I/usr/local/include/freetype2 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -std=c++14 -fno-trig
raphs -Wno-trigraphs -fno-exceptions -fno-rtti -fvisibility-inlines-hidden -std=c++17 -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing  -isystem /usr/local/include  -c ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp -o obj/skia/skia/SkPDFSubsetFont.o
../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:74:5: error: use of undeclared identifier 'hb_subset_input_set_retain_gids'; did you mean 'hb_subset_input_set_flags'?
    hb_subset_input_set_retain_gids(input.get(), true);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    hb_subset_input_set_flags
/usr/local/include/harfbuzz/hb-subset.h:142:1: note: 'hb_subset_input_set_flags' declared here
hb_subset_input_set_flags (hb_subset_input_t *input,
^
../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:77:5: error: use of undeclared identifier 'hb_subset_input_set_drop_hints'
    hb_subset_input_set_drop_hints(input.get(), false);
    ^
../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:78:19: error: use of undeclared identifier 'hb_subset'; did you mean 'hb_set_set'?
    HBFace subset(hb_subset(face.get(), input.get()));
                  ^~~~~~~~~
                  hb_set_set
/usr/local/include/harfbuzz/hb-set.h:131:1: note: 'hb_set_set' declared here
hb_set_set (hb_set_t       *set,
^
../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:78:29: error: cannot initialize a parameter of type 'hb_set_t *' with an rvalue of type 'std::__1::unique_ptr<hb_face_t, SkFunctionWrapper<void (hb_face_t *), &hb_face_destroy>>::pointer' (aka 'hb_face_t *')
    HBFace subset(hb_subset(face.get(), input.get()));
                            ^~~~~~~~~~
/usr/local/include/harfbuzz/hb-set.h:131:29: note: passing argument to parameter 'set' here
hb_set_set (hb_set_t       *set,
                            ^
4 errors generated.
Comment 2 commit-hook freebsd_committer freebsd_triage 2021-09-18 21:32:18 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=17218fbbe7992e766373e403fc91b8a6eaa8468f

commit 17218fbbe7992e766373e403fc91b8a6eaa8468f
Author:     Jan Beich <jbeich@FreeBSD.org>
AuthorDate: 2021-09-18 17:23:51 +0000
Commit:     Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2021-09-18 21:31:34 +0000

    www/chromium: unbreak after dbc5f433f858

    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:74:5: error: use of undeclared identifier 'hb_subset_input_set_retain_gids'; did you mean 'hb_subset_input_set_flags'?
        hb_subset_input_set_retain_gids(input.get(), true);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        hb_subset_input_set_flags
    /usr/local/include/harfbuzz/hb-subset.h:142:1: note: 'hb_subset_input_set_flags' declared here
    hb_subset_input_set_flags (hb_subset_input_t *input,
    ^
    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:77:5: error: use of undeclared identifier 'hb_subset_input_set_drop_hints'
        hb_subset_input_set_drop_hints(input.get(), false);
        ^
    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:78:19: error: use of undeclared identifier 'hb_subset'; did you mean 'hb_set_set'?
        HBFace subset(hb_subset(face.get(), input.get()));
                      ^~~~~~~~~
                      hb_set_set
    /usr/local/include/harfbuzz/hb-set.h:131:1: note: 'hb_set_set' declared here
    hb_set_set (hb_set_t       *set,
    ^
    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:78:29: error: cannot initialize a parameter of type 'hb_set_t *' with an rvalue of type 'std::__1::unique_ptr<hb_face_t, SkFunctionWrapper<void (hb_face_t *), &hb_face_destroy>>::pointer' (aka 'hb_face_t *')
        HBFace subset(hb_subset(face.get(), input.get()));
                                ^~~~~~~~~~
    /usr/local/include/harfbuzz/hb-set.h:131:29: note: passing argument to parameter 'set' here
    hb_set_set (hb_set_t       *set,
                                ^

    PR:             258576
    Reported by:    pkg-fallout, Stefan Ehmann
    Obtained from:  Arch Linux

 www/chromium/Makefile                         |  2 +-
 www/chromium/files/patch-harfbuzz-3.0.0 (new) | 98 +++++++++++++++++++++++++++
 2 files changed, 99 insertions(+), 1 deletion(-)
Comment 3 commit-hook freebsd_committer freebsd_triage 2021-09-18 22:05:29 UTC
A commit in branch main references this bug:

URL: https://cgit.FreeBSD.org/ports/commit/?id=3e693f24a78f51cbb7daf258bd727961b3bec046

commit 3e693f24a78f51cbb7daf258bd727961b3bec046
Author:     Jan Beich <jbeich@FreeBSD.org>
AuthorDate: 2021-09-18 17:23:51 +0000
Commit:     Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2021-09-18 22:04:57 +0000

    devel/electron12: unbreak after dbc5f433f858

    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:74:5: error: use of undeclared identifier 'hb_subset_input_set_retain_gids'; did you mean 'hb_subset_input_set_flags'?
        hb_subset_input_set_retain_gids(input.get(), true);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        hb_subset_input_set_flags
    /usr/local/include/harfbuzz/hb-subset.h:142:1: note: 'hb_subset_input_set_flags' declared here
    hb_subset_input_set_flags (hb_subset_input_t *input,
    ^
    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:77:5: error: use of undeclared identifier 'hb_subset_input_set_drop_hints'
        hb_subset_input_set_drop_hints(input.get(), false);
        ^
    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:78:19: error: use of undeclared identifier 'hb_subset'; did you mean 'hb_set_set'?
        HBFace subset(hb_subset(face.get(), input.get()));
                      ^~~~~~~~~
                      hb_set_set
    /usr/local/include/harfbuzz/hb-set.h:131:1: note: 'hb_set_set' declared here
    hb_set_set (hb_set_t       *set,
    ^
    ../../third_party/skia/src/pdf/SkPDFSubsetFont.cpp:78:29: error: cannot initialize a parameter of type 'hb_set_t *' with an rvalue of type 'std::__1::unique_ptr<hb_face_t, SkFunctionWrapper<void (hb_face_t *), &hb_face_destroy>>::pointer' (aka 'hb_face_t *')
        HBFace subset(hb_subset(face.get(), input.get()));
                                ^~~~~~~~~~
    /usr/local/include/harfbuzz/hb-set.h:131:29: note: passing argument to parameter 'set' here
    hb_set_set (hb_set_t       *set,
                                ^

    PR:             258576
    Reported by:    pkg-fallout
    Obtained from:  Arch Linux

 devel/electron12/Makefile                         |  2 +-
 devel/electron12/files/patch-harfbuzz-3.0.0 (new) | 98 +++++++++++++++++++++++
 2 files changed, 99 insertions(+), 1 deletion(-)
Comment 4 Jan Beich freebsd_committer freebsd_triage 2021-09-19 00:13:13 UTC
http://beefy16.nyi.freebsd.org/build.html?mastername=130amd64-default&build=724df9e52627 didn't finish before Sunday 01:00 UTC, so "chromium" package from /latest maybe missing from Sunday till Wednesday. Given ABI is compatible outside of deprecated functions removal the following may help:

# mkdir -p /usr/local/etc/pkg/repos
# printf 'cache: {\n  url: "file:///var/cache/pkg",\n  enabled: yes\n}\n' >/usr/local/etc/pkg/repos/cache.conf
# pkg repo /var/cache/pkg

# pkg upgrade -qy -fr cache harfbuzz harfbuzz-icu
# pkg lock -qy chromium electron12 scribus-devel
# echo pkg unlock -qy chromium electron12 scribus-devel | at 20:00 Wednesday
Comment 5 Tomoaki AOKI 2021-09-19 06:13:01 UTC
Can you commit patches

 for www/chromium:
  Bug258271 (please choose v2 patch)

 for devel/electron12:
  Bug257378

please?

devel/electron12 needs equivalent change with Bug257352 for main and stable/13,
already committed as git 9e6695a71d64d995e6619497626c0a780397b7c9 [1] for www/chromium.

I just uploaded merged ([1] and Bug258271) patch to Bug257378.
(I myself cannot test due to dependency collision, but previous, equivalent to Bug257352, patch is reported to build fine.)


[1] https://cgit.FreeBSD.org/ports/commit/?id=9e6695a71d64d995e6619497626c0a780397b7c9
Comment 6 Jan Beich freebsd_committer freebsd_triage 2021-09-19 11:13:37 UTC
(In reply to Tomoaki AOKI from comment #5)
I'm neither familar (to review) nor use this port (to QA). It takes too much time[1] (at least 4 hours) to test on my hardware, blocking work on other ports. The work here is complete (waiting for confirmation), so it's too late to bundle other changes in order to test together.

[1] Chromium used to support https://en.wikipedia.org/wiki/Unity_build similar to Firefox but removed later, see https://groups.google.com/a/chromium.org/g/chromium-dev/c/DP9TQszzQLI/m/pZ7aC8GbDAAJ
    ccache wouldn't help with initial or infrequent builds (e.g., old cache is useless after a major update). It also requires fast storage and tons of space to accomodate multiple release/architectures and multiple ports. Each of those would probably want a separate CCACHE_DIR. I don't use ccache myself in order to reduce SSD wear and avoid ccache-specific issues.
Comment 8 Jan Beich freebsd_committer freebsd_triage 2021-09-23 21:08:29 UTC
Looks like the updates arrived to 11.4 and 13.0. For 12.2 the package builder is too slow: either the machine needs to be replaced or MAX_EXECUTION_TIME (86400 aka 24h by default) bumped from 122400 (34h) to 172800 (48h).

$ env ABI=FreeBSD:13:amd64 pkg rquery %n-%v chromium electron12
chromium-92.0.4515.159_2
electron12-12.0.9_2

$ env ABI=FreeBSD:12:amd64 pkg rquery %n-%v chromium electron12

$ env ABI=FreeBSD:11:amd64 pkg rquery %n-%v chromium electron12
chromium-92.0.4515.159_2