blob: 9b48e6d0fc86da0ea8a4988b80e416475500fb34 [file] [log] [blame]
Yingdi Yu767d2ac2013-10-09 15:16:11 -07001# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
Yingdi Yuaada52d2013-11-07 11:36:50 -08002VERSION='1.0'
3APPNAME='ChronoChat'
Yingdi Yu767d2ac2013-10-09 15:16:11 -07004
Yingdi Yub35b8652013-11-07 11:32:40 -08005from waflib import Configure, Utils
Yingdi Yu614db142013-10-09 16:35:53 -07006
Yingdi Yu767d2ac2013-10-09 15:16:11 -07007def options(opt):
Yingdi Yub35b8652013-11-07 11:32:40 -08008 opt.add_option('--debug',action='store_true',default=False,dest='debug',help='''debugging mode''')
Alexander Afanasyev4f04c552013-11-07 15:30:05 -08009 opt.add_option('--no-log4cxx',action='store_false',default=True,dest='log4cxx',help='''Disable log4cxx''')
Yingdi Yub35b8652013-11-07 11:32:40 -080010
Yingdi Yu767d2ac2013-10-09 15:16:11 -070011 opt.load('compiler_c compiler_cxx boost protoc qt4')
Yingdi Yuede8eaf2013-10-14 14:07:03 -070012
Yingdi Yucf8a3352013-11-07 11:44:39 -080013 # opt.load('tinyxml', tooldir=['waf-tools'])
Yingdi Yu8dacdf22013-11-05 23:06:43 -080014 opt.load('cryptopp', tooldir=['waf-tools'])
Yingdi Yu767d2ac2013-10-09 15:16:11 -070015
16def configure(conf):
Yingdi Yucf8a3352013-11-07 11:44:39 -080017 conf.load("compiler_c compiler_cxx boost protoc qt4 cryptopp")
Yingdi Yu767d2ac2013-10-09 15:16:11 -070018
Yingdi Yub35b8652013-11-07 11:32:40 -080019 if conf.options.debug:
20 conf.define ('_DEBUG', 1)
Alexander Afanasyev4f04c552013-11-07 15:30:05 -080021 conf.env.DEBUG = 1
Yingdi Yub35b8652013-11-07 11:32:40 -080022 conf.add_supported_cxxflags (cxxflags = ['-O0',
23 '-Wall',
24 '-Wno-unused-variable',
25 '-g3',
26 '-Wno-unused-private-field', # only clang supports
27 '-fcolor-diagnostics', # only clang supports
28 '-Qunused-arguments', # only clang supports
29 ])
30 else:
31 conf.add_supported_cxxflags (cxxflags = ['-O3', '-g', '-Wno-tautological-compare', '-Wno-unused-function'])
32
Yingdi Yucf8a3352013-11-07 11:44:39 -080033 # conf.check_tinyxml(path=conf.options.tinyxml_dir)
Yingdi Yuad56f1c2013-10-10 17:27:54 -070034 conf.check_cfg(package='libndn.cxx', args=['--cflags', '--libs'], uselib_store='NDNCXX', mandatory=True)
35 conf.check_cfg(package='sqlite3', args=['--cflags', '--libs'], uselib_store='SQLITE3', mandatory=True)
Alexander Afanasyev4f04c552013-11-07 15:30:05 -080036 if conf.options.log4cxx:
37 conf.check_cfg(package='liblog4cxx', args=['--cflags', '--libs'], uselib_store='LOG4CXX', mandatory=True)
Yingdi Yu8dacdf22013-11-05 23:06:43 -080038 conf.check_cfg (package='ChronoSync', args=['ChronoSync >= 0.1', '--cflags', '--libs'], uselib_store='SYNC', mandatory=True)
Yingdi Yuad56f1c2013-10-10 17:27:54 -070039
Yingdi Yuede8eaf2013-10-14 14:07:03 -070040 conf.check_boost(lib='system random thread filesystem')
Yingdi Yu614db142013-10-09 16:35:53 -070041
42 conf.write_config_header('config.h')
43
44
45def build (bld):
46 qt = bld (
Yingdi Yuaada52d2013-11-07 11:36:50 -080047 target = "ChronoChat",
Yingdi Yu614db142013-10-09 16:35:53 -070048 features = "qt4 cxx cxxprogram",
49 defines = "WAF",
Yingdi Yu8dacdf22013-11-05 23:06:43 -080050 source = bld.path.ant_glob(['src/*.cpp', 'src/*.ui', 'logging.cc', 'src/*.proto']),
Alexander Afanasyev4f04c552013-11-07 15:30:05 -080051 includes = "src .",
Yingdi Yucf8a3352013-11-07 11:44:39 -080052 use = "QTCORE QTGUI QTSQL SQLITE3 NDNCXX BOOST BOOST_FILESYSTEM LOG4CXX CRYPTOPP SYNC",
Yingdi Yu68aced92013-10-17 21:13:03 -070053 )
54
Alexander Afanasyev4f04c552013-11-07 15:30:05 -080055 # if bld.env['DEBUG']:
56 # cert_publish = bld (
57 # target = "CertPublish",
58 # features = "cxx cxxprogram",
59 # defines = "WAF",
60 # source = bld.path.ant_glob(['tmp/cert-publish.cpp']),
61 # includes = ". src",
62 # use = "SQLITE3 NDNCXX BOOST BOOST_FILESYSTEM LOG4CXX",
63 # )
Yingdi Yu614db142013-10-09 16:35:53 -070064
Yingdi Yub35b8652013-11-07 11:32:40 -080065 if Utils.unversioned_sys_platform () == "darwin":
66 app_plist = '''<?xml version="1.0" encoding="UTF-8"?>
67<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
68<plist version="0.9">
69<dict>
70 <key>CFBundlePackageType</key>
71 <string>APPL</string>
72 <key>CFBundleIconFile</key>
73 <string>demo.icns</string>
74 <key>CFBundleGetInfoString</key>
75 <string>Created by Waf</string>
76 <key>CFBundleIdentifier</key>
Yingdi Yuaada52d2013-11-07 11:36:50 -080077 <string>edu.ucla.cs.irl.ChronoChat</string>
Yingdi Yub35b8652013-11-07 11:32:40 -080078 <key>CFBundleSignature</key>
79 <string>????</string>
80 <key>NOTE</key>
81 <string>THIS IS A GENERATED FILE, DO NOT MODIFY</string>
82 <key>CFBundleExecutable</key>
83 <string>%s</string>
Yingdi Yub35b8652013-11-07 11:32:40 -080084 <key>SUPublicDSAKeyFile</key>
85 <string>dsa_pub.pem</string>
86 <key>CFBundleIconFile</key>
87 <string>demo.icns</string>
88</dict>
89</plist>'''
90
Alexander Afanasyev4f04c552013-11-07 15:30:05 -080091 # <key>LSUIElement</key>
92 # <string>1</string>
93
Yingdi Yuaada52d2013-11-07 11:36:50 -080094 qt.mac_app = "ChronoChat.app"
95 qt.mac_plist = app_plist % "ChronoChat"
Yingdi Yub35b8652013-11-07 11:32:40 -080096 qt.mac_resources = 'demo.icns'
97
98
99from waflib import TaskGen
100@TaskGen.extension('.mm')
101def m_hook(self, node):
102 """Alias .mm files to be compiled the same as .cc files, gcc/clang will do the right thing."""
103 return self.create_compiled_task('cxx', node)
Yingdi Yu614db142013-10-09 16:35:53 -0700104
105@Configure.conf
106def add_supported_cxxflags(self, cxxflags):
107 """
108 Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
109 """
110 self.start_msg('Checking allowed flags for c++ compiler')
111
112 supportedFlags = []
113 for flag in cxxflags:
114 if self.check_cxx (cxxflags=[flag], mandatory=False):
115 supportedFlags += [flag]
116
117 self.end_msg (' '.join (supportedFlags))
118 self.env.CXXFLAGS += supportedFlags