blob: 2aee143982a03c15e945c3e9c021420f0f44dd06 [file] [log] [blame]
Davide Pesavento67f30272016-08-10 01:55:16 +00001# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
Wentao Shang53df1632014-04-21 12:01:32 -07002
Davide Pesavento67f30272016-08-10 01:55:16 +00003from waflib import Options, Logs, Errors, Configure
Wentao Shang53df1632014-04-21 12:01:32 -07004import re
5
6def addWebsocketOptions(self, opt):
7 opt.add_option('--without-websocket', action='store_false', default=True,
Davide Pesavento67f30272016-08-10 01:55:16 +00008 dest='with_websocket', help='Disable WebSocket face support')
Wentao Shang53df1632014-04-21 12:01:32 -07009setattr(Options.OptionsContext, "addWebsocketOptions", addWebsocketOptions)
10
Davide Pesavento67f30272016-08-10 01:55:16 +000011@Configure.conf
Wentao Shang53df1632014-04-21 12:01:32 -070012def checkWebsocket(self, **kw):
13 if not self.options.with_websocket:
14 return
15
16 isMandatory = kw.get('mandatory', True)
17
Alexander Afanasyev2fdbe862014-07-25 12:14:49 -070018 self.start_msg('Checking for WebSocket includes')
Wentao Shang53df1632014-04-21 12:01:32 -070019
20 try:
21 websocketDir = self.path.find_dir('websocketpp/websocketpp')
22 if not websocketDir:
23 raise Errors.WafError('Not found')
24
25 versionFile = websocketDir.find_node('version.hpp')
26 if not websocketDir:
Alexander Afanasyev2fdbe862014-07-25 12:14:49 -070027 raise Errors.WafError('Corrupted: WebSocket version file not found')
Wentao Shang53df1632014-04-21 12:01:32 -070028
29 try:
30 txt = versionFile.read()
31 except (OSError, IOError):
Alexander Afanasyev2fdbe862014-07-25 12:14:49 -070032 raise Errors.WafError('Corrupted: cannot read WebSocket version file')
Wentao Shang53df1632014-04-21 12:01:32 -070033
34 # Looking for the following:
35 # static int const major_version = 0;
Eric Newberry25a84072016-06-20 18:38:15 -070036 # static int const minor_version = 7;
37 # static int const patch_version = 0;
Wentao Shang53df1632014-04-21 12:01:32 -070038
39 version = [None, None, None]
40
41 majorVersion = re.compile('^static int const major_version = (\\d+);$', re.M)
42 version[0] = majorVersion.search(txt)
43
44 minorVersion = re.compile('^static int const minor_version = (\\d+);$', re.M)
45 version[1] = minorVersion.search(txt)
46
47 patchVersion = re.compile('^static int const patch_version = (\\d+);$', re.M)
48 version[2] = patchVersion.search(txt)
49
50 if not version[0] or not version[1] or not version[2]:
51 raise Errors.WafError('Corrupted: cannot detect websocket version')
52
53 self.env['WEBSOCKET_VERSION'] = [i.group(1) for i in version]
54
55 # todo: version checking, if necessary
56
57 self.end_msg('.'.join(self.env['WEBSOCKET_VERSION']))
58
Steve DiBenedettoef04f272014-06-04 14:28:31 -060059 self.env['INCLUDES_WEBSOCKET'] = websocketDir.parent.abspath()
Wentao Shang53df1632014-04-21 12:01:32 -070060 self.env['HAVE_WEBSOCKET'] = True
61 self.define('HAVE_WEBSOCKET', 1)
Wentao Shang306df5e2014-10-31 15:46:00 -070062 self.define('_WEBSOCKETPP_CPP11_STL_', 1)
Wentao Shang53df1632014-04-21 12:01:32 -070063
64 except Errors.WafError as error:
65 if isMandatory:
66 self.end_msg(str(error), color='RED')
67 Logs.warn('If you are using git NFD repository, checkout websocketpp submodule: ')
68 Logs.warn(' git submodule init && git submodule update')
69 Logs.warn('Otherwise, manually download and extract websocketpp library:')
70 Logs.warn(' mkdir websocketpp')
Eric Newberry25a84072016-06-20 18:38:15 -070071 Logs.warn(' curl -L https://github.com/zaphoyd/websocketpp/archive/0.7.0.tar.gz > websocket.tar.gz')
Alexander Afanasyev2fdbe862014-07-25 12:14:49 -070072 Logs.warn(' tar zxf websocket.tar.gz -C websocketpp/ --strip 1')
73 Logs.warn('Alternatively, WebSocket support can be disabled with --without-websocket')
Wentao Shang53df1632014-04-21 12:01:32 -070074 self.fatal("The configuration failed")
75 else:
76 self.end_msg(str(error))