Subject: bug#51591: webkitgtk fails to build on i686-linux; possibly a clang issue

From: Mark H Weaver <[email-masked]>
Date: Fri, 05 Nov 2021 15:42:55 -0400

Hi Liliana,

Liliana Marie Prikler <[email-masked]> writes:

> Am Donnerstag, den 04.11.2021, 19:15 -0400 schrieb Mark H Weaver:
[...]
>> A more conservative approach would be to apply a patch to
>> trunk/Source/WTF/wtf/CheckedArithmetic.h analogous to the one in the
>> second link I cited above, namely this one:
>> 
>>   https://trac.webkit.org/changeset/272140/webkit
>> 
>> However, it would need to be changed slightly.  The patch above
>> arranges to avoid using __builtin_mul_overflow on 32-bit ARM
>> systems.  We would need to do the same for 32-bit x86 as well.  So,
>> where the patch above has this:
>> 
>> --8<---------------cut here---------------start------------->8---
>> /* On Linux with clang, libgcc is usually used instead of compiler-
>> rt, and it does    
>>  * not provide the __mulodi4 symbol used by clang for
>> __builtin_mul_overflow    
>>  */    
>> #if COMPILER(GCC) || (COMPILER(CLANG) && !(CPU(ARM) &&
>> OS(LINUX)))    
>> #define USE_MUL_OVERFLOW 1    
>> #endif    
>> --8<---------------cut here---------------end--------------->8---
>> 
>> We would need to change "CPU(ARM)" to "(CPU(ARM) || CPU(XXX))", where
>> XXX is the appropriate symbol for 32-bit x86.  Or maybe there's
>> another solution.
>> 
>> I won't be able to look at this in the next couple of days, so
>> hopefully someone else can pick this up.
> The #else case doesn't look so bad on this, so we could for the time
> being just do #if COMPILER(GCC) or even #if 0.

I just noticed that the aforementioned patch is already applied to
upstream WebKitGTK-2.34.1, so all we would need to do is change "1" to
"0" in the following line on i686-linux systems:

  #define USE_MUL_OVERFLOW 1

I pushed the following (untested) commit to 'gnuzilla-updates' that does
exactly this, and does so in such a way that rebuilds will not be needed
on other systems.  Hopefully I didn't make a mistake.

     Regards,
       Mark

>From 7aaedf5d77bb0e088601f15bbbed8f7835bde774 Mon Sep 17 00:00:00 2001
From: Mark H Weaver <[email-masked]>
Date: Fri, 5 Nov 2021 15:31:07 -0400
Subject: [PATCH] UNTESTED: gnu: webkitgtk: Fix build on i686-linux.

Fixes <https://bugs.gnu.org/51591>.

* gnu/packages/webkit.scm (webkitgtk)[arguments]: Use quasiquote for the
argument list.  When building on i686-linux, insert a 'substitute*' form in
the 'prepare-build-environment' phase that disables of the use of
'__builtin_mul_overflow'.
---
 gnu/packages/webkit.scm | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index e54b680855..a184cc9b32 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -241,7 +241,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
     (build-system cmake-build-system)
     (outputs '("out" "doc"))
     (arguments
-     '(#:tests? #f ; no tests
+     `(#:tests? #f ; no tests
        #:build-type "Release" ; turn off debugging symbols to save space
        #:configure-flags (list
                           "-DPORT=GTK"
@@ -299,6 +299,13 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CC" "clang")
              (setenv "CXX" "clang++")
+             ;; XXX Until we switch back to using GCC,
+             ;; work around <https://bugs.gnu.org/51591>.
+             ,@(if (string=? "i686-linux" (%current-system))
+                   '((substitute* "Source/WTF/wtf/CheckedArithmetic.h"
+                       (("#define USE_MUL_OVERFLOW 1")
+                        "#define USE_MUL_OVERFLOW 0")))
+                   '())
              #t))
          (add-after 'install 'move-doc-files
            (lambda* (#:key outputs #:allow-other-keys)
-- 
2.31.1

-- 
Disinformation flourishes because many people care deeply about injustice
but very few check the facts.  Ask me about <https://stallmansupport.org>.