Skip to content

Commit 1767022

Browse files
committed
eliminate setup dependency on ghc, ghc-lib-parser, ghc-source-gen
1 parent d167287 commit 1767022

File tree

3 files changed

+165
-239
lines changed

3 files changed

+165
-239
lines changed

ghcjs/miso-functora/Setup.hs

Lines changed: 30 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
{-# OPTIONS_GHC -Wno-safe #-}
1818
{-# OPTIONS_GHC -Wno-unsafe #-}
1919
{-# OPTIONS_GHC -fprint-potential-instances #-}
20-
#if MIN_VERSION_ghc(9,0,0)
20+
#if __GLASGOW_HASKELL__ >= 900
2121
{-# OPTIONS_GHC -Wno-missing-kind-signatures #-}
2222
{-# OPTIONS_GHC -Wno-prepositive-qualified-module #-}
2323
{-# OPTIONS_GHC -Wno-missing-safe-haskell-mode #-}
@@ -28,31 +28,10 @@ import Distribution.Simple hiding (Module (..))
2828
import Distribution.Simple.LocalBuildInfo (LocalBuildInfo (..))
2929
import Distribution.Simple.Utils (writeUTF8File)
3030
import Functora.Prelude hiding (empty)
31-
import GHC (runGhc)
32-
import GHC.Paths (libdir)
33-
import GHC.SourceGen
3431
import qualified System.Directory as Directory
3532
import System.Environment (getProgName)
3633
import qualified Text.Casing as Casing
3734

38-
#if MIN_VERSION_ghc(9,0,0)
39-
import "ghc" GHC.Driver.Session (getDynFlags)
40-
import "ghc" GHC.Utils.Outputable
41-
( Outputable (..),
42-
text,
43-
vcat,
44-
($+$),
45-
)
46-
#else
47-
import "ghc" DynFlags (getDynFlags)
48-
import "ghc" Outputable
49-
( Outputable (..),
50-
text,
51-
vcat,
52-
($+$),
53-
)
54-
#endif
55-
5635
main :: IO ()
5736
main =
5837
defaultMainWithHooks
@@ -62,86 +41,40 @@ main =
6241
>> buildHook simpleUserHooks p l h f
6342
}
6443

65-
data Module = Module
66-
{ moduleHeader :: [String],
67-
moduleBody :: HsModule'
68-
}
69-
70-
instance Outputable Module where
71-
ppr m =
72-
vcat (text <$> moduleHeader m)
73-
$+$ ppr (moduleBody m)
74-
7544
codeGenHook :: LocalBuildInfo -> IO ()
7645
codeGenHook _ = do
7746
prog <- getProgName
78-
runGhc (Just libdir) $ do
79-
dflags <- getDynFlags
80-
cssRaw <- liftIO $ Directory.listDirectory "dist/themes/"
81-
let cssKebab =
82-
sort . fmap (dropEnd 8) $ filter (isSuffixOf ".min.css") cssRaw
83-
let cssPascal =
84-
fmap Casing.pascal cssKebab
85-
if cssKebab == fmap Casing.kebab cssPascal
86-
then putStrLn $ inspect @Text cssPascal
87-
else
88-
error
89-
$ "Bad kebab <-> pascal isomorphism in "
90-
<> inspect @Text cssKebab
91-
liftIO
92-
. writeFileIfChanged
93-
. showPpr dflags
94-
$ generateCode prog cssPascal
47+
cssRaw <- liftIO $ Directory.listDirectory "dist/themes/"
48+
let cssKebab =
49+
sort . fmap (dropEnd 8) $ filter (isSuffixOf ".min.css") cssRaw
50+
let cssPascal =
51+
fmap Casing.pascal cssKebab
52+
if cssKebab == fmap Casing.kebab cssPascal
53+
then putStrLn $ inspect @Text cssPascal
54+
else
55+
error
56+
$ "Bad kebab <-> pascal isomorphism in "
57+
<> inspect @Text cssKebab
58+
liftIO
59+
. writeFileIfChanged
60+
$ generateCode prog cssPascal
9561

96-
generateCode :: String -> [String] -> Module
62+
generateCode :: String -> [String] -> String
9763
generateCode prog css =
98-
Module
99-
{ moduleHeader = header,
100-
moduleBody =
101-
module'
102-
(Just "Functora.Miso.Theme")
103-
(Just [thingAll "Theme"])
104-
( fmap
105-
import'
106-
[ "Prelude",
107-
"Data.Data",
108-
"Data.Binary",
109-
"GHC.Generics"
110-
]
111-
)
112-
[ data'
113-
"Theme"
114-
mempty
115-
( fmap (flip prefixCon mempty . fromString) css
116-
)
117-
[ derivingStock
118-
$ fmap
119-
var
120-
[ "Eq",
121-
"Ord",
122-
"Show",
123-
"Read",
124-
"Data",
125-
"Generic",
126-
"Enum",
127-
"Bounded"
128-
]
129-
],
130-
instance' (var "Binary" @@ var "Theme") mempty
131-
]
132-
}
133-
where
134-
header =
135-
[ "{- DO NOT EDIT. This file was auto-generated by the "
136-
<> prog
137-
<> " program. -}"
138-
-- languagePragma "DeriveDataTypeable",
139-
-- optionsGhcPragma "-Wno-missing-export-lists"
140-
]
141-
142-
-- languagePragma, optionsGhcPragma :: String -> String
143-
-- languagePragma s = "{-# LANGUAGE " <> s <> "#-}"
144-
-- optionsGhcPragma s = "{-# OPTIONS_GHC " <> s <> "#-}"
64+
intercalate
65+
"\n"
66+
[ "{- DO NOT EDIT. This file was auto-generated by the "
67+
<> prog
68+
<> " program. -}",
69+
"module Functora.Miso.Theme (Theme(..)) where",
70+
"import Prelude",
71+
"import Data.Data",
72+
"import Data.Binary",
73+
"import GHC.Generics",
74+
"data Theme = " <> intercalate "\n | " css,
75+
" deriving stock (Eq, Ord, Show, Read, Data, Generic, Enum, Bounded)",
76+
"instance Binary Theme"
77+
]
14578

14679
writeFileIfChanged :: String -> IO ()
14780
writeFileIfChanged newFile = do

ghcjs/miso-functora/miso-functora.cabal

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@ custom-setup
1515
, Cabal
1616
, casing
1717
, directory
18-
, filepath
1918
, functora-ghcjs
20-
, ghc
21-
, ghc-paths
22-
, ghc-source-gen
2319
, text
2420

2521
common pkg

0 commit comments

Comments
 (0)