dev-haskell/gtk2hs-buildtools: add support for '__builtin_offsetof (struct sigcontext...
authorSergei Trofimovich <slyfox@gentoo.org>
Fri, 25 Sep 2015 23:23:57 +0000 (00:23 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Fri, 25 Sep 2015 23:24:15 +0000 (00:24 +0100)
Bug: https://bugs.gentoo.org/498638

Package-Manager: portage-2.2.20

dev-haskell/gtk2hs-buildtools/files/gtk2hs-buildtools-0.13.0.4-ia64.patch [new file with mode: 0644]
dev-haskell/gtk2hs-buildtools/gtk2hs-buildtools-0.13.0.4-r3.ebuild [new file with mode: 0644]

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 (file)
index 0000000..3caf5f7
--- /dev/null
@@ -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
diff --git a/dev-haskell/gtk2hs-buildtools/gtk2hs-buildtools-0.13.0.4-r3.ebuild b/dev-haskell/gtk2hs-buildtools/gtk2hs-buildtools-0.13.0.4-r3.ebuild
new file mode 100644 (file)
index 0000000..8397870
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+# ebuild generated by hackport 0.4.5.9999
+
+CABAL_FEATURES="bin"
+inherit haskell-cabal
+
+DESCRIPTION="Tools to build the Gtk2Hs suite of User Interface libraries"
+HOMEPAGE="http://projects.haskell.org/gtk2hs/"
+SRC_URI="mirror://hackage/packages/archive/${PN}/${PV}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="+closuresignals"
+
+RDEPEND="dev-haskell/random:=
+       >=dev-lang/ghc-7.4.1:=
+       || ( ( >=dev-lang/ghc-7.7:= dev-haskell/hashtables:= ) <dev-lang/ghc-7.7:= )
+"
+DEPEND="${RDEPEND}
+       dev-haskell/alex
+       >=dev-haskell/cabal-1.8
+       dev-haskell/happy
+"
+
+src_prepare() {
+       epatch "${FILESDIR}"/${P}-ia64.patch
+}
+
+src_configure() {
+       haskell-cabal_src_configure \
+               $(cabal_flag closuresignals closuresignals)
+}