![Joey Hess](/assets/img/avatar_default.png)
Was able to reuse many of the android patches, but several had to be re-done. On Android, ghc is a stage2 build, so can compile, but not run TH code. But debian's ghc on armel cannot even compile TH code, so it has to be patched out. Some haskell packages have been updated to new versions, including yesod and DAV, and their patches had to be redone. The Makefile now has 2 new targets. The first is run on a companion x86 system to do the build and get TH splices. Then the second target is run the same source tree on the arm system to build without needing TH. This commit was sponsored by Svenne Krap.
169 lines
5.7 KiB
Diff
169 lines
5.7 KiB
Diff
From acebcf203b270d00aac0a29be48832ae2c64ce7e Mon Sep 17 00:00:00 2001
|
|
From: Joey Hess <joey@kitenet.net>
|
|
Date: Tue, 17 Dec 2013 06:57:07 +0000
|
|
Subject: [PATCH] remove TH
|
|
|
|
---
|
|
Yesod/Routes/Parse.hs | 39 +++++----------------------------------
|
|
Yesod/Routes/TH.hs | 16 ++++++++--------
|
|
Yesod/Routes/TH/Types.hs | 16 ----------------
|
|
yesod-routes.cabal | 4 ----
|
|
4 files changed, 13 insertions(+), 62 deletions(-)
|
|
|
|
diff --git a/Yesod/Routes/Parse.hs b/Yesod/Routes/Parse.hs
|
|
index 3d27980..c2e3e6d 100644
|
|
--- a/Yesod/Routes/Parse.hs
|
|
+++ b/Yesod/Routes/Parse.hs
|
|
@@ -2,11 +2,11 @@
|
|
{-# LANGUAGE DeriveDataTypeable #-}
|
|
{-# OPTIONS_GHC -fno-warn-missing-fields #-} -- QuasiQuoter
|
|
module Yesod.Routes.Parse
|
|
- ( parseRoutes
|
|
- , parseRoutesFile
|
|
- , parseRoutesNoCheck
|
|
- , parseRoutesFileNoCheck
|
|
- , parseType
|
|
+ --( parseRoutes
|
|
+ --, parseRoutesFile
|
|
+ --, parseRoutesNoCheck
|
|
+ --, parseRoutesFileNoCheck
|
|
+ ( parseType
|
|
, parseTypeTree
|
|
, TypeTree (..)
|
|
) where
|
|
@@ -19,41 +19,12 @@ import Yesod.Routes.TH
|
|
import Yesod.Routes.Overlap (findOverlapNames)
|
|
import Data.List (foldl')
|
|
|
|
--- | A quasi-quoter to parse a string into a list of 'Resource's. Checks for
|
|
--- overlapping routes, failing if present; use 'parseRoutesNoCheck' to skip the
|
|
--- checking. See documentation site for details on syntax.
|
|
-parseRoutes :: QuasiQuoter
|
|
-parseRoutes = QuasiQuoter { quoteExp = x }
|
|
- where
|
|
- x s = do
|
|
- let res = resourcesFromString s
|
|
- case findOverlapNames res of
|
|
- [] -> lift res
|
|
- z -> error $ "Overlapping routes: " ++ unlines (map show z)
|
|
-
|
|
-parseRoutesFile :: FilePath -> Q Exp
|
|
-parseRoutesFile = parseRoutesFileWith parseRoutes
|
|
-
|
|
-parseRoutesFileNoCheck :: FilePath -> Q Exp
|
|
-parseRoutesFileNoCheck = parseRoutesFileWith parseRoutesNoCheck
|
|
-
|
|
-parseRoutesFileWith :: QuasiQuoter -> FilePath -> Q Exp
|
|
-parseRoutesFileWith qq fp = do
|
|
- qAddDependentFile fp
|
|
- s <- qRunIO $ readUtf8File fp
|
|
- quoteExp qq s
|
|
-
|
|
readUtf8File :: FilePath -> IO String
|
|
readUtf8File fp = do
|
|
h <- SIO.openFile fp SIO.ReadMode
|
|
SIO.hSetEncoding h SIO.utf8_bom
|
|
SIO.hGetContents h
|
|
|
|
--- | Same as 'parseRoutes', but performs no overlap checking.
|
|
-parseRoutesNoCheck :: QuasiQuoter
|
|
-parseRoutesNoCheck = QuasiQuoter
|
|
- { quoteExp = lift . resourcesFromString
|
|
- }
|
|
|
|
-- | Convert a multi-line string to a set of resources. See documentation for
|
|
-- the format of this string. This is a partial function which calls 'error' on
|
|
diff --git a/Yesod/Routes/TH.hs b/Yesod/Routes/TH.hs
|
|
index 7b2e50b..b05fc57 100644
|
|
--- a/Yesod/Routes/TH.hs
|
|
+++ b/Yesod/Routes/TH.hs
|
|
@@ -2,15 +2,15 @@
|
|
module Yesod.Routes.TH
|
|
( module Yesod.Routes.TH.Types
|
|
-- * Functions
|
|
- , module Yesod.Routes.TH.RenderRoute
|
|
- , module Yesod.Routes.TH.ParseRoute
|
|
- , module Yesod.Routes.TH.RouteAttrs
|
|
+ -- , module Yesod.Routes.TH.RenderRoute
|
|
+ -- , module Yesod.Routes.TH.ParseRoute
|
|
+ -- , module Yesod.Routes.TH.RouteAttrs
|
|
-- ** Dispatch
|
|
- , module Yesod.Routes.TH.Dispatch
|
|
+ -- , module Yesod.Routes.TH.Dispatch
|
|
) where
|
|
|
|
import Yesod.Routes.TH.Types
|
|
-import Yesod.Routes.TH.RenderRoute
|
|
-import Yesod.Routes.TH.ParseRoute
|
|
-import Yesod.Routes.TH.RouteAttrs
|
|
-import Yesod.Routes.TH.Dispatch
|
|
+--import Yesod.Routes.TH.RenderRoute
|
|
+--import Yesod.Routes.TH.ParseRoute
|
|
+--import Yesod.Routes.TH.RouteAttrs
|
|
+--import Yesod.Routes.TH.Dispatch
|
|
diff --git a/Yesod/Routes/TH/Types.hs b/Yesod/Routes/TH/Types.hs
|
|
index d0a0405..3232e99 100644
|
|
--- a/Yesod/Routes/TH/Types.hs
|
|
+++ b/Yesod/Routes/TH/Types.hs
|
|
@@ -31,10 +31,6 @@ instance Functor ResourceTree where
|
|
fmap f (ResourceLeaf r) = ResourceLeaf (fmap f r)
|
|
fmap f (ResourceParent a b c) = ResourceParent a (map (second $ fmap f) b) $ map (fmap f) c
|
|
|
|
-instance Lift t => Lift (ResourceTree t) where
|
|
- lift (ResourceLeaf r) = [|ResourceLeaf $(lift r)|]
|
|
- lift (ResourceParent a b c) = [|ResourceParent $(lift a) $(lift b) $(lift c)|]
|
|
-
|
|
data Resource typ = Resource
|
|
{ resourceName :: String
|
|
, resourcePieces :: [(CheckOverlap, Piece typ)]
|
|
@@ -48,9 +44,6 @@ type CheckOverlap = Bool
|
|
instance Functor Resource where
|
|
fmap f (Resource a b c d) = Resource a (map (second $ fmap f) b) (fmap f c) d
|
|
|
|
-instance Lift t => Lift (Resource t) where
|
|
- lift (Resource a b c d) = [|Resource a b c d|]
|
|
-
|
|
data Piece typ = Static String | Dynamic typ
|
|
deriving Show
|
|
|
|
@@ -58,10 +51,6 @@ instance Functor Piece where
|
|
fmap _ (Static s) = (Static s)
|
|
fmap f (Dynamic t) = Dynamic (f t)
|
|
|
|
-instance Lift t => Lift (Piece t) where
|
|
- lift (Static s) = [|Static $(lift s)|]
|
|
- lift (Dynamic t) = [|Dynamic $(lift t)|]
|
|
-
|
|
data Dispatch typ =
|
|
Methods
|
|
{ methodsMulti :: Maybe typ -- ^ type of the multi piece at the end
|
|
@@ -77,11 +66,6 @@ instance Functor Dispatch where
|
|
fmap f (Methods a b) = Methods (fmap f a) b
|
|
fmap f (Subsite a b) = Subsite (f a) b
|
|
|
|
-instance Lift t => Lift (Dispatch t) where
|
|
- lift (Methods Nothing b) = [|Methods Nothing $(lift b)|]
|
|
- lift (Methods (Just t) b) = [|Methods (Just $(lift t)) $(lift b)|]
|
|
- lift (Subsite t b) = [|Subsite $(lift t) $(lift b)|]
|
|
-
|
|
resourceMulti :: Resource typ -> Maybe typ
|
|
resourceMulti Resource { resourceDispatch = Methods (Just t) _ } = Just t
|
|
resourceMulti _ = Nothing
|
|
diff --git a/yesod-routes.cabal b/yesod-routes.cabal
|
|
index 0e44409..e01ea06 100644
|
|
--- a/yesod-routes.cabal
|
|
+++ b/yesod-routes.cabal
|
|
@@ -28,10 +28,6 @@ library
|
|
Yesod.Routes.Parse
|
|
Yesod.Routes.Overlap
|
|
Yesod.Routes.TH.Types
|
|
- other-modules: Yesod.Routes.TH.Dispatch
|
|
- Yesod.Routes.TH.RenderRoute
|
|
- Yesod.Routes.TH.ParseRoute
|
|
- Yesod.Routes.TH.RouteAttrs
|
|
ghc-options: -Wall
|
|
|
|
test-suite runtests
|
|
--
|
|
1.8.5.1
|
|
|