aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/cmake
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2019-02-22 11:46:18 +0100
committerDaniel Mensinger <daniel@mensinger-ka.de>2019-06-06 18:27:01 +0200
commit9aae603d1b5c660afefb3e208c284f880173cf9b (patch)
tree0ef235c9a6f5bf106161934d228415b16372694c /mesonbuild/cmake
parentef18afc48b85cbcb10086558fff50886931103e3 (diff)
downloadmeson-9aae603d1b5c660afefb3e208c284f880173cf9b.zip
meson-9aae603d1b5c660afefb3e208c284f880173cf9b.tar.gz
meson-9aae603d1b5c660afefb3e208c284f880173cf9b.tar.bz2
cmake: Handle a few more stub messages
Diffstat (limited to 'mesonbuild/cmake')
-rw-r--r--mesonbuild/cmake/client.py46
1 files changed, 33 insertions, 13 deletions
diff --git a/mesonbuild/cmake/client.py b/mesonbuild/cmake/client.py
index b98bf46..2fbb89a 100644
--- a/mesonbuild/cmake/client.py
+++ b/mesonbuild/cmake/client.py
@@ -30,7 +30,10 @@ CMAKE_SERVER_END_STR = ']== "CMake Server" ==]'
CMAKE_MESSAGE_TYPES = {
'error': ['cookie', 'errorMessage'],
'hello': ['supportedProtocolVersions'],
+ 'message': ['cookie', 'message'],
+ 'progress': ['cookie'],
'reply': ['cookie', 'inReplyTo'],
+ 'signal': ['cookie', 'name'],
}
CMAKE_REPLY_TYPES = {
@@ -66,6 +69,14 @@ class ReplyBase(MessageBase):
super().__init__('reply', cookie)
self.in_reply_to = in_reply_to
+class SignalBase(MessageBase):
+ def __init__(self, cookie: str, signal_name: str):
+ super().__init__('signal', cookie)
+ self.signal_name = signal_name
+
+ def log(self) -> None:
+ mlog.log(mlog.bold('CMake signal:'), mlog.yellow(self.signal_name))
+
# Special Message classes
class Error(MessageBase):
@@ -76,6 +87,21 @@ class Error(MessageBase):
def log(self) -> None:
mlog.error(mlog.bold('CMake server error:'), mlog.red(self.message))
+class Message(MessageBase):
+ def __init__(self, cookie: str, message: str):
+ super().__init__('message', cookie)
+ self.message = message
+
+ def log(self) -> None:
+ mlog.log(mlog.bold('CMake:'), self.message)
+
+class Progress(MessageBase):
+ def __init__(self, cookie: str):
+ super().__init__('progress', cookie)
+
+ def log(self) -> None:
+ pass
+
class MessageHello(MessageBase):
def __init__(self, supported_protocol_versions: List[dict]):
super().__init__('hello', '')
@@ -122,13 +148,16 @@ class CMakeClient:
self.env = env
self.proc = None
self.type_map = {
- 'hello': self.resolve_type_hello,
- 'error': self.resolve_type_error,
+ 'error': lambda data: Error(data['cookie'], data['errorMessage']),
+ 'hello': lambda data: MessageHello(data['supportedProtocolVersions']),
+ 'message': lambda data: Message(data['cookie'], data['message']),
+ 'progress': lambda data: Progress(data['cookie']),
'reply': self.resolve_type_reply,
+ 'signal': lambda data: SignalBase(data['cookie'], data['name'])
}
self.reply_map = {
- 'handshake': self.resolve_reply_handshake,
+ 'handshake': lambda data: ReplyHandShake(data['cookie']),
}
def readMessageRaw(self) -> dict:
@@ -175,7 +204,7 @@ class CMakeClient:
self.writeMessage(request)
while True:
reply = self.readMessage()
- if reply.cookie == request.cookie:
+ if reply.cookie == request.cookie and reply.type in ['reply', 'error']:
return reply
reply.log()
@@ -194,12 +223,6 @@ class CMakeClient:
raise CMakeException('Failed to perform the handshake with the CMake server')
mlog.log('CMake server handshake:', mlog.green('OK'))
- def resolve_type_error(self, data: dict) -> Error:
- return Error(data['cookie'], data['errorMessage'])
-
- def resolve_type_hello(self, data: dict) -> MessageHello:
- return MessageHello(data['supportedProtocolVersions'])
-
def resolve_type_reply(self, data: dict) -> ReplyBase:
reply_type = data['inReplyTo']
func = self.reply_map.get(reply_type, None)
@@ -210,9 +233,6 @@ class CMakeClient:
raise CMakeException('Key "{}" is missing from CMake server message type {}'.format(i, type))
return func(data)
- def resolve_reply_handshake(self, data: dict) -> ReplyHandShake:
- return ReplyHandShake(data['cookie'])
-
@contextmanager
def connect(self):
self.startup()