lundi 22 février 2021

Meson build of harfbuzz in pango complains that c++11 is not enabled, but it is in meson.build for harfbuzz

I've gone down a rabbit hole trying to build the latest verison of librsvg. My local Fedora 33 system has librsvg2-2.50.3-1 and produces good images, but the production server Centos 7.9 has 2.40.20-1 and doesn't fill curved paths using a bitmap pattern properly. Anyway, I'm trying to build newer versions of these packages on a Centos 7.9 production server, first working on a freshly installed Centos 7.9 on a local VM to get the basics working. Environment:

  • gcc 4.8.5-44
  • meson 0.57.1
  • ninja 1.10.0
  • Installed yum group "Development Tools" and set up EPEL repo for cargo & rust.

I've got to the point that I need a newer version of pango, so have grabbed pango-1.48.2 src from https://download.gnome.org/sources/pango/1.48/ and am attempting to build it. I've not used meson or ninja before but I have rusty old Unix build skills from 10 years ago that I'm trying to apply to these new tools.

It seems pango will autodetect missing libraries, or where the installed version is not high enough, and will download and build them. One of these is harfbuzz, and this is failing:

# /usr/local/bin/meson setup builddir
# /usr/local/bin/meson configure builddir/ -Dprefix=/usr/local
# ninja -C builddir/
../subprojects/harfbuzz/src/hb.hh:450:1: warning: identifier 'static_assert' is a keyword in C++11 [-Wc++0x-compat]

And later:

./subprojects/harfbuss/src/hb.hh:450:15: error: expected constructor, destructor, or type conversion before '(' token
 static_assert ((sizeof (int8_t) == 1), "");

It looks like I need to specify c++11 as the language, however in subprojects/harfbuzz/meson.build it looks like it's enabled:

  default_options: [
  ... skip ...
  'cpp_std=c++11'

(see https://github.com/harfbuzz/harfbuzz/blob/master/meson.build)

I've put some more complete output in gists (too long for stackoverflow, it rejects my post), first from the meson setup in which it detects my harfbuzz library is not at sufficient version, so it downloads (I think it's github master from the look of subprojects/harfbuzz.wrap):

https://gist.github.com/neekfenwick/836682eaff7f9e3dbbe62664a8e44ef6

And the output from the build step.. the c++11 stuff starts pretty early on, e.g. warning: identifier ‘static_assert’ is a keyword in C++11:

https://gist.github.com/neekfenwick/4581c5f83d4319bf1f011da0012a7dfd

I thought I could cd subprojects/harfbuzz and retry the build command to test building that one part of the overall pango build, but there is no Makefile or configure script, as if autogen.sh was not run. However, if I charge in there and run a build as best I know, it works:

$ cd subprojects/harfbuzz
$ ./autogen.sh
$ ./configure --prefix=/usr/local
$ make

Succeeds. Something about how ninja is building it using the pango configuration is broken.

That configure command for harfbuzz does output these interesting lines:

checking whether g++ supports C++11 features by default... no
checking whether g++ supports C++11 features with -std=gnu++11... yes

However, simply running make succeeds, so harfbuzz seems to have the required c++11 flags turned on in a local build, why would it fail when built from the enclosing pango build process?

Where should I be poking around next to move this forward?

Aucun commentaire:

Enregistrer un commentaire