diff options
Diffstat (limited to 'dev-haskell/gtk2hs-buildtools/files/gtk2hs-buildtools-0.13.0.4-ia64.patch')
-rw-r--r-- | dev-haskell/gtk2hs-buildtools/files/gtk2hs-buildtools-0.13.0.4-ia64.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/dev-haskell/gtk2hs-buildtools/files/gtk2hs-buildtools-0.13.0.4-ia64.patch b/dev-haskell/gtk2hs-buildtools/files/gtk2hs-buildtools-0.13.0.4-ia64.patch new file mode 100644 index 000000000000..3caf5f769cab --- /dev/null +++ b/dev-haskell/gtk2hs-buildtools/files/gtk2hs-buildtools-0.13.0.4-ia64.patch @@ -0,0 +1,47 @@ +ia64 is is a special showflake. + +Technically does nothing bad, +but it alone uses '__builtin_offsetof (struct sigcontext' +in system headers. c2hs does not handle that. + +https://bugs.gentoo.org/498638 +diff --git a/c2hs/c/C.hs b/c2hs/c/C.hs +index f79b6d9..aa1b5e4 100644 +--- a/c2hs/c/C.hs ++++ b/c2hs/c/C.hs +@@ -1 +1,2 @@ ++{-# LANGUAGE CPP, PatternGuards #-} + -- C->Haskell Compiler: interface to C processing routines +@@ -94,2 +95,20 @@ isuffix = ".i" + ++-- This stanza workarounds very specific limitation ++-- of c2hs of not being able to expang __builtin_offsetof ++-- used by all glib/gtk headers at least on ia64. ++raw_mangle :: String -> String ++raw_mangle s = case s of ++ [] -> [] ++#ifdef ia64_HOST_ARCH ++ _ | Just (h, rest) <- chop_head "__builtin_offsetof (struct sigcontext, sc_gr[0])" ++ "200" -- ia64/linux/glibc, sigh ++ -> h ++ raw_mangle rest ++#endif /* ia64_HOST_ARCH */ ++ (h:t) -> h : raw_mangle t ++ where chop_head prefix new_prefix = ++ case splitAt p_len s of ++ (h, t) | h == prefix -> Just (new_prefix, t) ++ _ -> Nothing ++ where p_len = length prefix ++ + -- given a file name (with suffix), parse that file as a C header and do the +@@ -106,3 +124,3 @@ loadAttrC fname = do + traceInfoRead fname +- contents <- readFileCIO fname ++ contents <- raw_mangle `fmap` readFileCIO fname + +@@ -126,4 +144,4 @@ loadAttrC fname = do + errmsgs <- showErrors +- fatal ("C header contains \ +- \errors:\n\n" ++ errmsgs) -- fatal error ++ fatal ("C header contains " ++ ++ "errors:\n\n" ++ errmsgs) -- fatal error + else do |