git.iko.soy/distributed-process
on master help sign in
makefile improvement; additional unsafe primitives
79734d3Tim Watson
Makefile+3−59
@@ -1,62 +1,6 @@
1−# CI build
2
1
3−GHC ?= $(shell which ghc)
2+ifneq (,$(BASE_DIR))
4−CABAL ?= $(shell which cabal)
3+include $(BASE_DIR)/build.mk
5−CABAL_DEV ?= $(shell which cabal-dev)
6−PWD = $(shell pwd)
7−SANDBOX ?= $(PWD)/cabal-dev
8−BRANCH ?= $(shell git branch | grep '*' | awk '/.*/ { print $NF }')
9−GIT_BASE ?= git://github.com/haskell-distributed
10−USE_LOCAL_UMBRELLA ?=
11−REPOS=$(shell cat REPOS | sed '/^$$/d')
12−
13−.PHONY: all
14−all:
15− $(info branch = ${BRANCH})
16−
17−.PHONY: clean
18−clean:
19− rm -rf ${REPOS} ./dist ./cabal-dev
20−
21−.PHONY: dev-install
22−ifneq (,$(CABAL_DEV))
23−dev-install: $(REPOS)
24− $(CABAL_DEV) install --enable-tests
25else
4else
26−dev-install:
5+include ../build.mk
27− $(error install cabal-dev to proceed)
28endif
6endif
29−
30−.PHONY: ci
31−ci: travis-install travis-test
32−
33−.PHONY: travis-install
34−travis-install: $(REPOS)
35− $(CABAL) install --with-ghc=$(GHC) $(REPOS) --force-reinstalls
36− $(CABAL) install
37−
38−.PHONY: travis-test
39−travis-test:
40− $(CABAL) configure --enable-tests
41− $(CABAL) build
42− $(CABAL) test --show-details=always
43−
44−ifneq (,$(USE_LOCAL_UMBRELLA))
45−define clone
46− git clone $(GIT_BASE)/$1 $1
47−endef
48−else
49−define clone
50− git clone $(GIT_BASE)/$1.git $1
51−endef
52−endif
53−
54−$(REPOS):
55− $(call clone,$@)
56− git --git-dir=$@/.git \
57− --work-tree=$@ \
58− checkout $(BRANCH)
59− cd $@ && $(CABAL_DEV) install --sandbox=$(SANDBOX)
60−
61−./build:
62− mkdir -p build
src/Control/Distributed/Process/Internal/Primitives.hs+4
@@ -32,6 +32,7 @@ module Control.Distributed.Process.Internal.Primitives
32 , matchMessageIf
32 , matchMessageIf
33 , isEncoded
33 , isEncoded
34 , wrapMessage
34 , wrapMessage
35+ , unsafeWrapMessage
35 , unwrapMessage
36 , unwrapMessage
36 , handleMessage
37 , handleMessage
37 , handleMessageIf
38 , handleMessageIf
@@ -433,6 +434,9 @@ forward msg them = do
433wrapMessage :: Serializable a => a -> Message
434wrapMessage :: Serializable a => a -> Message
434wrapMessage = createUnencodedMessage -- see [note Serializable UnencodedMessage]
435wrapMessage = createUnencodedMessage -- see [note Serializable UnencodedMessage]
435
436
437+unsafeWrapMessage :: Serializable a => a -> Message
438+unsafeWrapMessage = Unsafe.wrapMessage
439+
436-- [note Serializable UnencodedMessage]
440-- [note Serializable UnencodedMessage]
437-- if we attempt to serialise an UnencodedMessage, it will be converted to an
441-- if we attempt to serialise an UnencodedMessage, it will be converted to an
438-- EncodedMessage first, so we're ok here. See 'messageToPayload' in
442-- EncodedMessage first, so we're ok here. See 'messageToPayload' in
src/Control/Distributed/Process/UnsafePrimitives.hs+5
@@ -44,6 +44,7 @@ module Control.Distributed.Process.UnsafePrimitives
44 send
44 send
45 , sendChan
45 , sendChan
46 , nsend
46 , nsend
47+ , wrapMessage
47 ) where
48 ) where
48
49
49import Control.Distributed.Process.Internal.Messaging
50import Control.Distributed.Process.Internal.Messaging
@@ -62,6 +63,7 @@ import Control.Distributed.Process.Internal.Types
62 , Identifier(..)
63 , Identifier(..)
63 , ImplicitReconnect(..)
64 , ImplicitReconnect(..)
64 , SendPortId(..)
65 , SendPortId(..)
66+ , Message
65 , sendPortProcessId
67 , sendPortProcessId
66 , unsafeCreateUnencodedMessage
68 , unsafeCreateUnencodedMessage
67 )
69 )
@@ -104,6 +106,9 @@ sendChan (SendPort cid) msg = do
104 NoImplicitReconnect
106 NoImplicitReconnect
105 msg
107 msg
106
108
109+wrapMessage :: Serializable a => a -> Message
110+wrapMessage = unsafeCreateUnencodedMessage
111+
107unsafeSendLocal :: (Serializable a) => ProcessId -> a -> Process ()
112unsafeSendLocal :: (Serializable a) => ProcessId -> a -> Process ()
108unsafeSendLocal pid msg =
113unsafeSendLocal pid msg =
109 sendCtrlMsg Nothing $ LocalSend pid (unsafeCreateUnencodedMessage msg)
114 sendCtrlMsg Nothing $ LocalSend pid (unsafeCreateUnencodedMessage msg)