{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE PartialTypeSignatures #-} import Distribution.Simple import Distribution.PackageDescription (HookedBuildInfo, emptyHookedBuildInfo) -- import Language.PureScript.Make -- import Language.PureScript.Names -- import Language.PureScript.Options -- import Language.PureScript.AST.Declarations -- import Language.PureScript.Parser.Declarations (parseModulesFromFiles) import System.Process -- import qualified Data.Map as M -- import qualified Data.Text as T -- import Data.Text.Encoding -- import Data.Maybe (fromJust) -- import qualified Data.ByteString.Lazy as BL -- import qualified Data.ByteString as BS import Debug.Trace main = defaultMainWithHooks simpleUserHooks { -- preBuild = preBuild' preConf = preConf' } preConf' :: _ -> _ -> IO HookedBuildInfo preConf' _ _ = do traceIO "Installing purescript dependencies" run11 <- readProcess "/usr/local/bin/bower" ["install"] [] run12 <- readProcess "/usr/bin/npm" ["install", "crypto-js"] [] traceIO "Compiling purescript files" run21 <- readProcess "/bin/mkdir" ["-p", "static/js"] [] run22 <- readProcess "/usr/local/bin/pulp" ["browserify" , "-t" , "static/js/auth.js"] [] return emptyHookedBuildInfo -- preBuild' :: _ -> _ -> IO HookedBuildInfo -- preBuild' _ _ = do -- exts <- runMake defaultOptions $ do -- traceM "im in here!" -- !src <- makeIO (const $ error "error") $ glob "src/*.purs" -- traceM $ show src -- traceM "reading in sources" -- !dep <- makeIO (const $ error "error") $ glob -- "bower_components/purescript-*/src/**/*.purs" -- traceM $ show dep -- traceM "reading in dependencies" -- !content <- zip [1..] <$> mapM (\s -> do -- cont <- readTextFile s -- return $ decodeUtf8 $ toStrict cont -- ) (dep ++ src) -- !mods <- parseModulesFromFiles -- (fromJust . flip lookup (zip [1..] (dep ++ src))) -- content -- let !srcMap = M.fromList $ zip (map getModuleName $ map snd mods) -- (map Right (dep ++ src)) -- traceM "building srcMap" -- !fgn <- inferForeignModules srcMap -- traceM "infering foreign modules" -- let !ma = buildMakeActions "static/js" srcMap fgn True -- traceM "built MakeActions" -- traceM "parsing modules" -- make ma (map snd mods) -- traceM "made" -- traceM $ show exts -- return emptyHookedBuildInfo -- -- toStrict :: BL.ByteString -> BS.ByteString -- toStrict = BS.concat . BL.toChunks