Message ID | 20230223153236.914358-1-fontaine.fabrice@gmail.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [1/1] package/cairo: fix pthread detection | expand |
Le jeu. 23 févr. 2023 à 16:32, Fabrice Fontaine <fontaine.fabrice@gmail.com> a écrit : > pthreads detection fails if a warning is emitted resulting in the > following build failure with some toolchains: > > onfigure:34189: checking for cairo's pthread feature > configure:34300: > /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc > -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT > -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 > conftest.c -lrt -latomic -lexecinfo -lm -lpthread >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > warning: > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: > missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > NOTE: This behaviour is deprecated and will be removed in a future version > of the linker > configure:34300: $? = 0 > configure:34419: > /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc > -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -pthread > -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 > conftest.c -lrt -latomic -lexecinfo -lm >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > warning: > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: > missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > NOTE: This behaviour is deprecated and will be removed in a future version > of the linker > configure:34419: $? = 0 > configure:34500: > /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc > -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT > -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 > conftest.c -lrt -latomic -lexecinfo -lm >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > warning: > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: > missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > NOTE: This behaviour is deprecated and will be removed in a future version > of the linker > configure:34500: $? = 0 > configure:34555: checking whether cairo's pthread feature could be enabled > configure:34557: result: no (can't link with -lpthread or -pthread) > It should be noted that shellinabox has the same kind of issue, a warning is preventing the correct detection of ptsname_r: http://autobuild.buildroot.org/results/287/2872b26253ecb5a1550268fcbcefe8fd974ff70d//shellinabox-2.20/config.log So there is something fishy with those recent autobuilder failures. > > [...] > > In file included from cairo-mutex-type-private.h:45, > from cairo-scaled-font-private.h:45, > from cairoint.h:434, > from cairo-analysis-surface.c:37: > cairo-mutex-impl-private.h:262:3: error: #error "XXX: No mutex > implementation found. Cairo will not work with multiple threads. Define > CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile > cairo without thread-safety support." > 262 | # error "XXX: No mutex implementation found. Cairo will not work > with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and > accept this limitation and compile cairo without thread-safety support." > | ^~~~~ > > To avoid this build failure, add a patch that overrides this broken > mechanism > > Fixes: > - > http://autobuild.buildroot.org/results/5420beaf94855e47eeb08627e8e3c169dc00419a > > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> > --- > ...e.ac.pthread-respect-enable-pthreads.patch | 59 +++++++++++++++++++ > package/cairo/cairo.mk | 13 ++-- > 2 files changed, 68 insertions(+), 4 deletions(-) > create mode 100644 > package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch > > diff --git > a/package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch > b/package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch > new file mode 100644 > index 0000000000..c350c596cf > --- /dev/null > +++ > b/package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch > @@ -0,0 +1,59 @@ > +From 243fe7f3d51c23159e25f36adee7e953fee29f6c Mon Sep 17 00:00:00 2001 > +From: Fabrice Fontaine <fontaine.fabrice@gmail.com> > +Date: Thu, 23 Feb 2023 16:07:04 +0100 > +Subject: [PATCH] build/configure.ac.pthread: respect --enable-pthreads > + > +Respect --enable-pthreads as pthreads detection fails if a warning is > +emitted resulting in the following build failure with some toolchains: > + > +onfigure:34189: checking for cairo's pthread feature > +configure:34300: > /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc > -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT > -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 > conftest.c -lrt -latomic -lexecinfo -lm -lpthread >&5 > +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > warning: > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: > missing .note.GNU-stack section implies executable stack > +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > NOTE: This behaviour is deprecated and will be removed in a future version > of the linker > +configure:34300: $? = 0 > +configure:34419: > /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc > -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -pthread > -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 > conftest.c -lrt -latomic -lexecinfo -lm >&5 > +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > warning: > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: > missing .note.GNU-stack section implies executable stack > +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > NOTE: This behaviour is deprecated and will be removed in a future version > of the linker > +configure:34419: $? = 0 > +configure:34500: > /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc > -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE > -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT > -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 > conftest.c -lrt -latomic -lexecinfo -lm >&5 > +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > warning: > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: > missing .note.GNU-stack section implies executable stack > +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: > NOTE: This behaviour is deprecated and will be removed in a future version > of the linker > +configure:34500: $? = 0 > +configure:34555: checking whether cairo's pthread feature could be enabled > +configure:34557: result: no (can't link with -lpthread or -pthread) > + > +[...] > + > +In file included from cairo-mutex-type-private.h:45, > + from cairo-scaled-font-private.h:45, > + from cairoint.h:434, > + from cairo-analysis-surface.c:37: > +cairo-mutex-impl-private.h:262:3: error: #error "XXX: No mutex > implementation found. Cairo will not work with multiple threads. Define > CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile > cairo without thread-safety support." > + 262 | # error "XXX: No mutex implementation found. Cairo will not work > with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and > accept this limitation and compile cairo without thread-safety support." > + | ^~~~~ > + > +Fixes: > + - > http://autobuild.buildroot.org/results/5420beaf94855e47eeb08627e8e3c169dc00419a > + > +Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> > +--- > + build/configure.ac.pthread | 3 ++- > + 1 file changed, 2 insertions(+), 1 deletion(-) > + > +diff --git a/build/configure.ac.pthread b/build/configure.ac.pthread > +index 29c930da9..084445587 100644 > +--- a/build/configure.ac.pthread > ++++ b/build/configure.ac.pthread > +@@ -244,7 +244,8 @@ AC_DEFUN([CAIRO_CONFIGURE_PTHREAD],[dnl > + > + dnl Make sure we scored some pthreads. > + if test "x$enable_pthread" = "xyes" -a "x$have_pthread" != "xyes"; > then > +- AC_MSG_ERROR([pthread requested but not found]) > ++ AC_MSG_WARN([pthread requested but not found]) > ++ have_pthread=yes > + fi > + > + dnl Set the output variables for CAIRO_ENABLE. > +-- > +2.39.1 > + > diff --git a/package/cairo/cairo.mk b/package/cairo/cairo.mk > index e8a704c7da..9034068403 100644 > --- a/package/cairo/cairo.mk > +++ b/package/cairo/cairo.mk > @@ -11,6 +11,8 @@ CAIRO_LICENSE_FILES = COPYING COPYING-LGPL-2.1 > COPYING-MPL-1.1 > CAIRO_CPE_ID_VENDOR = cairographics > CAIRO_SITE = http://cairographics.org/releases > CAIRO_INSTALL_STAGING = YES > +# We're patching build/configure.ac.pthread > +CAIRO_AUTORECONF = YES > > # > 0002-ft-Use-FT_Done_MM_Var-instead-of-free-when-available-in-cairo_ft_apply_variation.patch > CAIRO_IGNORE_CVES += CVE-2018-19876 > @@ -26,10 +28,6 @@ ifeq ($(BR2_m68k_cf),y) > CAIRO_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -mxgot" > endif > > -ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),) > -CAIRO_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -DCAIRO_NO_MUTEX=1" > -endif > - > # cairo can use C++11 atomics when available, so we need to link with > # libatomic for the architectures who need libatomic. > ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) > @@ -70,6 +68,13 @@ HOST_CAIRO_DEPENDENCIES = \ > host-pixman \ > host-pkgconf > > +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) > +CAIRO_CONF_OPTS += --enable-pthread > +else > +CAIRO_CONF_OPTS += --disable-pthread > +CAIRO_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -DCAIRO_NO_MUTEX=1" > +endif > + > # DirectFB svg support rely on Cairo and Cairo DirectFB support depends on > # DirectFB. Break circular dependency by disabling DirectFB support in > Cairo > # (which is experimental) > -- > 2.39.1 > > Best Regards, Fabrice
Hello, On Thu, 23 Feb 2023 16:32:36 +0100 Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote: > pthreads detection fails if a warning is emitted resulting in the > following build failure with some toolchains: > > onfigure:34189: checking for cairo's pthread feature > configure:34300: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm -lpthread >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker > configure:34300: $? = 0 So this returns success. > configure:34419: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -pthread -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker > configure:34419: $? = 0 This as well. > configure:34500: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker > configure:34500: $? = 0 This as well. > configure:34555: checking whether cairo's pthread feature could be enabled > configure:34557: result: no (can't link with -lpthread or -pthread) So why does it conclude that thread support is not available? > + dnl Make sure we scored some pthreads. > + if test "x$enable_pthread" = "xyes" -a "x$have_pthread" != "xyes"; then > +- AC_MSG_ERROR([pthread requested but not found]) > ++ AC_MSG_WARN([pthread requested but not found]) > ++ have_pthread=yes This looks odd because you're basically "ignoring" the detection/validation of thread support. Best regards, Thomas
On 24/02/2023 00:00, Thomas Petazzoni via buildroot wrote: > Hello, > > On Thu, 23 Feb 2023 16:32:36 +0100 > Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote: > >> pthreads detection fails if a warning is emitted resulting in the >> following build failure with some toolchains: >> >> onfigure:34189: checking for cairo's pthread feature >> configure:34300: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm -lpthread >&5 >> /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack >> /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker >> configure:34300: $? = 0 > > So this returns success. > >> configure:34419: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -pthread -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 >> /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack >> /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker >> configure:34419: $? = 0 > > This as well. > >> configure:34500: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 >> /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack >> /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker >> configure:34500: $? = 0 > > This as well. > >> configure:34555: checking whether cairo's pthread feature could be enabled >> configure:34557: result: no (can't link with -lpthread or -pthread) > > So why does it conclude that thread support is not available? Because the configure script is stupid. Extract from the script: > ac_fn_c_try_compile () > { > [...] > (eval "$ac_compile") 2>conftest.err > ac_status=$? > if test -s conftest.err; then > grep -v '^ *+' conftest.err >conftest.er1 > cat conftest.er1 >&5 > mv -f conftest.er1 conftest.err > fi > $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 > test $ac_status = 0; } && { > test -z "$ac_c_werror_flag" || > test ! -s conftest.err ^^^^^^^^^^^^^^^^^^^^^^ This test will fail (conftest.err is not empty). > } && test -s conftest.$ac_objext; then : > ac_retval=0 > else > $as_echo "$as_me: failed program was:" >&5 > [...] > } # ac_fn_c_try_compile > > >> + dnl Make sure we scored some pthreads. >> + if test "x$enable_pthread" = "xyes" -a "x$have_pthread" != "xyes"; then >> +- AC_MSG_ERROR([pthread requested but not found]) >> ++ AC_MSG_WARN([pthread requested but not found]) >> ++ have_pthread=yes > > This looks odd because you're basically "ignoring" the > detection/validation of thread support. Yeah, the alternative is to patch host-autoconf to not do that stupid check of conftest.err. Which is perhaps a better idea, because it solves things globally. But who knows, maybe some checks actually rely on this? Or alternative, do something with binutils 2.39 (which is the one that introduced the warning) to suppress the warning. It probably won't fix external toolchains then though. Note that cairo upstream has moved to meson four years ago, we just haven't updated cairo in a long time. Regards, Arnout > > Best regards, > > Thomas
On Thu, 23 Feb 2023 16:32:36 +0100 Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote: > pthreads detection fails if a warning is emitted resulting in the > following build failure with some toolchains: > > onfigure:34189: checking for cairo's pthread feature > configure:34300: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm -lpthread >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker > configure:34300: $? = 0 > configure:34419: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -pthread -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker > configure:34419: $? = 0 > configure:34500: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack > /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker > configure:34500: $? = 0 > configure:34555: checking whether cairo's pthread feature could be enabled > configure:34557: result: no (can't link with -lpthread or -pthread) > > [...] > > In file included from cairo-mutex-type-private.h:45, > from cairo-scaled-font-private.h:45, > from cairoint.h:434, > from cairo-analysis-surface.c:37: > cairo-mutex-impl-private.h:262:3: error: #error "XXX: No mutex implementation found. Cairo will not work with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile cairo without thread-safety support." > 262 | # error "XXX: No mutex implementation found. Cairo will not work with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile cairo without thread-safety support." > | ^~~~~ > > To avoid this build failure, add a patch that overrides this broken > mechanism > > Fixes: > - http://autobuild.buildroot.org/results/5420beaf94855e47eeb08627e8e3c169dc00419a > > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> > --- > ...e.ac.pthread-respect-enable-pthreads.patch | 59 +++++++++++++++++++ > package/cairo/cairo.mk | 13 ++-- > 2 files changed, 68 insertions(+), 4 deletions(-) > create mode 100644 package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch This has been fixed directly in gcc by: https://gitlab.com/buildroot.org/buildroot/-/commit/ab4f3fafaa839593b3efd9ea12c8ee5d9340cdeb Best regards, Thomas
diff --git a/package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch b/package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch new file mode 100644 index 0000000000..c350c596cf --- /dev/null +++ b/package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch @@ -0,0 +1,59 @@ +From 243fe7f3d51c23159e25f36adee7e953fee29f6c Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine <fontaine.fabrice@gmail.com> +Date: Thu, 23 Feb 2023 16:07:04 +0100 +Subject: [PATCH] build/configure.ac.pthread: respect --enable-pthreads + +Respect --enable-pthreads as pthreads detection fails if a warning is +emitted resulting in the following build failure with some toolchains: + +onfigure:34189: checking for cairo's pthread feature +configure:34300: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm -lpthread >&5 +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker +configure:34300: $? = 0 +configure:34419: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -pthread -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker +configure:34419: $? = 0 +configure:34500: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack +/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker +configure:34500: $? = 0 +configure:34555: checking whether cairo's pthread feature could be enabled +configure:34557: result: no (can't link with -lpthread or -pthread) + +[...] + +In file included from cairo-mutex-type-private.h:45, + from cairo-scaled-font-private.h:45, + from cairoint.h:434, + from cairo-analysis-surface.c:37: +cairo-mutex-impl-private.h:262:3: error: #error "XXX: No mutex implementation found. Cairo will not work with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile cairo without thread-safety support." + 262 | # error "XXX: No mutex implementation found. Cairo will not work with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile cairo without thread-safety support." + | ^~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/5420beaf94855e47eeb08627e8e3c169dc00419a + +Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> +--- + build/configure.ac.pthread | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/build/configure.ac.pthread b/build/configure.ac.pthread +index 29c930da9..084445587 100644 +--- a/build/configure.ac.pthread ++++ b/build/configure.ac.pthread +@@ -244,7 +244,8 @@ AC_DEFUN([CAIRO_CONFIGURE_PTHREAD],[dnl + + dnl Make sure we scored some pthreads. + if test "x$enable_pthread" = "xyes" -a "x$have_pthread" != "xyes"; then +- AC_MSG_ERROR([pthread requested but not found]) ++ AC_MSG_WARN([pthread requested but not found]) ++ have_pthread=yes + fi + + dnl Set the output variables for CAIRO_ENABLE. +-- +2.39.1 + diff --git a/package/cairo/cairo.mk b/package/cairo/cairo.mk index e8a704c7da..9034068403 100644 --- a/package/cairo/cairo.mk +++ b/package/cairo/cairo.mk @@ -11,6 +11,8 @@ CAIRO_LICENSE_FILES = COPYING COPYING-LGPL-2.1 COPYING-MPL-1.1 CAIRO_CPE_ID_VENDOR = cairographics CAIRO_SITE = http://cairographics.org/releases CAIRO_INSTALL_STAGING = YES +# We're patching build/configure.ac.pthread +CAIRO_AUTORECONF = YES # 0002-ft-Use-FT_Done_MM_Var-instead-of-free-when-available-in-cairo_ft_apply_variation.patch CAIRO_IGNORE_CVES += CVE-2018-19876 @@ -26,10 +28,6 @@ ifeq ($(BR2_m68k_cf),y) CAIRO_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -mxgot" endif -ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),) -CAIRO_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -DCAIRO_NO_MUTEX=1" -endif - # cairo can use C++11 atomics when available, so we need to link with # libatomic for the architectures who need libatomic. ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) @@ -70,6 +68,13 @@ HOST_CAIRO_DEPENDENCIES = \ host-pixman \ host-pkgconf +ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) +CAIRO_CONF_OPTS += --enable-pthread +else +CAIRO_CONF_OPTS += --disable-pthread +CAIRO_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -DCAIRO_NO_MUTEX=1" +endif + # DirectFB svg support rely on Cairo and Cairo DirectFB support depends on # DirectFB. Break circular dependency by disabling DirectFB support in Cairo # (which is experimental)
pthreads detection fails if a warning is emitted resulting in the following build failure with some toolchains: onfigure:34189: checking for cairo's pthread feature configure:34300: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm -lpthread >&5 /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker configure:34300: $? = 0 configure:34419: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -pthread -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker configure:34419: $? = 0 configure:34500: /home/buildroot/autobuild/instance-1/output-1/host/bin/xtensa-buildroot-linux-uclibc-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -O0 -g2 -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -lrt -latomic -lexecinfo -lm >&5 /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: warning: /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/crtend.o: missing .note.GNU-stack section implies executable stack /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/11.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker configure:34500: $? = 0 configure:34555: checking whether cairo's pthread feature could be enabled configure:34557: result: no (can't link with -lpthread or -pthread) [...] In file included from cairo-mutex-type-private.h:45, from cairo-scaled-font-private.h:45, from cairoint.h:434, from cairo-analysis-surface.c:37: cairo-mutex-impl-private.h:262:3: error: #error "XXX: No mutex implementation found. Cairo will not work with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile cairo without thread-safety support." 262 | # error "XXX: No mutex implementation found. Cairo will not work with multiple threads. Define CAIRO_NO_MUTEX to 1 to acknowledge and accept this limitation and compile cairo without thread-safety support." | ^~~~~ To avoid this build failure, add a patch that overrides this broken mechanism Fixes: - http://autobuild.buildroot.org/results/5420beaf94855e47eeb08627e8e3c169dc00419a Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> --- ...e.ac.pthread-respect-enable-pthreads.patch | 59 +++++++++++++++++++ package/cairo/cairo.mk | 13 ++-- 2 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 package/cairo/0005-build-configure.ac.pthread-respect-enable-pthreads.patch