Merge heads.
[pidgin-git.git] / meson.build
blob72aff721cf4c9171eb48c944e04e15079646ad33
1 # UPDATING VERSION NUMBERS FOR RELEASES
3 # The version number is:
4 #   <major>.<minor>.<micro><suffix>
6 # micro += 1
8 # If any functions have been added to libpurple, Pidgin, or Finch:
9 #   micro = 0
10 #   minor += 1
12 # If backwards compatibility has been broken in libpurple, Pidgin, or Finch:
13 #   micro = 0
14 #   minor = 0
15 #   major += 1
16 #   purple_soversion += 1
18 # suffix should be similar to one of the following:
19 #   For beta releases:          '-beta2'
20 #   For code under development: '-devel'
21 #   For production releases:    ''
23 project('pidgin', 'c',
24     version : '3.0.0-devel',
25     meson_version : '>=0.47.0')
26 purple_soversion = 20
28 parts = meson.project_version().split('-')
29 if parts.length() > 1
30   purple_version_suffix = parts[1]
31 else
32   purple_version_suffix = ''
33 endif
35 parts = parts[0].split('.')
36 purple_major_version = parts[0]
37 purple_minor_version = parts[1]
38 purple_micro_version = parts[2]
40 add_project_arguments('-DHAVE_CONFIG_H=1', language : 'c')
41 conf = configuration_data()
42 man_conf = configuration_data()
43 version_conf = configuration_data()
45 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
46 conf.set_quoted('PACKAGE', meson.project_name())
47 conf.set_quoted('PACKAGE_NAME', meson.project_name())
48 conf.set_quoted('VERSION', meson.project_version())
50 version_conf.set('PURPLE_MAJOR_VERSION', purple_major_version)
51 version_conf.set('PURPLE_MINOR_VERSION', purple_minor_version)
52 version_conf.set('PURPLE_MICRO_VERSION', purple_micro_version)
53 version_conf.set('PURPLE_VERSION', meson.project_version())
54 version_conf.set('PURPLE_API_VERSION', purple_soversion)
56 PURPLE_LIB_VERSION = '@0@.@1@.@2@'.format(purple_soversion,
57                                           purple_minor_version,
58                                           purple_micro_version)
60 package_revision = vcs_tag(
61     input : 'package_revision.h.in',
62     output : 'package_revision.h',
63     fallback : meson.project_version())
65 # For man pages.
66 man_conf.set('VERSION', meson.project_version())
67 man_conf.set('prefix', get_option('prefix'))
69 # Used for pkg-config files.
70 pkgconfig = import('pkgconfig')
72 sedpath = find_program('sed')
74 # Storing build arguments
75 meson.add_postconf_script('mkmesonconf.py')
76 conf.set('HAVE_MESON_CONFIG', true)
78 # Checks for programs.
79 compiler = meson.get_compiler('c')
81 # Check for Sun compiler
82 SUNCC = compiler.compiles('void main() {__SUNPRO_C;};')
84 # Check for Win32
85 if host_machine.system() == 'windows'
86         windows = import('windows')
88         IS_WIN32 = true
89         ws2_32 = compiler.find_library('ws2_32')
90         dnsapi = compiler.find_library('dnsapi')
91         if build_machine.system() != 'windows'
92                 conf.set('IS_WIN32_CROSS_COMPILED', true)
93         endif
94         conf.set('WIN32_LEAN_AND_MEAN', true)
96         conf.set('LIBPIDGIN_DLL_NAMEW',
97             'L"libpidgin-@0@.dll"'.format(purple_soversion))
98 else
99         IS_WIN32 = false
100         ws2_32 = []
101         dnsapi = []
102 endif
104 # Checks for header files.
105 # AC_HEADER_SYS_WAIT:
106 conf.set('HAVE_SYS_WAIT_H', compiler.has_header('sys/wait.h'))
108 foreach h : ['fcntl.h', 'unistd.h', 'stdint.h']
109         if compiler.has_header(h)
110                 conf.set('HAVE_' + h.to_upper().underscorify(), true)
111         else
112                 error(h + ' is required.')
113         endif
114 endforeach
116 # Checks for typedefs, structures, and compiler characteristics.
117 time_t_size = compiler.sizeof('time_t',
118     prefix : '''
119 #include <stdio.h>
120 #include <time.h>
121 ''')
122 conf.set('SIZEOF_TIME_T', time_t_size)
124 conf.set('WORDS_BIGENDIAN', host_machine.endian() != 'little')
126 # Check for directories
127 if IS_WIN32
128         foreach dir : ['bin', 'lib', 'data', 'sysconf', 'locale']
129                 path = join_paths(get_option('prefix'), get_option(dir + 'dir'))
130                 conf.set_quoted('WIN32_FHS_@0@DIR'.format(dir.to_upper()), path)
131         endforeach
133         conf.set('PURPLE_LIBDIR',
134                  'wpurple_lib_dir("purple-@0@")'.format(purple_major_version))
135         conf.set('PIDGIN_LIBDIR',
136                  'wpurple_lib_dir("pidgin-@0@")'.format(purple_major_version))
137         conf.set('FINCH_LIBDIR',
138                  'wpurple_lib_dir("finch-@0@")'.format(purple_major_version))
140         conf.set('PURPLE_DATADIR', 'wpurple_data_dir()')
141         conf.set('PURPLE_SYSCONFDIR', 'wpurple_sysconf_dir()')
142         conf.set('PURPLE_LOCALEDIR', 'wpurple_locale_dir()')
143 else
144         foreach dir : ['data', 'sysconf', 'locale']
145                 path = join_paths(get_option('prefix'), get_option(dir + 'dir'))
146                 conf.set_quoted('PURPLE_@0@DIR'.format(dir.to_upper()), path)
147         endforeach
149         common_libdir = join_paths(get_option('prefix'), get_option('libdir'))
150         conf.set_quoted('PURPLE_LIBDIR',
151                         join_paths(common_libdir,
152                                    'purple-@0@'.format(purple_major_version)))
153         conf.set_quoted('PIDGIN_LIBDIR',
154                         join_paths(common_libdir,
155                                    'pidgin-@0@'.format(purple_major_version)))
156         conf.set_quoted('FINCH_LIBDIR',
157                         join_paths(common_libdir,
158                                    'finch-@0@'.format(purple_major_version)))
159 endif
161 abslibdir = join_paths(get_option('prefix'), get_option('libdir'))
162 PURPLE_PLUGINDIR = join_paths(abslibdir, 'purple-@0@'.format(purple_major_version))
163 conf.set_quoted('PURPLE_PLUGINDIR', PURPLE_PLUGINDIR)
164 PIDGIN_PLUGINDIR = join_paths(abslibdir, 'pidgin-@0@'.format(purple_major_version))
165 conf.set_quoted('PIDGIN_PLUGINDIR', PIDGIN_PLUGINDIR)
166 FINCH_PLUGINDIR = join_paths(abslibdir, 'finch-@0@'.format(purple_major_version))
167 conf.set_quoted('FINCH_PLUGINDIR', FINCH_PLUGINDIR)
169 # Check for inet_aton
170 if not IS_WIN32
171         if not compiler.has_function('inet_aton')
172                 if not compiler.has_function('inet_aton', args : '-lresolv')
173                         # FIXME: Someone needs to link with -lresolv if needed.
174                         error('inet_aton not found')
175                 endif
176         endif
177 endif
178 if compiler.has_function('gethostent', args : '-lnsl')
179         conf.set('HAVE_LIBNSL', true)
180 endif
181 if IS_WIN32
182         conf.set('HAVE_GETADDRINFO', true)
183         conf.set('HAVE_INET_NTOP', true)
184 else
185         if not compiler.has_function('socket')
186                 if not compiler.has_function('socket', args : '-lsocket')
187                         error('socket not found')
188                 endif
189         endif
190         # If all goes well, by this point the previous two checks will have
191         # pulled in -lsocket and -lnsl if we need them.
192         if compiler.has_function('getaddrinfo')
193                 conf.set('HAVE_GETADDRINFO', true)
194         else
195                 if compiler.has_function('getaddrinfo', args : '-lsocket -lnsl')
196                         conf.set('HAVE_GETADDRINFO', true)
197                         # FIXME: LIBS += declare_dependency(link_with : ['socket', 'nsl'])
198                 endif
199         endif
200         conf.set('HAVE_INET_NTOP',
201             compiler.has_function('inet_ntop'))
202 endif
203 conf.set('HAVE_GETIFADDRS',
204     compiler.has_function('getifaddrs'))
206 # Check for socklen_t (in Unix98)
207 if IS_WIN32
208         socket_header = 'ws2tcpip.h'
209 else
210         socket_header = 'sys/socket.h'
211 endif
212 if not compiler.has_header_symbol(socket_header, 'socklen_t')
213         code = '''
214 #include <sys/types.h>
215 #include <@0@>
216 int accept(int, struct sockaddr *, size_t *);
217 int main() {}
218 '''.format(socket_header)
219         if compiler.compiles(code, name : 'socklen_t is size_t')
220                 conf.set('socklen_t', 'size_t')
221         else
222                 conf.set('socklen_t', 'int')
223         endif
224 endif
226 # Some systems do not have sa_len field for struct sockaddr.
227 conf.set('HAVE_STRUCT_SOCKADDR_SA_LEN',
228     compiler.has_member('struct sockaddr', 'sa_len',
229         prefix : '#include <@0@>'.format(socket_header)))
231 # Check for v6-only sockets
232 if IS_WIN32
233         header = 'ws2tcpip.h'
234 else
235         header = 'netinet/in.h'
236 endif
237 conf.set('HAVE_IPV6_V6ONLY',
238     compiler.has_header_symbol(header, 'IPV6_V6ONLY'))
240 # Windows and Haiku do not use libm for the math functions, they are part
241 # of the C library
242 math = compiler.find_library('m')
244 # before gettexting, in case iconv matters
245 IOKIT = []
246 if host_machine.system() == 'darwin'
247         if compiler.has_header('CoreFoundation/CoreFoundation.h')
248                 if compiler.has_header('IOKit/IOKitLib.h')
249                         conf.set('HAVE_IOKIT', true)
250                         IOKIT = dependency('appleframeworks',
251                                            modules : ['IOKit', 'CoreFoundation'])
252                 endif
253         endif
255         if run_command('test', '-d', '/sw').returncode() == 0
256                 # FIXME: Not done...
257                 #CPPFLAGS="$CPPFLAGS -I/sw/include"
258                 #LDFLAGS="$LDFLAGS -L/sw/lib"
259         endif
260 endif
262 # #######################################################################
263 # # Disable creation and installation of translation files
264 # #######################################################################
266 INSTALL_I18N = get_option('nls')
268 if INSTALL_I18N
269         i18n = import('i18n')
271         subdir('po')
272 endif
274 # #######################################################################
275 # # Check for GLib 2.44 (required)
276 # #######################################################################
277 glib = dependency('glib-2.0', version : '>= 2.44.0')
278 gio = dependency('gio-2.0')
279 gobject = dependency('gobject-2.0')
280 gthread = dependency('gthread-2.0')
281 gnome = import('gnome')
283 if get_option('extraversion') != ''
284         DISPLAY_VERSION = '@0@-@1@'.format(meson.project_version(),
285                                            get_option('extraversion'))
286 else
287         DISPLAY_VERSION = meson.project_version()
288 endif
289 conf.set_quoted('DISPLAY_VERSION', DISPLAY_VERSION)
291 #######################################################################
292 # Check for GObject Introspection
293 #######################################################################
295 enable_introspection = dependency('gobject-introspection-1.0', version : '>= 1.30.0',
296                                   required : get_option('introspection')).found()
297 conf.set('ENABLE_INTROSPECTION', enable_introspection)
299 # #######################################################################
300 # # Check for GTK+ 2.18 and other things used by the GTK UI
301 # #######################################################################
302 # #######################################################################
303 # Check Pidgin dependencies
304 # #######################################################################
305 if get_option('gtkui')
306         gtk = dependency('gtk+-3.0', version : '>= 3.20.0')
308         talkatu_dep = dependency('talkatu', version: '>=0.1.0', required : false)
309         if talkatu_dep.found()
310                 talkatu_gir = 'Talkatu-0.0'
311                 if get_option('introspection')
312                         talkatu_include_directories = include_directories(
313                             join_paths(talkatu_dep.get_pkgconfig_variable('prefix'),
314                                        'share/gir-1.0'))
315                 else
316                         talkatu_include_directories = []
317                 endif
318         else
319                 talkatu_proj = subproject('talkatu',
320                     default_options : [
321                         'doc=' + get_option('doc').to_string(),
322                         'gobject-introspection=' + enable_introspection.to_string(),
323                         'nls=' + get_option('nls').to_string(),
324                     ]
325                 )
326                 talkatu_dep = talkatu_proj.get_variable('talkatu_dep')
327                 talkatu_gir = talkatu_proj.get_variable('talkatu_gir')[0]
328                 talkatu_include_directories = []
329         endif
330 endif   # GTK
332 ENABLE_GTK = get_option('gtkui')
335 #######################################################################
336 # Check if we should compile with X support
337 #######################################################################
338 if IS_WIN32
339         x11 = disabler()
340 else
341         x11 = dependency('x11', required : get_option('x'))
342 endif
343 conf.set('HAVE_X11', x11.found())
345 enable_gestures = get_option('gestures')
346 if not get_option('gtkui') or not x11.found()
347         enable_gestures = false
348 endif
350 #######################################################################
351 # Check for LibXML2 (required)
352 #######################################################################
353 libxml = dependency('libxml-2.0', version : '>= 2.6.0')
354 if libxml.version().version_compare('<2.6.18')
355         message('Versions of libxml2 < 2.6.18 may contain bugs that could cause XMPP messages to be discarded.')
356 endif
358 #######################################################################
359 # Check for JSON-GLib (required)
360 #######################################################################
362 json = dependency('json-glib-1.0', version : '>= 0.14.0')
364 #######################################################################
365 # Check for libsoup (required)
366 #######################################################################
368 libsoup = dependency('libsoup-2.4', version : '>= 2.42')
370 #######################################################################
371 # Check for GStreamer
372 #######################################################################
374 gstreamer = dependency('gstreamer-1.0', required : get_option('gstreamer'))
375 conf.set('USE_GSTREAMER', gstreamer.found())
377 #######################################################################
378 # Check for GStreamer Video
379 #######################################################################
380 if gstreamer.found()
381         gstreamer_video = dependency('gstreamer-video-1.0',
382                                      required : get_option('gstreamer-video'))
383         conf.set('USE_GSTVIDEO', gstreamer_video.found())
384 else
385         gstreamer_video = disabler()
386 endif
388 #######################################################################
389 # Check for Farstream
390 #######################################################################
391 farstream = dependency('farstream-0.2', version : '>= 0.2.7',
392                        required : get_option('farstream'))
394 #######################################################################
395 # Check for Voice and Video support
396 #######################################################################
397 if get_option('vv').enabled() or get_option('vv').auto()
398         if gstreamer.found() and gstreamer_video.found() and farstream.found()
399                 conf.set('USE_VV', true)
400                 enable_vv = true
401         else
402                 if get_option('vv').enabled()
403                         error('''
404 Dependencies for voice/video were not met.
405 Install the necessary gstreamer and farstream packages first.
406 Or use -Dvv=disabled if you do not need voice/video support.
407                         ''')
408                 endif
409                 enable_vv = false
410         endif
411 else
412         enable_vv = false
413 endif
415 #######################################################################
416 # Check for Raw data streams support in Farstream
417 #######################################################################
418 if enable_vv
419         gstreamer_app = dependency('gstreamer-app-1.0',
420                                    required : false)
421         if gstreamer_app.found()
422                 conf.set('USE_GSTAPP', true)
423                 conf.set('HAVE_MEDIA_APPLICATION', true)
424         endif
425 else
426         gstreamer_app = []
427 endif
429 #######################################################################
430 # Check for Meanwhile headers (for Sametime)
431 #######################################################################
432 meanwhile = dependency('meanwhile', version : ['>= 1.0.0', '< 2.0.0'], required : get_option('meanwhile'))
433 gmime = dependency('gmime-3.0', version : '>= 3.0.0', required : get_option('meanwhile'))
434 enable_meanwhile = meanwhile.found() and gmime.found()
436 #######################################################################
437 # Check for Native Avahi headers (for Bonjour)
438 #######################################################################
440 if IS_WIN32
441         # Just keep enabled.
442         enable_avahi = get_option('avahi').enabled() or get_option('avahi').auto()
443         avahi = []
444 else
445         # Attempt to autodetect Avahi
446         avahi_client = dependency('avahi-client', required : get_option('avahi'))
447         avahi_glib = dependency('avahi-glib', required : get_option('avahi'))
448         avahi = [avahi_client, avahi_glib]
449         enable_avahi = avahi_client.found() and avahi_glib.found()
450 endif
453 #######################################################################
454 # Check for SILC client includes and libraries
455 #######################################################################
456 silc = dependency('silcclient', version : '>= 1.1', required : get_option('silc'))
458 #######################################################################
459 # Check for Gadu-Gadu protocol library (libgadu)
460 #######################################################################
462 libgadu = dependency('libgadu', version : '>= 1.12.0', required : get_option('libgadu'))
464 if libgadu.found()
465         if not compiler.has_function('gg_is_gpl_compliant', dependencies : libgadu)
466                 if get_option('libgadu').auto()
467                         libgadu = disabler()
468                 else
469                         message('''
470 libgadu is not compatible with the GPL when compiled with OpenSSL support.
472 To link against libgadu, please recompile it using:
473 ./configure --with-openssl=no
474 Then rerun this Meson build
475                         ''')
476                 endif
477         endif
478 endif
481 DEFAULT_PRPLS = ['bonjour', 'facebook', 'gg', 'irc', 'jabber', 'novell',
482                  'null', 'oscar', 'sametime', 'silc', 'simple', 'zephyr']
483 ALL_PRPLS = DEFAULT_PRPLS + ['null']
485 dynamic_list = get_option('dynamic-prpls').split(',')
486 if dynamic_list == ['all']
487         dynamic_list = DEFAULT_PRPLS
488 endif
489 DYNAMIC_PRPLS = []
490 foreach prpl : dynamic_list
491         if prpl == ''
492                 # The list was empty; do nothing.
493         elif prpl == 'sametime' and not enable_meanwhile
494                 # Do nothing.
495         elif prpl == 'bonjour' and not enable_avahi
496                 # Do nothing.
497         elif prpl == 'silc' and not silc.found()
498                 # Do nothing.
499         elif prpl == 'gg' and not libgadu.found()
500                 # Do nothing.
501         elif prpl == 'zephyr' and IS_WIN32
502                 # Do nothing.
503         else
504                 DYNAMIC_PRPLS += [prpl]
505         endif
506 endforeach
508 DYNAMIC_BONJOUR = DYNAMIC_PRPLS.contains('bonjour')
509 DYNAMIC_FACEBOOK = DYNAMIC_PRPLS.contains('facebook')
510 DYNAMIC_GG  = DYNAMIC_PRPLS.contains('gg')
511 DYNAMIC_IRC = DYNAMIC_PRPLS.contains('irc')
512 DYNAMIC_JABBER = DYNAMIC_PRPLS.contains('jabber')
513 DYNAMIC_NOVELL = DYNAMIC_PRPLS.contains('novell')
514 DYNAMIC_NULL = DYNAMIC_PRPLS.contains('null')
515 DYNAMIC_OSCAR = DYNAMIC_PRPLS.contains('oscar') or DYNAMIC_PRPLS.contains('aim') or DYNAMIC_PRPLS.contains('icq')
516 DYNAMIC_SAMETIME = DYNAMIC_PRPLS.contains('sametime')
517 DYNAMIC_SILC = DYNAMIC_PRPLS.contains('silc')
518 DYNAMIC_SIMPLE = DYNAMIC_PRPLS.contains('simple')
519 DYNAMIC_ZEPHYR = DYNAMIC_PRPLS.contains('zephyr')
521 conf.set('HAVE_SYS_UTSNAME_H',
522     compiler.has_header('sys/utsname.h'))
523 conf.set('HAVE_UNAME',
524     compiler.has_function('uname'))
527 add_project_arguments(
528     '-DPURPLE_DISABLE_DEPRECATED',
529     '-DPIDGIN_DISABLE_DEPRECATED',
530     '-DFINCH_DISABLE_DEPRECATED',
531     '-DGNT_DISABLE_DEPRECATED',
532     language : 'c')
533 if get_option('buildtype') != 'plain' and compiler.get_id() == 'gcc'
534         # We enable -Wall later.
535         # If it's set after the warning CFLAGS in the compiler invocation, it counteracts the -Wno... flags.
536         # This leads to warnings we don't want.
537 #       CFLAGS=`echo $CFLAGS |$sedpath 's/-Wall//'`
539         # ENABLE WARNINGS SUPPORTED BY THE VERSION OF GCC IN USE
540         #
541         # Future Possibilities
542         #
543         # Consider adding -Wbad-function-cast.
544         #       This leads to spurious warnings using GPOINTER_TO_INT(), et al. directly on a function call.
545         #               We'd need an intermediate variable.
546         #
547         foreach newflag : [
548                         '-Waggregate-return',
549                         '-Wcast-align',
550                         '-Wdeclaration-after-statement',
551                         '-Wendif-labels',
552                         '-Werror-implicit-function-declaration',
553                         '-Wextra -Wno-unused-parameter',
554                         '-Wformat',
555                         '-Wformat-security',
556                         '-Werror=format-security',
557                         '-Winit-self',
558                         '-Wmissing-declarations',
559                         '-Wmissing-noreturn',
560                         '-Wmissing-prototypes',
561                         '-Wpointer-arith',
562                         '-Wfloat-equal',
563                         '-Wundef']
564                 if compiler.has_argument(newflag)
565                         add_project_arguments(newflag, language : 'c')
566                 endif
567         endforeach
568 endif
569 if get_option('buildtype') != 'plain' and SUNCC
570         add_project_arguments('-features=extensions', language : 'c')
571 endif
573 pidginpath = find_program('pidgin', required : false)
575 if get_option('glib-errors-trace')
576         if compiler.get_id() == 'clang'
577                 error('--enable-glib-errors-trace doesn\'t work with clang')
578         endif
579         conf.set('ENABLE_GLIBTRACE', true)
580         add_project_arguments('-rdynamic', language : 'c')
581 endif
583 #######################################################################
584 # Check for Unity and Messaging Menu
585 # Remove when Ubuntu 16.04 is EOL
586 #######################################################################
587 UNITY = [
588         dependency('unity', version : '>= 6.8', required : get_option('unity-integration')),
589         dependency('messaging-menu', version : '>= 12.10', required : get_option('unity-integration'))
591 enable_unity = UNITY[0].found() and UNITY[1].found()
592 if enable_unity
593         conf.set('USES_MM_CHAT_SECTION', 'X-MessagingMenu-UsesChatSection=true')
594 else
595         conf.set('USES_MM_CHAT_SECTION', '')
596 endif
598 #######################################################################
599 # Check for Secret Service headers
600 #######################################################################
602 if IS_WIN32
603         secretservice = disabler()
604 else
605         secretservice = dependency('libsecret-1', required : get_option('secret-service'))
606 endif
608 #######################################################################
609 # Check for KWallet headers
610 #######################################################################
612 if IS_WIN32
613         kwallet = disabler()
614 else
615         # Ensure C++ compiler works
616         add_languages('cpp')
617         cxx_compiler = meson.get_compiler('cpp')
618         add_project_arguments('-DHAVE_CONFIG_H=1', language : 'cpp')
620         qt5 = import('qt5')
622         qt5_dep = dependency('qt5', modules: ['Core'], required : get_option('kwallet'))
624         kwallet = dependency('KF5Wallet', required : get_option('kwallet'))
625 endif
627 #######################################################################
628 # Check for GPlugin 0.28.0
629 #######################################################################
630 gplugin_dep = dependency('gplugin', version : '>= 0.28.0', required : false)
631 if gplugin_dep.found()
632         gplugin_gir = 'GPlugin-0.0'
633         if get_option('introspection')
634                 gplugin_include_directories = include_directories(
635                     join_paths(gplugin_dep.get_pkgconfig_variable('prefix'),
636                                'share/gir-1.0'))
637         else
638                 gplugin_include_directories = []
639         endif
640 else
641         gplugin_proj = subproject('gplugin',
642             default_options : [
643                 'doc=' + get_option('doc').to_string(),
644                 'gobject-introspection=' + enable_introspection.to_string(),
645                 'nls=' + get_option('nls').to_string(),
646             ]
647         )
648         gplugin_dep = gplugin_proj.get_variable('gplugin_dep')
649         gplugin_gir = gplugin_proj.get_variable('gplugin_gir')[0]
650         gplugin_include_directories = []
651 endif
653 PLUGINS = get_option('plugins')
655 #######################################################################
656 # Check for Nettle (Crypto Library)
657 #######################################################################
659 nettle = dependency('nettle', version : '>= 3.0', required : get_option('nettle'))
660 conf.set('HAVE_NETTLE', nettle.found())
662 #######################################################################
663 # Check for Cyrus-SASL (for xmpp/irc)
664 #######################################################################
665 foreach func : ['snprintf', 'connect']
666         conf.set('HAVE_' + func.to_upper(),
667             compiler.has_function(func))
668 endforeach
669 sasl = dependency('libsasl2', version : '>= 2.0', required : get_option('cyrus-sasl'))
670 conf.set('HAVE_CYRUS_SASL', sasl.found())
672 #######################################################################
673 # Check for external libzephyr
674 #######################################################################
675 ext_zephyr = dependency('zephyr', required : get_option('zephyr'))
676 EXTERNAL_LIBZEPHYR = ext_zephyr.found()
677 conf.set('LIBZEPHYR_EXT', EXTERNAL_LIBZEPHYR)
679 #######################################################################
680 # Check for Kerberos (for Zephyr)
681 #######################################################################
682 conf.set('ZEPHYR_INT32', 'long')
683 #AC_SUBST(KRB4_CFLAGS)
684 #AC_SUBST(KRB4_LDFLAGS)
685 #AC_SUBST(KRB4_LIBS)
686 kerberos = get_option('krb4')
687 if kerberos
688         if kerberos != 'yes'
689 #               KRB4_CFLAGS='-I${kerberos}/include'
690 #               if test -d '$kerberos/include/kerberosIV' ; then
691 #                       KRB4_CFLAGS='$KRB4_CFLAGS -I${kerberos}/include/kerberosIV'
692 #               fi
693 #               KRB4_LDFLAGS='-L${kerberos}/lib'
694         elif run_command('test', '-d', '/usr/local/include/kerberosIV').returncode() == 0
695 #               KRB4_CFLAGS='-I/usr/local/include/kerberosIV'
696         elif run_command('test', '-d', '/usr/include/kerberosIV').returncode() == 0
697 #               KRB4_CFLAGS='-I/usr/include/kerberosIV'
698         endif
699         conf.set('ZEPHYR_USES_KERBEROS', true)
701 #       AC_CHECK_LIB(krb4, krb_rd_req,
702 #                       [KRB4_LIBS='-lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err'],
703 #                       [AC_CHECK_LIB(krb, krb_rd_req,
704 #                               [KRB4_LIBS='-lkrb -ldes'],
705 #                               [AC_MSG_ERROR([Kerberos 4 libraries not found])],
706 #                               -ldes)],
707 #                       -ldes425 -lkrb5 -lk5crypto -lcom_err)
708 #       AC_CHECK_FUNCS(krb_set_key krb_rd_req krb_get_lrealm)
709 #       AC_CHECK_FUNCS(krb_get_err_text krb_log)
710         krb4 = []
711 endif
712 if not kerberos
713         krb4 = []
714 endif
716 #AC_MSG_CHECKING(for me pot o' gold)
717 #AC_MSG_RESULT(no)
718 foreach func : ['timegm']
719         conf.set('HAVE_' + func.to_upper(),
720             compiler.has_function(func))
721 endforeach
722 foreach header : 'sgtty.h sys/cdefs.h sys/file.h sys/filio.h sys/ioctl.h sys/msgbuf.h sys/select.h sys/wait.h termios.h'.split()
723         conf.set('HAVE_' + header.to_upper().underscorify(),
724             compiler.has_header(header))
725 endforeach
727 # sys/sysctl.h on OpenBSD 4.2 requires sys/param.h
728 # sys/sysctl.h on FreeBSD requires sys/types.h
729 have_sys_param_h = compiler.has_header('sys/param.h')
730 conf.set('HAVE_SYS_PARAM_H', have_sys_param_h)
731 prefix = '''
732 #include <sys/types.h>
734 if have_sys_param_h
735         prefix += '''
736 #include <sys/param.h>
738 endif
739 conf.set('HAVE_SYS_SYSCTL_H',
740     compiler.has_header('sys/sysctl.h', prefix : prefix))
741 conf.set('HAVE_SYS_SOCKET_H',
742     compiler.has_header('sys/socket.h'))
743 #AC_VAR_TIMEZONE_EXTERNALS
745 #######################################################################
746 # Disable pixmap installation
747 #######################################################################
748 INSTALL_PIXMAPS = get_option('pixmaps-install')
750 # check for gtk-doc
751 ENABLE_DOC = get_option('doc')
753 enable_debug = get_option('console-logging')
754 conf.set('DEBUG', enable_debug)
756 # So that config.h may be found.
757 toplevel_inc = include_directories('.')
759 subdir('libpurple')
760 subdir('share/sounds')
761 subdir('finch')
762 subdir('pidgin')
763 subdir('doc')
765 configure_file(output : 'config.h',
766     configuration : conf)
768 message('')
769 message('pidgin ' + meson.project_version())
771 message('')
772 message('Build GTK+ UI................. : ' + get_option('gtkui').to_string())
773 message('Build console UI.............. : ' + enable_consoleui.to_string())
774 message('Build for X11................. : ' + x11.found().to_string())
775 message('')
776 message('Enable Gestures............... : ' + enable_gestures.to_string())
777 message('Protocols to build dynamically : @0@'.format(DYNAMIC_PRPLS))
778 message('')
779 message('Build with GStreamer support.. : ' + gstreamer.found().to_string())
780 message('Build with voice and video.... : ' + enable_vv.to_string())
781 message('Build with GNU Libidn......... : ' + idn.found().to_string())
782 message('Build with Nettle support..... : ' + nettle.found().to_string())
783 message('Build with Cyrus SASL support. : ' + sasl.found().to_string())
784 message('Use external libzephyr........ : ' + EXTERNAL_LIBZEPHYR.to_string())
785 if not EXTERNAL_LIBZEPHYR
786 message('Use kerberos 4 with zephyr.... : ' + kerberos.to_string())
787 endif
788 message('Install pixmaps............... : ' + INSTALL_PIXMAPS.to_string())
789 message('Install translations.......... : ' + INSTALL_I18N.to_string())
790 message('Has you....................... : yes')
791 message('')
792 message('Build Unity integration plugin.: ' + enable_unity.to_string())
793 message('')
794 message('Build with KWallet............ : ' + kwallet.found().to_string())
795 message('Build with Secret Service..... : ' + secretservice.found().to_string())
796 message('')
797 message('Build plugins................. : ' + PLUGINS.to_string())
798 message('Enable Introspection...........: ' + enable_introspection.to_string())
799 message('')
800 message('Print debugging messages...... : ' + enable_debug.to_string())
801 message('Generate documentation........ : ' + ENABLE_DOC.to_string())
802 message('')
803 bindir = join_paths(get_option('prefix'), get_option('bindir'))
804 message('Pidgin will be installed in @0@.'.format(bindir))
805 if pidginpath.found()
806         message('Warning: You have an old copy of Pidgin at @0@.'.format(pidginpath.path()))
807 endif
808 if not INSTALL_PIXMAPS
809         message('')
810         message('Warning: You have disabled the installation of pixmap data, but Pidgin')
811         message('still requires installed pixmaps.  Be sure you know what you are doing.')
812 endif
813 if not INSTALL_I18N
814         message('')
815         message('Warning: You have disabled the building and installation of translation')
816         message('data.  This will prevent building Pidgin desktop files.')
817         message('Be sure you know what you are doing.')
818 endif
819 message('')
820 message('configure complete, now type \'ninja\'')
821 message('')