blob: ebcf01e1d6303e3a82f8588c098dd7cf98ba6175 [file] [log] [blame]
Alexander Afanasyev749f0652013-09-22 13:03:21 -07001# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
2VERSION='1.0'
3APPNAME='ndnx-control-center'
4
5from waflib import Logs, Utils, Task, TaskGen
6
7def options(opt):
8 opt.load('compiler_c compiler_cxx')
Alexander Afanasyevd1a75b82013-09-25 16:50:04 -07009 opt.load('sparkle xcode', tooldir='waf-tools')
Alexander Afanasyev749f0652013-09-22 13:03:21 -070010
Alexander Afanasyev2beff7f2013-09-27 17:50:36 -070011 grp = opt.add_option_group ('NDNx Control Center options')
12 grp.add_option ('--ndnx', help='''Root path to NDNx installation (default: /usr)''',
13 dest='ndnx_root', type=str, default='/usr')
14
Alexander Afanasyev749f0652013-09-22 13:03:21 -070015def configure(conf):
16 conf.load('compiler_c compiler_cxx')
17
18 if Utils.unversioned_sys_platform () != "darwin":
19 Logs.error ("Only OSX is supported so far")
20 return -1
21
Alexander Afanasyev2beff7f2013-09-27 17:50:36 -070022 conf.start_msg('Checking for NDNx in %s' % conf.options.ndnx_root)
23 if not conf.find_file('ndnd ndndstatus ndndstart ndndstop', path_list='%s/bin' % conf.options.ndnx_root, mandatory=False):
24 conf.end_msg ('not found, but will proceed anyways', 'YELLOW')
25 else:
26 conf.end_msg ('ok')
Alexander Afanasyev6cacb972013-10-03 23:39:06 -070027
Alexander Afanasyev2beff7f2013-09-27 17:50:36 -070028 conf.define('NDNX_ROOT', conf.options.ndnx_root)
Alexander Afanasyev6cacb972013-10-03 23:39:06 -070029 conf.define('NDND_START_COMMAND', '%s/bin/ndndstart' % conf.options.ndnx_root)
30 conf.define('NDND_STOP_COMMAND', '%s/bin/ndndstop' % conf.options.ndnx_root)
31 conf.define('NDND_STATUS_COMMAND', '%s/bin/ndndsmoketest' % conf.options.ndnx_root)
32 conf.define('NDND_FIB_COMMAND', '%s/bin/ndndc' % conf.options.ndnx_root)
Alexander Afanasyevb9024d12013-10-14 18:10:18 +030033 conf.define('NDND_AUTOCONFIG_COMMAND', '%s/bin/ndnd-autoconfig' % conf.options.ndnx_root)
Alexander Afanasyev2beff7f2013-09-27 17:50:36 -070034
Alexander Afanasyev749f0652013-09-22 13:03:21 -070035 if Utils.unversioned_sys_platform () == "darwin":
Alexander Afanasyev88f0b3a2013-09-24 23:52:08 -070036 conf.find_program('ibtool', var='IBTOOL', mandatory=False)
Alexander Afanasyev749f0652013-09-22 13:03:21 -070037
Alexander Afanasyev88f0b3a2013-09-24 23:52:08 -070038 conf.check_cxx(framework_name='Foundation', uselib_store='FOUNDATION', compile_filename='test.mm')
39 conf.check_cxx(framework_name='AppKit', uselib_store='APPKIT', compile_filename='test.mm')
40 conf.check_cxx(framework_name='Cocoa', uselib_store='COCOA', compile_filename='test.mm')
41
42 conf.env.ARCH_OSX = 'x86_64'
43 conf.env.CXXFLAGS_OSX += ['-fobjc-arc', '-mmacosx-version-min=10.8']
44 conf.env.LINKFLAGS_OSX += ['-mmacosx-version-min=10.8']
45
46 conf.env.MACOSX_DEPLOYMENT_TARGET = '10.8'
47
Alexander Afanasyev749f0652013-09-22 13:03:21 -070048 conf.load('sparkle')
49
Alexander Afanasyev2beff7f2013-09-27 17:50:36 -070050 conf.write_config_header('config.h')
51
Alexander Afanasyev749f0652013-09-22 13:03:21 -070052def build (bld):
53 if Utils.unversioned_sys_platform () != "darwin":
54 Logs.error ("Only OSX is supported so far")
55 return -1
56
57 if Utils.unversioned_sys_platform () == "darwin":
58 bld (
59 target = "NDNx Control Center",
60 features=['cxxprogram', 'cxx'],
Alexander Afanasyev2beff7f2013-09-27 17:50:36 -070061 includes = ". osx",
Alexander Afanasyev88f0b3a2013-09-24 23:52:08 -070062 source = bld.path.ant_glob (['osx/**/*.mm', 'osx/MainMenu.xib']),
63
64 mac_app = True,
65 use = "OSX COCOA FOUNDATION APPKIT SPARKLE",
Alexander Afanasyev749f0652013-09-22 13:03:21 -070066
Alexander Afanasyev88f0b3a2013-09-24 23:52:08 -070067 mac_plist = 'osx/Info.plist',
Ilya Moiseenko350b9b52013-09-25 16:38:41 -070068 mac_resources = [i.path_from(bld.path) for i in bld.path.ant_glob ('osx/Resources/**/*')],
Alexander Afanasyev749f0652013-09-22 13:03:21 -070069 mac_frameworks = "osx/Frameworks/Sparkle.framework",
70 )
71
Alexander Afanasyev88f0b3a2013-09-24 23:52:08 -070072
Alexander Afanasyev749f0652013-09-22 13:03:21 -070073from waflib import TaskGen
74@TaskGen.extension('.mm')
75def m_hook(self, node):
76 """Alias .mm files to be compiled the same as .cc files, gcc/clang will do the right thing."""
77 return self.create_compiled_task('cxx', node)
Alexander Afanasyev88f0b3a2013-09-24 23:52:08 -070078
79@TaskGen.extension('.m')
80def m_hook(self, node):
81 """Alias .m files to be compiled the same as .c files, gcc/clang will do the right thing."""
82 return self.create_compiled_task('c', node)
83
84
85def bundle_name_for_output(name):
86 k = name.rfind('.')
87 if k >= 0:
88 name = name[:k] + '.app'
89 else:
90 name = name + '.app'
91 return name
92
93@TaskGen.extension('.xib')
94def xib(self,node):
95 out = node.change_ext ('.nib')
96
97 name = self.path.get_bld ().find_or_declare (bundle_name_for_output(self.target))
98 resources = name.find_or_declare(['Contents', 'Resources'])
99 resources.mkdir()
100 real_out = resources.make_node (out.name)
101
102 self.create_task('xib', node, real_out)
103 inst_to = getattr(self, 'install_path', '/Applications') + '/%s/Resources' % name
104 self.bld.install_as (inst_to + '/%s' % real_out.name, real_out)
105
106class xib(Task.Task):
107 color='PINK'
108 run_str = '${IBTOOL} --errors --warnings --notices --minimum-deployment-target 10.8 --output-format human-readable-text --compile ${TGT} ${SRC}'