blob: 56074a5913c3a347369beed72a1dfd98d57af5d4 [file] [log] [blame]
Alexander Afanasyevb4b92292013-07-09 13:54:59 -07001# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
Alexander Afanasyev46c7f842013-11-07 23:28:10 -08002VERSION='0.4'
Yingdi Yud681e212013-11-07 11:36:50 -08003APPNAME='ChronoChat'
Alexander Afanasyevb4b92292013-07-09 13:54:59 -07004
Yingdi Yue35bdb82013-11-07 11:32:40 -08005from waflib import Configure, Utils
Yingdi Yu847aa862013-10-09 16:35:53 -07006
Alexander Afanasyevb4b92292013-07-09 13:54:59 -07007def options(opt):
Yingdi Yue35bdb82013-11-07 11:32:40 -08008 opt.add_option('--debug',action='store_true',default=False,dest='debug',help='''debugging mode''')
Alexander Afanasyev46c7f842013-11-07 23:28:10 -08009 opt.add_option('--log4cxx',action='store_true',default=False,dest='log4cxx',help='''Enable log4cxx''')
Yingdi Yue35bdb82013-11-07 11:32:40 -080010
Alexander Afanasyevb4b92292013-07-09 13:54:59 -070011 opt.load('compiler_c compiler_cxx boost protoc qt4')
Yingdi Yud04ed1a2013-10-14 14:07:03 -070012
Yingdi Yue370a2a2013-11-10 17:39:36 -080013 if Utils.unversioned_sys_platform () != "darwin":
14 opt.load('gnu_dirs');
15
Yingdi Yu382bcb92013-11-07 11:44:39 -080016 # opt.load('tinyxml', tooldir=['waf-tools'])
Yingdi Yub2e747d2013-11-05 23:06:43 -080017 opt.load('cryptopp', tooldir=['waf-tools'])
Yingdi Yua43601f2014-05-09 14:29:16 -070018
Alexander Afanasyevb4b92292013-07-09 13:54:59 -070019def configure(conf):
Yingdi Yu382bcb92013-11-07 11:44:39 -080020 conf.load("compiler_c compiler_cxx boost protoc qt4 cryptopp")
Alexander Afanasyevb4b92292013-07-09 13:54:59 -070021
Yingdi Yue370a2a2013-11-10 17:39:36 -080022 if Utils.unversioned_sys_platform () != "darwin":
23 conf.load('gnu_dirs');
24
Yingdi Yue35bdb82013-11-07 11:32:40 -080025 if conf.options.debug:
26 conf.define ('_DEBUG', 1)
Alexander Afanasyev4a979312013-11-07 15:30:05 -080027 conf.env.DEBUG = 1
Yingdi Yue35bdb82013-11-07 11:32:40 -080028 conf.add_supported_cxxflags (cxxflags = ['-O0',
29 '-Wall',
30 '-Wno-unused-variable',
31 '-g3',
32 '-Wno-unused-private-field', # only clang supports
33 '-fcolor-diagnostics', # only clang supports
34 '-Qunused-arguments', # only clang supports
35 ])
36 else:
37 conf.add_supported_cxxflags (cxxflags = ['-O3', '-g', '-Wno-tautological-compare', '-Wno-unused-function'])
38
Yingdi Yu4390ce52013-10-10 17:27:54 -070039 conf.check_cfg(package='libndn.cxx', args=['--cflags', '--libs'], uselib_store='NDNCXX', mandatory=True)
40 conf.check_cfg(package='sqlite3', args=['--cflags', '--libs'], uselib_store='SQLITE3', mandatory=True)
Alexander Afanasyev4a979312013-11-07 15:30:05 -080041 if conf.options.log4cxx:
42 conf.check_cfg(package='liblog4cxx', args=['--cflags', '--libs'], uselib_store='LOG4CXX', mandatory=True)
Yingdi Yub2e747d2013-11-05 23:06:43 -080043 conf.check_cfg (package='ChronoSync', args=['ChronoSync >= 0.1', '--cflags', '--libs'], uselib_store='SYNC', mandatory=True)
Yingdi Yu4390ce52013-10-10 17:27:54 -070044
Yingdi Yue370a2a2013-11-10 17:39:36 -080045 conf.check_cryptopp(path=conf.options.cryptopp_dir)
46
Yingdi Yud04ed1a2013-10-14 14:07:03 -070047 conf.check_boost(lib='system random thread filesystem')
Yingdi Yu847aa862013-10-09 16:35:53 -070048
49 conf.write_config_header('config.h')
50
51
52def build (bld):
53 qt = bld (
Yingdi Yud681e212013-11-07 11:36:50 -080054 target = "ChronoChat",
Yingdi Yu847aa862013-10-09 16:35:53 -070055 features = "qt4 cxx cxxprogram",
56 defines = "WAF",
Yingdi Yuc5020b92013-11-07 17:00:35 -080057 source = bld.path.ant_glob(['src/*.cpp', 'src/*.ui', '*.qrc', 'logging.cc', 'src/*.proto']),
Alexander Afanasyev4a979312013-11-07 15:30:05 -080058 includes = "src .",
Alexander Afanasyev46c7f842013-11-07 23:28:10 -080059 use = "QTCORE QTGUI QTWIDGETS QTSQL SQLITE3 NDNCXX BOOST BOOST_FILESYSTEM LOG4CXX CRYPTOPP SYNC",
Yingdi Yu92e8e482013-10-17 21:13:03 -070060 )
61
Alexander Afanasyev4a979312013-11-07 15:30:05 -080062 # if bld.env['DEBUG']:
63 # cert_publish = bld (
64 # target = "CertPublish",
65 # features = "cxx cxxprogram",
66 # defines = "WAF",
67 # source = bld.path.ant_glob(['tmp/cert-publish.cpp']),
68 # includes = ". src",
69 # use = "SQLITE3 NDNCXX BOOST BOOST_FILESYSTEM LOG4CXX",
70 # )
Yingdi Yu847aa862013-10-09 16:35:53 -070071
Yingdi Yue35bdb82013-11-07 11:32:40 -080072 if Utils.unversioned_sys_platform () == "darwin":
73 app_plist = '''<?xml version="1.0" encoding="UTF-8"?>
74<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
75<plist version="0.9">
76<dict>
77 <key>CFBundlePackageType</key>
78 <string>APPL</string>
79 <key>CFBundleIconFile</key>
80 <string>demo.icns</string>
81 <key>CFBundleGetInfoString</key>
82 <string>Created by Waf</string>
83 <key>CFBundleIdentifier</key>
Yingdi Yud681e212013-11-07 11:36:50 -080084 <string>edu.ucla.cs.irl.ChronoChat</string>
Yingdi Yue35bdb82013-11-07 11:32:40 -080085 <key>CFBundleSignature</key>
86 <string>????</string>
87 <key>NOTE</key>
88 <string>THIS IS A GENERATED FILE, DO NOT MODIFY</string>
89 <key>CFBundleExecutable</key>
90 <string>%s</string>
Yingdi Yue35bdb82013-11-07 11:32:40 -080091 <key>SUPublicDSAKeyFile</key>
92 <string>dsa_pub.pem</string>
93 <key>CFBundleIconFile</key>
94 <string>demo.icns</string>
95</dict>
96</plist>'''
97
Alexander Afanasyev4a979312013-11-07 15:30:05 -080098 # <key>LSUIElement</key>
99 # <string>1</string>
100
Yingdi Yud681e212013-11-07 11:36:50 -0800101 qt.mac_app = "ChronoChat.app"
102 qt.mac_plist = app_plist % "ChronoChat"
Yingdi Yue35bdb82013-11-07 11:32:40 -0800103 qt.mac_resources = 'demo.icns'
Yingdi Yue370a2a2013-11-10 17:39:36 -0800104 else:
105 bld (features = "subst",
106 source = 'linux/chronochat.desktop.in',
107 target = 'linux/chronochat.desktop',
108 BINARY = "ChronoChat",
109 install_path = "${DATAROOTDIR}/applications"
110 )
111 bld.install_files("${DATAROOTDIR}/chronochat",
112 bld.path.ant_glob(['linux/Resources/*']))
Yingdi Yue35bdb82013-11-07 11:32:40 -0800113
114
115from waflib import TaskGen
116@TaskGen.extension('.mm')
117def m_hook(self, node):
118 """Alias .mm files to be compiled the same as .cc files, gcc/clang will do the right thing."""
119 return self.create_compiled_task('cxx', node)
Yingdi Yu847aa862013-10-09 16:35:53 -0700120
121@Configure.conf
122def add_supported_cxxflags(self, cxxflags):
123 """
124 Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
125 """
126 self.start_msg('Checking allowed flags for c++ compiler')
127
128 supportedFlags = []
129 for flag in cxxflags:
130 if self.check_cxx (cxxflags=[flag], mandatory=False):
131 supportedFlags += [flag]
132
133 self.end_msg (' '.join (supportedFlags))
134 self.env.CXXFLAGS += supportedFlags