1project('Cawbird', ['vala', 'c'],
2        version: '1.4.2',
3        default_options: [
4          'buildtype=debug'
5        ])
6
7prefix = get_option('prefix')
8localedir = join_paths(prefix, get_option('localedir'))
9
10gnome = import('gnome')
11srcdir = include_directories('src')
12
13# This is apparently bad practice, but it solves our "undefined reference to symbol 'floor@@GLIBC_2.2.5'" build problem
14cc = meson.get_compiler('c')
15libm = cc.find_library('m', required : false)
16oauth = cc.find_library('oauth', dirs : '/usr/local/lib', required : true)
17
18min_glib_version = '2.44'
19
20glib_dep = dependency('glib-2.0', version: '>=' + min_glib_version)
21gtk_dep  = dependency('gtk+-3.0', version: '>=3.22')
22rest_dep = dependency('rest-0.7')
23json_dep = dependency('json-glib-1.0')
24sql_dep  = dependency('sqlite3')
25soup_dep = dependency('libsoup-2.4')
26
27cb_deps = [
28  glib_dep,
29  gtk_dep,
30  rest_dep,
31  json_dep,
32  sql_dep,
33  soup_dep,
34  oauth,
35  libm
36]
37
38# Options
39enable_debug = get_option('buildtype') == 'debug' or get_option('buildtype') == 'debugoptimized'
40enable_video = get_option('video')
41enable_spellcheck = get_option('spellcheck')
42enable_examples = get_option('examples')
43enable_x11 = get_option('x11')
44use_windows_behaviour = get_option('mswindows')
45
46# Project arguments
47
48add_project_arguments('-DGETTEXT_PACKAGE="cawbird"', language: 'c')
49add_project_arguments('-DDATADIR="' + get_option('datadir') + '"', language: 'c')
50add_project_arguments('-DG_LOG_DOMAIN="cawbird"', language: 'c')
51add_project_arguments('--enable-deprecated', language: 'vala')
52
53if (enable_debug)
54  add_project_arguments('-DDEBUG', language: 'c')
55  add_project_arguments('-D', 'DEBUG', language: 'vala')
56endif
57
58if (enable_video)
59  add_project_arguments('-DVIDEO', language: 'c')
60  add_project_arguments('-D', 'VIDEO', language: 'vala')
61  cb_deps += [dependency('gstreamer-video-1.0', version: '>= 1.6')]
62endif
63
64if (enable_spellcheck)
65  add_project_arguments('-DSPELLCHECK', language: 'c')
66  add_project_arguments('-D', 'SPELLCHECK', language: 'vala')
67  cb_deps += [dependency('gspell-1', version: '>=1.0')]
68endif
69
70if (enable_x11)
71  add_project_arguments('-DX11', language: 'c')
72  add_project_arguments('-D', 'X11', language: 'vala')
73  cb_deps += [dependency('x11')]
74endif
75
76if (enable_debug)
77  warning('Debugging is enabled. Debug level logs will contain the full, plaintext content of ALL tweets and DMs.')
78endif
79
80if (use_windows_behaviour)
81  add_project_arguments('-D', 'MSWINDOWS', language: 'vala')
82endif
83
84
85cawbird_lib_sources = files([
86  'src/Account.vala',
87  'src/Cawbird.vala',
88  'src/ComposedTweet.vala',
89  'src/DMManager.vala',
90  'src/DMPage.vala',
91  'src/DMThreadsPage.vala',
92  'src/DefaultTimeline.vala',
93  'src/FavoritesTimeline.vala',
94  'src/FilterPage.vala',
95  'src/HomeTimeline.vala',
96  'src/IPage.vala',
97  'src/ListStatusesPage.vala',
98  'src/ListsPage.vala',
99  'src/MainWidget.vala',
100  'src/MainWindow.vala',
101  'src/MediaUpload.vala',
102  'src/MentionsTimeline.vala',
103  'src/NotificationManager.vala',
104  'src/OAuthProxyCallWithBody.vala',
105  'src/OAuthProxyCallWithQueryString.vala',
106  'src/ProfilePage.vala',
107  'src/SearchPage.vala',
108  'src/Settings.vala',
109  'src/TweetInfoPage.vala',
110  'src/Twitter.vala',
111  'src/UserEventReceiver.vala',
112  'src/async/Collect.vala',
113  'src/async/CollectById.vala',
114  'src/list/AddListEntry.vala',
115  'src/list/DMListEntry.vala',
116  'src/list/DMThreadEntry.vala',
117  'src/list/FilterListEntry.vala',
118  'src/list/ListListEntry.vala',
119  'src/list/NewListEntry.vala',
120  'src/list/SnippetListEntry.vala',
121  'src/list/StartConversationEntry.vala',
122  'src/list/TweetListEntry.vala',
123  'src/list/UserFilterEntry.vala',
124  'src/list/UserListEntry.vala',
125  'src/list/FavImageRow.vala',
126  'src/model/DMThreadsModel.vala',
127  'src/sql/Database.vala',
128  'src/sql/BaseStatement.vala',
129  'src/sql/DeleteStatement.vala',
130  'src/sql/InsertStatement.vala',
131  'src/sql/SelectStatement.vala',
132  'src/sql/UpdateStatement.vala',
133  'src/util/Benchmark.vala',
134  'src/util/Dirs.vala',
135  'src/util/ListUtils.vala',
136  'src/util/TweetUtils.vala',
137  'src/util/UserCompletion.vala',
138  'src/util/UserUtils.vala',
139  'src/util/Utils.vala',
140  'src/widgets/AccountCreateWidget.vala',
141  'src/widgets/AddImageButton.vala',
142  'src/widgets/AspectImage.vala',
143  'src/widgets/AvatarBannerWidget.vala',
144  'src/widgets/AvatarWidget.vala',
145  'src/widgets/BadgeRadioButton.vala',
146  'src/widgets/ChildSizedScroller.vala',
147  'src/widgets/CompletionTextView.vala',
148  'src/widgets/ComposeImageManager.vala',
149  'src/widgets/CropWidget.vala',
150  'src/widgets/DMPlaceholderBox.vala',
151  'src/widgets/DoubleTapButton.vala',
152  'src/widgets/FollowButton.vala',
153  'src/widgets/ImpostorWidget.vala',
154  'src/widgets/LazyMenuButton.vala',
155  'src/widgets/ListBox.vala',
156  'src/widgets/MediaButton.vala',
157  'src/widgets/MultiMediaWidget.vala',
158  'src/widgets/PixbufButton.vala',
159  'src/widgets/ResizableImage.vala',
160  'src/widgets/ReplyEntry.vala',
161  'src/widgets/ScrollWidget.vala',
162  'src/widgets/TextButton.vala',
163  'src/widgets/TweetListBox.vala',
164  'src/widgets/UserListsWidget.vala',
165  'src/widgets/FavImageView.vala',
166  'src/window/AboutDialog.vala',
167  'src/window/AccountDialog.vala',
168  'src/window/ComposeTweetWindow.vala',
169  'src/window/ImageDescriptionWindow.vala',
170  'src/window/MediaDialog.vala',
171  'src/window/ModifyFilterDialog.vala',
172  'src/window/ModifySnippetDialog.vala',
173  'src/window/SettingsDialog.vala',
174  'src/window/UserListDialog.vala',
175
176  # C Sources
177  'src/CbTweet.c',
178  'src/CbTextTransform.c',
179  'src/CbMedia.c',
180  'src/CbMediaDownloader.c',
181  'src/CbTypes.c',
182  'src/CbUserCounter.c',
183  'src/CbFilter.c',
184  'src/CbAvatarCache.c',
185  'src/CbMediaImageWidget.c',
186  'src/CbTweetModel.c',
187  'src/CbTwitterItem.c',
188  'src/CbDeltaUpdater.c',
189  'src/CbUtils.c',
190  'src/CbBundle.c',
191  'src/CbBundleHistory.c',
192  'src/CbSnippetManager.c',
193  'src/CbSurfaceProgress.c',
194  'src/CbMediaVideoWidget.c',
195  'src/CbUserStream.c',
196  'src/CbMessageReceiver.c',
197  'src/CbUserCompletionModel.c',
198  'src/CbEmojiChooser.c',
199
200  # libtweetlength sources (TODO: Should be a meson subproject)
201  # https://github.com/baedert/libtweetlength
202  'src/libtl/libtweetlength.c',
203
204  # Vapi files
205  'vapi/cawbird-internal.vapi',
206  'vapi/libtl.vapi'
207])
208
209# glib resources
210cb_resources = gnome.compile_resources(
211  'cawbird_resources',
212  'cawbird.gresource.xml',
213)
214
215# config.h
216consumer_key = get_option('consumer_key_base64')
217consumer_secret = get_option('consumer_secret_base64')
218assert(consumer_key != '' and consumer_secret != '', 'Must specify `consumer_key_base64` and `consumer_secret_base64`')
219cdata = configuration_data()
220if get_option('localtextdomain')
221  cdata.set('LOCALEDIR', 'NULL')
222else
223  cdata.set_quoted ('LOCALEDIR', localedir)
224endif
225cdata.set_quoted ('GETTEXT_PACKAGE', 'cawbird')
226cdata.set_quoted ('CONSUMER_KEY', consumer_key)
227cdata.set_quoted ('CONSUMER_SECRET', consumer_secret)
228configure_file(
229  #input : 'config.h.meson',
230  output: 'config.h',
231  configuration: cdata
232)
233
234# library (for unit tests)
235cb_lib = static_library(
236  'cawbird',
237  cawbird_lib_sources,
238  dependencies: cb_deps,
239  include_directories: [srcdir],
240  vala_args: [
241    meson.source_root() + '/vapi/config.vapi',
242    '--target-glib=' + min_glib_version,
243    '--vapidir=' + meson.source_root() + '/vapi/',
244    '--gresources=' + meson.source_root() + '/cawbird.gresource.xml',
245  ],
246  c_args: [
247    '-Werror=implicit-function-declaration'
248  ]
249)
250cb_dep = declare_dependency(
251  link_with: cb_lib,
252  dependencies: cb_deps,
253  include_directories: [srcdir],
254)
255
256
257# actual executable
258executable(
259  'cawbird',
260  'src/main.vala',
261  cb_resources,
262  dependencies: cb_dep,
263  include_directories: srcdir,
264  vala_args: [
265    meson.source_root() + '/vapi/config.vapi',
266    meson.source_root() + '/vapi/cawbird-internal.vapi',
267    meson.source_root() + '/vapi/libtl.vapi',
268  ],
269  install: true
270)
271
272subdir('data')
273subdir('po')
274subdir('tests')
275if enable_examples
276  subdir('examples')
277endif
278