@@ -5,6 +5,8 @@ module IRC.Plugins.Loader ( load ) where | |||||
import qualified Data.HashMap.Lazy as M | import qualified Data.HashMap.Lazy as M | ||||
import IRC.Plugins.Plugin | |||||
import Control.Exception ( catch, ErrorCall ) | import Control.Exception ( catch, ErrorCall ) | ||||
import GHC.Exts ( addrToAny# ) | import GHC.Exts ( addrToAny# ) | ||||
import GHC.Ptr ( Ptr(..) ) | import GHC.Ptr ( Ptr(..) ) | ||||
@@ -12,11 +14,6 @@ import System.Info ( os, arch ) | |||||
import GHCi.ObjLink | import GHCi.ObjLink | ||||
import Encoding | import Encoding | ||||
type PluginSet = M.HashMap String Plugin | |||||
data Plugin = Plugin { pluginEvent :: String, -- e.g. PRIVMSG | |||||
pluginEntry :: Int } | |||||
load :: PluginSet -> String -> IO (Either String PluginSet) | load :: PluginSet -> String -> IO (Either String PluginSet) | ||||
load set path = do | load set path = do | ||||
initObjLinker RetainCAFs | initObjLinker RetainCAFs | ||||
@@ -0,0 +1,8 @@ | |||||
module IRC.Plugins.Plugin ( PluginSet, Plugin(..) ) where | |||||
import qualified Data.HashMap.Lazy as M | |||||
type PluginSet = M.HashMap String Plugin | |||||
data Plugin = Plugin { pluginEvent :: String, -- e.g. PRIVMSG | |||||
pluginEntry :: Int } |
@@ -1,3 +1,4 @@ | |||||
include_rules | include_rules | ||||
: foreach *.hs |> ghc $(GHCFLAGS) -c %f |> %B.o %B.hi | |||||
: Plugin.hs |> ghc $(GHCFLAGS) -c %f |> %B.o %B.hi | |||||
: Loader.hs | Plugin.hi |> ghc $(GHCFLAGS) -c %f |> %B.o %B.hi |
@@ -1,4 +1,4 @@ | |||||
include_rules | include_rules | ||||
: foreach *.hs | IRC/*.hi |> ghc $(GHCFLAGS) -c %f |> %B.o %B.hi | |||||
: *.o IRC/*.o |> ghc -o Main %f |> Main | |||||
: foreach *.hs | IRC/*.hi IRC/Plugins/*.hi |> ghc $(GHCFLAGS) -c %f |> %B.o %B.hi | |||||
: *.o IRC/*.o IRC/Plugins/*.o |> ghc -o Main %f |> Main |
@@ -1 +1 @@ | |||||
GHCFLAGS += -Wall -O3 | |||||
GHCFLAGS += -i$(CWD) -Wall -O3 |
@@ -9,6 +9,8 @@ if ! command -v tup >/dev/null; then | |||||
exit 1 | exit 1 | ||||
fi | fi | ||||
export CWD="$(readlink -f .)" | |||||
case $1 in | case $1 in | ||||
run) | run) | ||||
$0 build >&2 || exit 1 | $0 build >&2 || exit 1 | ||||
@@ -22,7 +24,7 @@ case $1 in | |||||
tup >&2 | tup >&2 | ||||
;; | ;; | ||||
clean) | clean) | ||||
rm -f Main *.o *.hi IRC/*.o IRC/*.hi | |||||
rm -f Main *.o *.hi IRC/*.o IRC/*.hi IRC/Plugins/*.o IRC/Plugins/*.hi | |||||
;; | ;; | ||||
*) | *) | ||||
usage | usage | ||||