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