diff --git a/osx/wscript b/osx/wscript
new file mode 100644
index 0000000..9a6c4bf
--- /dev/null
+++ b/osx/wscript
@@ -0,0 +1,76 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+from waflib import Logs, Utils, Task, TaskGen
+
+top = '..'
+
+def configure(conf):
+
+    conf.find_program('ibtool', var='IBTOOL', mandatory=False)
+
+    conf.check_cxx(framework_name='Foundation', uselib_store='FOUNDATION',
+                   compile_filename='test.mm')
+    conf.check_cxx(framework_name='AppKit',     uselib_store='APPKIT',
+                   compile_filename='test.mm')
+    conf.check_cxx(framework_name='Cocoa',      uselib_store='COCOA',
+                   compile_filename='test.mm')
+
+    conf.env.ARCH_OSX = 'x86_64'
+    conf.env.CXXFLAGS_OSX += ['-fobjc-arc', '-mmacosx-version-min=10.7']
+    conf.env.LINKFLAGS_OSX += ['-mmacosx-version-min=10.7']
+    conf.env.MACOSX_DEPLOYMENT_TARGET = '10.7'
+
+    conf.load('sparkle')
+
+def build(bld):
+    bld(
+        target = "../NFD Control Center",
+        features=['cxxprogram', 'cxx'],
+        includes = ".. .",
+        source = bld.path.ant_glob(['**/*.mm', 'MainMenu.xib']),
+
+        mac_app = True,
+        use = "OSX COCOA FOUNDATION APPKIT SPARKLE",
+
+        mac_plist = 'Info.plist',
+        mac_resources = [i.path_from(bld.path) for i in bld.path.ant_glob('Resources/**/*')],
+        mac_frameworks = "Frameworks/Sparkle.framework",
+        )
+
+from waflib import TaskGen
+@TaskGen.extension('.mm')
+def m_hook(self, node):
+    """Alias .mm files to be compiled the same as .cc files, gcc/clang will do the right thing."""
+    return self.create_compiled_task('cxx', node)
+
+@TaskGen.extension('.m')
+def m_hook(self, node):
+    """Alias .m files to be compiled the same as .c files, gcc/clang will do the right thing."""
+    return self.create_compiled_task('c', node)
+
+
+def bundle_name_for_output(name):
+    return "%s.app" % name
+    # k = name.rfind('.')
+    # if k >= 0:
+    #     name = name[:k] + '.app'
+    # else:
+    #     name = name + '.app'
+    # return name
+
+@TaskGen.extension('.xib')
+def xib(self,node):
+    out = node.change_ext('.nib')
+
+    name = self.path.get_bld().find_or_declare(bundle_name_for_output(self.target))
+    resources = name.find_or_declare(['Contents', 'Resources'])
+    resources.mkdir()
+    real_out = resources.make_node(out.name)
+
+    self.create_task('xib', node, real_out)
+    inst_to = getattr(self, 'install_path', '/Applications') + '/%s/Contents/Resources' % name
+    self.bld.install_as(inst_to + '/%s' % real_out.name, real_out)
+
+class xib(Task.Task):
+    color='PINK'
+    run_str = '${IBTOOL} --errors --warnings --notices --output-format human-readable-text --compile ${TGT} ${SRC}'
