Replace g_list_remove_link+g_list_free_1 with g_list_delete_link
[pidgin-git.git] / meson.build
blob52ac76da7056279c638b973cf4f4a893baf9f72c
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                 if enable_introspection
311                         talkatu_gir = 'Talkatu-0.0'
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                 if enable_introspection
328                         talkatu_gir = talkatu_proj.get_variable('talkatu_gir')[0]
329                 endif
330                 talkatu_include_directories = []
331         endif
332 endif   # GTK
334 ENABLE_GTK = get_option('gtkui')
337 #######################################################################
338 # Check if we should compile with X support
339 #######################################################################
340 if IS_WIN32
341         x11 = disabler()
342 else
343         x11 = dependency('x11', required : get_option('x'))
344 endif
345 conf.set('HAVE_X11', x11.found())
347 enable_gestures = get_option('gestures')
348 if not get_option('gtkui') or not x11.found()
349         enable_gestures = false
350 endif
352 #######################################################################
353 # Check for LibXML2 (required)
354 #######################################################################
355 libxml = dependency('libxml-2.0', version : '>= 2.6.0')
356 if libxml.version().version_compare('<2.6.18')
357         message('Versions of libxml2 < 2.6.18 may contain bugs that could cause XMPP messages to be discarded.')
358 endif
360 #######################################################################
361 # Check for JSON-GLib (required)
362 #######################################################################
364 json = dependency('json-glib-1.0', version : '>= 0.14.0')
366 #######################################################################
367 # Check for libsoup (required)
368 #######################################################################
370 libsoup = dependency('libsoup-2.4', version : '>= 2.42')
372 #######################################################################
373 # Check for GStreamer
374 #######################################################################
376 gstreamer = dependency('gstreamer-1.0', required : get_option('gstreamer'))
377 conf.set('USE_GSTREAMER', gstreamer.found())
379 #######################################################################
380 # Check for GStreamer Video
381 #######################################################################
382 if gstreamer.found()
383         gstreamer_video = dependency('gstreamer-video-1.0',
384                                      required : get_option('gstreamer-video'))
385         conf.set('USE_GSTVIDEO', gstreamer_video.found())
386 else
387         gstreamer_video = disabler()
388 endif
390 #######################################################################
391 # Check for Farstream
392 #######################################################################
393 farstream = dependency('farstream-0.2', version : '>= 0.2.7',
394                        required : get_option('farstream'))
396 #######################################################################
397 # Check for Voice and Video support
398 #######################################################################
399 if get_option('vv').enabled() or get_option('vv').auto()
400         if gstreamer.found() and gstreamer_video.found() and farstream.found()
401                 conf.set('USE_VV', true)
402                 enable_vv = true
403         else
404                 if get_option('vv').enabled()
405                         error('''
406 Dependencies for voice/video were not met.
407 Install the necessary gstreamer and farstream packages first.
408 Or use -Dvv=disabled if you do not need voice/video support.
409                         ''')
410                 endif
411                 enable_vv = false
412         endif
413 else
414         enable_vv = false
415 endif
417 #######################################################################
418 # Check for Raw data streams support in Farstream
419 #######################################################################
420 if enable_vv
421         gstreamer_app = dependency('gstreamer-app-1.0',
422                                    required : false)
423         if gstreamer_app.found()
424                 conf.set('USE_GSTAPP', true)
425                 conf.set('HAVE_MEDIA_APPLICATION', true)
426         endif
427 else
428         gstreamer_app = []
429 endif
431 #######################################################################
432 # Check for Meanwhile headers (for Sametime)
433 #######################################################################
434 meanwhile = dependency('meanwhile', version : ['>= 1.0.0', '< 2.0.0'], required : get_option('meanwhile'))
435 gmime = dependency('gmime-3.0', version : '>= 3.0.0', required : get_option('meanwhile'))
436 enable_meanwhile = meanwhile.found() and gmime.found()
438 #######################################################################
439 # Check for Native Avahi headers (for Bonjour)
440 #######################################################################
442 if IS_WIN32
443         # Just keep enabled.
444         enable_avahi = get_option('avahi').enabled() or get_option('avahi').auto()
445         avahi = []
446 else
447         # Attempt to autodetect Avahi
448         avahi_client = dependency('avahi-client', required : get_option('avahi'))
449         avahi_glib = dependency('avahi-glib', required : get_option('avahi'))
450         avahi = [avahi_client, avahi_glib]
451         enable_avahi = avahi_client.found() and avahi_glib.found()
452 endif
455 #######################################################################
456 # Check for SILC client includes and libraries
457 #######################################################################
458 silc = dependency('silcclient', version : '>= 1.1', required : get_option('silc'))
460 #######################################################################
461 # Check for Gadu-Gadu protocol library (libgadu)
462 #######################################################################
464 libgadu = dependency('libgadu', version : '>= 1.12.0', required : get_option('libgadu'))
466 if libgadu.found()
467         if not compiler.has_function('gg_is_gpl_compliant', dependencies : libgadu)
468                 if get_option('libgadu').auto()
469                         libgadu = disabler()
470                 else
471                         message('''
472 libgadu is not compatible with the GPL when compiled with OpenSSL support.
474 To link against libgadu, please recompile it using:
475 ./configure --with-openssl=no
476 Then rerun this Meson build
477                         ''')
478                 endif
479         endif
480 endif
483 DEFAULT_PRPLS = ['bonjour', 'facebook', 'gg', 'irc', 'jabber', 'novell',
484                  'null', 'oscar', 'sametime', 'silc', 'simple', 'zephyr']
485 ALL_PRPLS = DEFAULT_PRPLS + ['null']
487 dynamic_list = get_option('dynamic-prpls').split(',')
488 if dynamic_list == ['all']
489         dynamic_list = DEFAULT_PRPLS
490 endif
491 DYNAMIC_PRPLS = []
492 foreach prpl : dynamic_list
493         if prpl == ''
494                 # The list was empty; do nothing.
495         elif prpl == 'sametime' and not enable_meanwhile
496                 # Do nothing.
497         elif prpl == 'bonjour' and not enable_avahi
498                 # Do nothing.
499         elif prpl == 'silc' and not silc.found()
500                 # Do nothing.
501         elif prpl == 'gg' and not libgadu.found()
502                 # Do nothing.
503         elif prpl == 'zephyr' and IS_WIN32
504                 # Do nothing.
505         else
506                 DYNAMIC_PRPLS += [prpl]
507         endif
508 endforeach
510 DYNAMIC_BONJOUR = DYNAMIC_PRPLS.contains('bonjour')
511 DYNAMIC_FACEBOOK = DYNAMIC_PRPLS.contains('facebook')
512 DYNAMIC_GG  = DYNAMIC_PRPLS.contains('gg')
513 DYNAMIC_IRC = DYNAMIC_PRPLS.contains('irc')
514 DYNAMIC_JABBER = DYNAMIC_PRPLS.contains('jabber')
515 DYNAMIC_NOVELL = DYNAMIC_PRPLS.contains('novell')
516 DYNAMIC_NULL = DYNAMIC_PRPLS.contains('null')
517 DYNAMIC_OSCAR = DYNAMIC_PRPLS.contains('oscar') or DYNAMIC_PRPLS.contains('aim') or DYNAMIC_PRPLS.contains('icq')
518 DYNAMIC_SAMETIME = DYNAMIC_PRPLS.contains('sametime')
519 DYNAMIC_SILC = DYNAMIC_PRPLS.contains('silc')
520 DYNAMIC_SIMPLE = DYNAMIC_PRPLS.contains('simple')
521 DYNAMIC_ZEPHYR = DYNAMIC_PRPLS.contains('zephyr')
523 conf.set('HAVE_SYS_UTSNAME_H',
524     compiler.has_header('sys/utsname.h'))
525 conf.set('HAVE_UNAME',
526     compiler.has_function('uname'))
529 add_project_arguments(
530     '-DPURPLE_DISABLE_DEPRECATED',
531     '-DPIDGIN_DISABLE_DEPRECATED',
532     '-DFINCH_DISABLE_DEPRECATED',
533     '-DGNT_DISABLE_DEPRECATED',
534     language : 'c')
535 if get_option('buildtype') != 'plain' and compiler.get_id() == 'gcc'
536         # We enable -Wall later.
537         # If it's set after the warning CFLAGS in the compiler invocation, it counteracts the -Wno... flags.
538         # This leads to warnings we don't want.
539 #       CFLAGS=`echo $CFLAGS |$sedpath 's/-Wall//'`
541         # ENABLE WARNINGS SUPPORTED BY THE VERSION OF GCC IN USE
542         #
543         # Future Possibilities
544         #
545         # Consider adding -Wbad-function-cast.
546         #       This leads to spurious warnings using GPOINTER_TO_INT(), et al. directly on a function call.
547         #               We'd need an intermediate variable.
548         #
549         foreach newflag : [
550                         '-Waggregate-return',
551                         '-Wcast-align',
552                         '-Wdeclaration-after-statement',
553                         '-Wendif-labels',
554                         '-Werror-implicit-function-declaration',
555                         '-Wextra -Wno-unused-parameter',
556                         '-Wformat',
557                         '-Wformat-security',
558                         '-Werror=format-security',
559                         '-Winit-self',
560                         '-Wmissing-declarations',
561                         '-Wmissing-noreturn',
562                         '-Wmissing-prototypes',
563                         '-Wpointer-arith',
564                         '-Wfloat-equal',
565                         '-Wundef']
566                 if compiler.has_argument(newflag)
567                         add_project_arguments(newflag, language : 'c')
568                 endif
569         endforeach
570 endif
571 if get_option('buildtype') != 'plain' and SUNCC
572         add_project_arguments('-features=extensions', language : 'c')
573 endif
575 pidginpath = find_program('pidgin', required : false)
577 if get_option('glib-errors-trace')
578         if compiler.get_id() == 'clang'
579                 error('--enable-glib-errors-trace doesn\'t work with clang')
580         endif
581         conf.set('ENABLE_GLIBTRACE', true)
582         add_project_arguments('-rdynamic', language : 'c')
583 endif
585 #######################################################################
586 # Check for Unity and Messaging Menu
587 # Remove when Ubuntu 16.04 is EOL
588 #######################################################################
589 UNITY = [
590         dependency('unity', version : '>= 6.8', required : get_option('unity-integration')),
591         dependency('messaging-menu', version : '>= 12.10', required : get_option('unity-integration'))
593 enable_unity = UNITY[0].found() and UNITY[1].found()
594 if enable_unity
595         conf.set('USES_MM_CHAT_SECTION', 'X-MessagingMenu-UsesChatSection=true')
596 else
597         conf.set('USES_MM_CHAT_SECTION', '')
598 endif
600 #######################################################################
601 # Check for Secret Service headers
602 #######################################################################
604 if IS_WIN32
605         secretservice = disabler()
606 else
607         secretservice = dependency('libsecret-1', required : get_option('secret-service'))
608 endif
610 #######################################################################
611 # Check for KWallet headers
612 #######################################################################
614 if IS_WIN32
615         kwallet = disabler()
616 else
617         # Ensure C++ compiler works
618         add_languages('cpp')
619         cxx_compiler = meson.get_compiler('cpp')
620         add_project_arguments('-DHAVE_CONFIG_H=1', language : 'cpp')
622         qt5 = import('qt5')
624         qt5_dep = dependency('qt5', modules: ['Core'], required : get_option('kwallet'))
626         kwallet = dependency('KF5Wallet', required : get_option('kwallet'))
627 endif
629 #######################################################################
630 # Check for GPlugin 0.28.0
631 #######################################################################
632 gplugin_dep = dependency('gplugin', version : '>= 0.28.0', required : false)
633 if gplugin_dep.found()
634         if enable_introspection
635                 gplugin_gir = 'GPlugin-0.0'
636                 gplugin_include_directories = include_directories(
637                     join_paths(gplugin_dep.get_pkgconfig_variable('prefix'),
638                                'share/gir-1.0'))
639         else
640                 gplugin_include_directories = []
641         endif
642 else
643         gplugin_proj = subproject('gplugin',
644             default_options : [
645                 'doc=' + get_option('doc').to_string(),
646                 'gobject-introspection=' + enable_introspection.to_string(),
647                 'nls=' + get_option('nls').to_string(),
648             ]
649         )
650         gplugin_dep = gplugin_proj.get_variable('gplugin_dep')
651         if enable_introspection
652                 gplugin_gir = gplugin_proj.get_variable('gplugin_gir')[0]
653         endif
654         gplugin_include_directories = []
655 endif
657 PLUGINS = get_option('plugins')
659 #######################################################################
660 # Check for Nettle (Crypto Library)
661 #######################################################################
663 nettle = dependency('nettle', version : '>= 3.0', required : get_option('nettle'))
664 conf.set('HAVE_NETTLE', nettle.found())
666 #######################################################################
667 # Check for Cyrus-SASL (for xmpp/irc)
668 #######################################################################
669 foreach func : ['snprintf', 'connect']
670         conf.set('HAVE_' + func.to_upper(),
671             compiler.has_function(func))
672 endforeach
673 sasl = dependency('libsasl2', version : '>= 2.0', required : get_option('cyrus-sasl'))
674 conf.set('HAVE_CYRUS_SASL', sasl.found())
676 #######################################################################
677 # Check for external libzephyr
678 #######################################################################
679 ext_zephyr = dependency('zephyr', required : get_option('zephyr'))
680 EXTERNAL_LIBZEPHYR = ext_zephyr.found()
681 conf.set('LIBZEPHYR_EXT', EXTERNAL_LIBZEPHYR)
683 #######################################################################
684 # Check for Kerberos (for Zephyr)
685 #######################################################################
686 conf.set('ZEPHYR_INT32', 'long')
687 #AC_SUBST(KRB4_CFLAGS)
688 #AC_SUBST(KRB4_LDFLAGS)
689 #AC_SUBST(KRB4_LIBS)
690 kerberos = get_option('krb4')
691 if kerberos
692         if kerberos != 'yes'
693 #               KRB4_CFLAGS='-I${kerberos}/include'
694 #               if test -d '$kerberos/include/kerberosIV' ; then
695 #                       KRB4_CFLAGS='$KRB4_CFLAGS -I${kerberos}/include/kerberosIV'
696 #               fi
697 #               KRB4_LDFLAGS='-L${kerberos}/lib'
698         elif run_command('test', '-d', '/usr/local/include/kerberosIV').returncode() == 0
699 #               KRB4_CFLAGS='-I/usr/local/include/kerberosIV'
700         elif run_command('test', '-d', '/usr/include/kerberosIV').returncode() == 0
701 #               KRB4_CFLAGS='-I/usr/include/kerberosIV'
702         endif
703         conf.set('ZEPHYR_USES_KERBEROS', true)
705 #       AC_CHECK_LIB(krb4, krb_rd_req,
706 #                       [KRB4_LIBS='-lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err'],
707 #                       [AC_CHECK_LIB(krb, krb_rd_req,
708 #                               [KRB4_LIBS='-lkrb -ldes'],
709 #                               [AC_MSG_ERROR([Kerberos 4 libraries not found])],
710 #                               -ldes)],
711 #                       -ldes425 -lkrb5 -lk5crypto -lcom_err)
712 #       AC_CHECK_FUNCS(krb_set_key krb_rd_req krb_get_lrealm)
713 #       AC_CHECK_FUNCS(krb_get_err_text krb_log)
714         krb4 = []
715 endif
716 if not kerberos
717         krb4 = []
718 endif
720 #AC_MSG_CHECKING(for me pot o' gold)
721 #AC_MSG_RESULT(no)
722 foreach func : ['timegm']
723         conf.set('HAVE_' + func.to_upper(),
724             compiler.has_function(func))
725 endforeach
726 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()
727         conf.set('HAVE_' + header.to_upper().underscorify(),
728             compiler.has_header(header))
729 endforeach
731 # sys/sysctl.h on OpenBSD 4.2 requires sys/param.h
732 # sys/sysctl.h on FreeBSD requires sys/types.h
733 have_sys_param_h = compiler.has_header('sys/param.h')
734 conf.set('HAVE_SYS_PARAM_H', have_sys_param_h)
735 prefix = '''
736 #include <sys/types.h>
738 if have_sys_param_h
739         prefix += '''
740 #include <sys/param.h>
742 endif
743 conf.set('HAVE_SYS_SYSCTL_H',
744     compiler.has_header('sys/sysctl.h', prefix : prefix))
745 conf.set('HAVE_SYS_SOCKET_H',
746     compiler.has_header('sys/socket.h'))
747 #AC_VAR_TIMEZONE_EXTERNALS
749 #######################################################################
750 # Disable pixmap installation
751 #######################################################################
752 INSTALL_PIXMAPS = get_option('pixmaps-install')
754 # check for gtk-doc
755 ENABLE_DOC = get_option('doc')
757 enable_debug = get_option('console-logging')
758 conf.set('DEBUG', enable_debug)
760 # So that config.h may be found.
761 toplevel_inc = include_directories('.')
763 subdir('libpurple')
764 subdir('share/sounds')
765 subdir('finch')
766 subdir('pidgin')
767 subdir('doc')
769 configure_file(output : 'config.h',
770     configuration : conf)
772 message('')
773 message('pidgin ' + meson.project_version())
775 message('')
776 message('Build GTK+ UI................. : ' + get_option('gtkui').to_string())
777 message('Build console UI.............. : ' + enable_consoleui.to_string())
778 message('Build for X11................. : ' + x11.found().to_string())
779 message('')
780 message('Enable Gestures............... : ' + enable_gestures.to_string())
781 message('Protocols to build dynamically : @0@'.format(DYNAMIC_PRPLS))
782 message('')
783 message('Build with GStreamer support.. : ' + gstreamer.found().to_string())
784 message('Build with voice and video.... : ' + enable_vv.to_string())
785 message('Build with GNU Libidn......... : ' + idn.found().to_string())
786 message('Build with Nettle support..... : ' + nettle.found().to_string())
787 message('Build with Cyrus SASL support. : ' + sasl.found().to_string())
788 message('Use external libzephyr........ : ' + EXTERNAL_LIBZEPHYR.to_string())
789 if not EXTERNAL_LIBZEPHYR
790 message('Use kerberos 4 with zephyr.... : ' + kerberos.to_string())
791 endif
792 message('Install pixmaps............... : ' + INSTALL_PIXMAPS.to_string())
793 message('Install translations.......... : ' + INSTALL_I18N.to_string())
794 message('Has you....................... : yes')
795 message('')
796 message('Build Unity integration plugin.: ' + enable_unity.to_string())
797 message('')
798 message('Build with KWallet............ : ' + kwallet.found().to_string())
799 message('Build with Secret Service..... : ' + secretservice.found().to_string())
800 message('')
801 message('Build plugins................. : ' + PLUGINS.to_string())
802 message('Enable Introspection...........: ' + enable_introspection.to_string())
803 message('')
804 message('Print debugging messages...... : ' + enable_debug.to_string())
805 message('Generate documentation........ : ' + ENABLE_DOC.to_string())
806 message('')
807 bindir = join_paths(get_option('prefix'), get_option('bindir'))
808 message('Pidgin will be installed in @0@.'.format(bindir))
809 if pidginpath.found()
810         message('Warning: You have an old copy of Pidgin at @0@.'.format(pidginpath.path()))
811 endif
812 if not INSTALL_PIXMAPS
813         message('')
814         message('Warning: You have disabled the installation of pixmap data, but Pidgin')
815         message('still requires installed pixmaps.  Be sure you know what you are doing.')
816 endif
817 if not INSTALL_I18N
818         message('')
819         message('Warning: You have disabled the building and installation of translation')
820         message('data.  This will prevent building Pidgin desktop files.')
821         message('Be sure you know what you are doing.')
822 endif
823 message('')
824 message('configure complete, now type \'ninja\'')
825 message('')