]> code.delx.au - pulseaudio/blob - configure.ac
Apply #ifdefs around functionality not available on win32
[pulseaudio] / configure.ac
1 # -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
3
4 # This file is part of PulseAudio.
5 #
6 # Copyright 2004-2008 Lennart Poettering
7 # Copyright 2006-2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
8 #
9 # PulseAudio is free software; you can redistribute it and/or modify it
10 # under the terms of the GNU Lesser General Public License as published by
11 # the Free Software Foundation; either version 2 of the License, or
12 # (at your option) any later version.
13 #
14 # PulseAudio is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 # General Public License for more details.
18 #
19 # You should have received a copy of the GNU Lesser General Public License
20 # along with PulseAudio; if not, write to the Free Software Foundation,
21 # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22
23 AC_PREREQ(2.63)
24
25 AC_INIT([pulseaudio],[m4_esyscmd(./git-version-gen .tarball-version)],[mzchyfrnhqvb (at) 0pointer (dot) net])
26 AC_CONFIG_SRCDIR([src/daemon/main.c])
27 AC_CONFIG_MACRO_DIR([m4])
28 AC_CONFIG_HEADERS([config.h])
29 AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules tar-pax])
30
31 m4_define(pa_major, `echo $VERSION | cut -d. -f1 | cut -d- -f1`)
32 m4_define(pa_minor, `echo $VERSION | cut -d. -f2 | cut -d- -f1`)
33
34 AC_SUBST(PA_MAJOR, pa_major)
35 AC_SUBST(PA_MINOR, pa_minor)
36 AC_SUBST(PA_MAJORMINOR, pa_major.pa_minor)
37 AC_SUBST(PACKAGE_URL, [http://pulseaudio.org/])
38
39 AC_SUBST(PA_API_VERSION, 12)
40 AC_SUBST(PA_PROTOCOL_VERSION, 19)
41
42 # The stable ABI for client applications, for the version info x:y:z
43 # always will hold y=z
44 AC_SUBST(LIBPULSE_VERSION_INFO, [12:3:12])
45
46 # A simplified, synchronous, ABI-stable interface for client
47 # applications, for the version info x:y:z always will hold y=z
48 AC_SUBST(LIBPULSE_SIMPLE_VERSION_INFO, [0:3:0])
49
50 # The ABI-stable network browsing interface for client applications,
51 # for the version info x:y:z always will hold y=z
52 AC_SUBST(LIBPULSE_BROWSE_VERSION_INFO, [1:1:1])
53
54 # The ABI-stable GLib adapter for client applications, for the version
55 # info x:y:z always will hold y=z
56 AC_SUBST(LIBPULSE_MAINLOOP_GLIB_VERSION_INFO, [0:4:0])
57
58 AC_CANONICAL_HOST
59 AC_DEFINE_UNQUOTED([CANONICAL_HOST], "$host", [Canonical host string.])
60
61 AC_CHECK_PROG([STOW], [stow], [yes], [no])
62
63 AS_IF([test "x$STOW" = "xyes" && test -d /usr/local/stow], [
64 AC_MSG_NOTICE([*** Found /usr/local/stow: default install prefix set to /usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION} ***])
65 ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}"
66 ])
67
68 AM_SILENT_RULES([yes])
69
70 #### Checks for programs. ####
71
72 # mkdir -p
73
74 AC_PROG_MKDIR_P
75
76 # CC
77
78 AC_PROG_CC
79 AC_PROG_CC_C99
80 AM_PROG_CC_C_O
81 AC_PROG_GCC_TRADITIONAL
82 AC_USE_SYSTEM_EXTENSIONS
83
84 #### Platform hacks ####
85
86 case $host in
87 *-*-solaris* )
88 AC_DEFINE(_XOPEN_SOURCE, 600, Needed to get declarations for msg_control and msg_controllen on Solaris)
89 AC_DEFINE(__EXTENSIONS__, 1, Needed to get declarations for msg_control and msg_controllen on Solaris)
90 ;;
91 *-*-darwin* )
92 AC_DEFINE([_POSIX_C_SOURCE], [200112L], [Needed to get clock_gettime on Mac OS X])
93 AC_DEFINE([_DARWIN_C_SOURCE], [200112L], [Needed to get NSIG on Mac OS X])
94 ;;
95 esac
96
97 # M4
98
99 AC_CHECK_PROGS([M4], gm4 m4, no)
100 if test "x$M4" = xno ; then
101 AC_MSG_ERROR([m4 missing])
102 fi
103
104 dnl Compiler flags
105 CC_CHECK_CFLAGS_APPEND([-Wall -W -Wextra -pipe -Wno-long-long -Winline -Wvla -Wno-overlength-strings -Wunsafe-loop-optimizations -Wundef -Wformat=2 -Wlogical-op -Wsign-compare -Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wold-style-definition -Wpointer-arith -Winit-self -Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow -Wendif-labels -Wcast-align -Wstrict-aliasing=2 -Wwrite-strings -Wno-unused-parameter -ffast-math -Wp,-D_FORTIFY_SOURCE=2 -fno-common -fdiagnostics-show-option])
106
107 dnl Linker flags.
108 dnl Check whether the linker supports the -version-script option.
109
110 dnl This variable is used to make sure ${srcdir} is expanded and not
111 dnl passed to the CC_CHECK_LDFLAGS macro as a name.
112 tmp_ldflag="-Wl,-version-script=${srcdir}/src/map-file"
113
114 CC_CHECK_LDFLAGS([${tmp_ldflag}],
115 [VERSIONING_LDFLAGS='-Wl,-version-script=$(srcdir)/map-file'])
116 AC_SUBST([VERSIONING_LDFLAGS])
117
118 dnl Use immediate (now) bindings; avoids the funky re-call in itself
119 dnl the -z now syntax is lifted from Sun's linker and works with GNU's too
120 dnl other linkes might be added later
121 CC_CHECK_LDFLAGS([-Wl,-z,now], [IMMEDIATE_LDFLAGS="-Wl,-z,now"])
122 AC_SUBST([IMMEDIATE_LDFLAGS])
123
124 dnl On ELF systems we don't want the libraries to be unloaded since we
125 dnl don't clean them up properly, so we request the nodelete flag to be
126 dnl enabled.
127 dnl
128 dnl On other systems, we don't really know how to do that, but it's
129 dnl welcome if somebody can tell.
130 CC_CHECK_LDFLAGS([-Wl,-z,nodelete], [NODELETE_LDFLAGS="-Wl,-z,nodelete"])
131 AC_SUBST([NODELETE_LDFLAGS])
132
133 dnl Check for the proper way to build libraries that have no undefined
134 dnl symbols; on some hosts this needs to be avoided but the macro
135 dnl takes care of it.
136 CC_NOUNDEFINED
137
138 dnl Check whether to build tests by default (as compile-test) or not
139 AC_ARG_ENABLE([default-build-tests],
140 AS_HELP_STRING([--disable-default-build-tests], [Build test programs only during make check]))
141
142 AM_CONDITIONAL([BUILD_TESTS_DEFAULT], [test "x$enable_default_build_tests" != "xno"])
143
144 # Native atomic operation support
145 AC_ARG_ENABLE([atomic-arm-linux-helpers],
146 AS_HELP_STRING([--disable-atomic-arm-linux-helpers],[use inline asm or libatomic_ops instead]),
147 [
148 case "${enableval}" in
149 yes) atomic_arm_linux_helpers=yes ;;
150 no) atomic_arm_linux_helpers=no ;;
151 *) AC_MSG_ERROR(bad value ${enableval} for --disable-atomic-arm-linux-helpers) ;;
152 esac
153 ],
154 [atomic_arm_linux_helpers=auto])
155
156 AC_ARG_ENABLE([atomic-arm-memory-barrier],
157 AS_HELP_STRING([--enable-atomic-arm-memory-barrier],[only really needed in SMP arm systems]),
158 [
159 case "${enableval}" in
160 yes) AC_DEFINE_UNQUOTED(ATOMIC_ARM_MEMORY_BARRIER_ENABLED, 1, [Enable memory barriers]) ;;
161 no) ;;
162 *) AC_MSG_ERROR(bad value ${enableval} for --disable-atomic-arm-linux-helpers) ;;
163 esac
164 ],)
165
166 AC_MSG_CHECKING([target operating system])
167 case $host in
168 *-*-linux*)
169 AC_MSG_RESULT([linux])
170 pulse_target_os=linux
171 ;;
172 *-*-darwin*)
173 AC_MSG_RESULT([darwin])
174 pulse_target_os=darwin
175 ;;
176 *)
177 AC_MSG_RESULT([unknown])
178 pulse_target_os=unknown
179 ;;
180 esac
181
182 # If everything else fails use libatomic_ops
183 need_libatomic_ops=yes
184
185 AC_CACHE_CHECK([whether $CC knows __sync_bool_compare_and_swap()],
186 pulseaudio_cv_sync_bool_compare_and_swap,
187 [AC_LINK_IFELSE(
188 AC_LANG_PROGRAM([], [[int a = 4; __sync_bool_compare_and_swap(&a, 4, 5);]]),
189 [pulseaudio_cv_sync_bool_compare_and_swap=yes],
190 [pulseaudio_cv_sync_bool_compare_and_swap=no])
191 ])
192
193 if test "$pulseaudio_cv_sync_bool_compare_and_swap" = "yes" ; then
194 AC_DEFINE([HAVE_ATOMIC_BUILTINS], 1, [Have __sync_bool_compare_and_swap() and friends.])
195 need_libatomic_ops=no
196 else
197 # HW specific atomic ops stuff
198 AC_MSG_CHECKING([architecture for native atomic operations])
199 case $host in
200 arm*)
201 AC_MSG_RESULT([arm])
202 AC_MSG_CHECKING([whether we can use Linux kernel helpers])
203 # The Linux kernel helper functions have been there since 2.6.16. However
204 # compile time checking for kernel version in cross compile environment
205 # (which is usually the case for arm cpu) is tricky (or impossible).
206 if test "x$pulse_target_os" = "xlinux" && test "x$atomic_arm_linux_helpers" != "xno"; then
207 AC_MSG_RESULT([yes])
208 AC_DEFINE_UNQUOTED(ATOMIC_ARM_LINUX_HELPERS, 1, [special arm linux implementation])
209 need_libatomic_ops=no
210 else
211 AC_MSG_RESULT([no])
212 AC_CACHE_CHECK([compiler support for arm inline asm atomic operations],
213 pulseaudio_cv_support_arm_atomic_ops,
214 [AC_COMPILE_IFELSE(
215 AC_LANG_PROGRAM([],
216 [[volatile int a=0;
217 int o=0, n=1, r;
218 asm volatile ("ldrex %0, [%1]\n"
219 "subs %0, %0, %2\n"
220 "strexeq %0, %3, [%1]\n"
221 : "=&r" (r)
222 : "r" (&a), "Ir" (o), "r" (n)
223 : "cc");
224 return (a==1 ? 0 : -1);
225 ]]),
226 [pulseaudio_cv_support_arm_atomic_ops=yes],
227 [pulseaudio_cv_support_arm_atomic_ops=no])
228 ])
229 AS_IF([test "$pulseaudio_cv_support_arm_atomic_ops" = "yes"], [
230 AC_DEFINE([ATOMIC_ARM_INLINE_ASM], 1, [Have ARM atomic instructions.])
231 need_libatomic_ops=no
232 ])
233 fi
234 ;;
235 *-netbsdelf5*)
236 AC_MSG_RESULT([yes])
237 need_libatomic_ops=no
238 ;;
239 *-freebsd*)
240 AC_MSG_RESULT([yes])
241 need_libatomic_ops=no
242 ;;
243 *)
244 AC_MSG_RESULT([unknown])
245 ;;
246 esac
247 fi
248
249 # If we're on ARM, check for the ARMV6 instructions we need */
250 case $host in
251 arm*)
252 AC_CACHE_CHECK([support for required armv6 instructions],
253 pulseaudio_cv_support_armv6,
254 [AC_COMPILE_IFELSE(
255 AC_LANG_PROGRAM([],
256 [[volatile int a = -60000, b = 0xaaaabbbb, c = 0xccccdddd;
257 asm volatile ("ldr r0, %2 \n"
258 "ldr r2, %3 \n"
259 "ldr r3, %4 \n"
260 "ssat r1, #8, r0 \n"
261 "str r1, %0 \n"
262 "pkhbt r1, r3, r2, LSL #8 \n"
263 "str r1, %1 \n"
264 : "=m" (a), "=m" (b)
265 : "m" (a), "m" (b), "m" (c)
266 : "r0", "r1", "r2", "r3", "cc");
267 return (a == -128 && b == 0xaabbdddd) ? 0 : -1;
268 ]]),
269 [pulseaudio_cv_support_armv6=yes],
270 [pulseaudio_cv_support_armv6=no])
271 ])
272 AS_IF([test "$pulseaudio_cv_support_armv6" = "yes"], [
273 AC_DEFINE([HAVE_ARMV6], 1, [Have ARMv6 instructions.])
274 ])
275 ;;
276 *)
277 ;;
278 esac
279
280 CC_CHECK_TLS
281
282 AC_CACHE_CHECK([whether $CC knows _Bool],
283 pulseaudio_cv__Bool,
284 [AC_COMPILE_IFELSE(
285 AC_LANG_PROGRAM([], [[_Bool b;]]),
286 [pulseaudio_cv__Bool=yes],
287 [pulseaudio_cv__Bool=no])
288 ])
289
290 AS_IF([test "$pulseaudio_cv__Bool" = "yes"], [
291 AC_DEFINE([HAVE_STD_BOOL], 1, [Have _Bool.])
292 ])
293
294 #### libtool stuff ####
295 LT_PREREQ(2.2)
296 LT_INIT([dlopen win32-dll disable-static])
297
298 dnl Unfortunately, even up to libtool 2.2.6a there is no way to know
299 dnl exactly which version of libltdl is present in the system, so we
300 dnl just assume that it's a working version as long as we have the
301 dnl library and the header files.
302 dnl
303 dnl As an extra safety device, check for lt_dladvise_init() which is
304 dnl only implemented in libtool 2.x, and refine as we go if we have
305 dnl refined requirements.
306 dnl
307 dnl Check the header files first since the system may have a
308 dnl libltdl.so for runtime, but no headers, and we want to bail out as
309 dnl soon as possible.
310 dnl
311 dnl We don't need any special variable for this though, since the user
312 dnl can give the proper place to find libltdl through the standard
313 dnl variables like LDFLAGS and CPPFLAGS.
314
315 AC_CHECK_HEADER([ltdl.h],
316 [AC_CHECK_LIB([ltdl], [lt_dladvise_init], [LIBLTDL=-lltdl], [LIBLTDL=])],
317 [LIBLTDL=])
318
319 AS_IF([test "x$LIBLTDL" = "x"],
320 [AC_MSG_ERROR([Unable to find libltdl version 2. Makes sure you have libtool 2.2 or later installed.])])
321 AC_SUBST([LIBLTDL])
322
323 #### Determine build environment ####
324
325 os_is_win32=0
326 os_is_darwin=0
327
328 case "$host_os" in
329 mingw*)
330 AC_DEFINE([OS_IS_WIN32], 1, [Build target is Windows.])
331 os_is_win32=1
332 ;;
333 darwin*)
334 AC_DEFINE([OS_IS_DARWIN], 1, [Build target is Darwin.])
335 os_is_darwin=1
336 ;;
337 esac
338
339 AM_CONDITIONAL(OS_IS_WIN32, test "x$os_is_win32" = "x1")
340 AM_CONDITIONAL(OS_IS_DARWIN, test "x$os_is_darwin" = "x1")
341
342 ###################################
343 # Basic environment checks #
344 ###################################
345
346 #### Checks for header files. ####
347
348 # ISO
349 AC_HEADER_STDC
350
351 # POSIX
352 AC_CHECK_HEADERS_ONCE([arpa/inet.h glob.h grp.h netdb.h netinet/in.h \
353 netinet/in_systm.h netinet/tcp.h poll.h pwd.h sched.h \
354 sys/mman.h sys/resource.h sys/select.h sys/socket.h sys/wait.h \
355 sys/uio.h syslog.h sys/dl.h dlfcn.h linux/sockios.h])
356 AC_CHECK_HEADERS([netinet/ip.h], [], [],
357 [#include <sys/types.h>
358 #if HAVE_NETINET_IN_H
359 # include <netinet/in.h>
360 #endif
361 #if HAVE_NETINET_IN_SYSTM_H
362 # include <netinet/in_systm.h>
363 #endif
364 ])
365 AC_CHECK_HEADERS([regex.h], [HAVE_REGEX=1], [HAVE_REGEX=0])
366 AC_CHECK_HEADERS([sys/un.h], [HAVE_AF_UNIX=1], [HAVE_AF_UNIX=0])
367
368 AM_CONDITIONAL(HAVE_REGEX, test "x$HAVE_REGEX" = "x1")
369 AM_CONDITIONAL(HAVE_AF_UNIX, test "x$HAVE_AF_UNIX" = "x1")
370
371 # Linux
372 AC_CHECK_HEADERS([linux/input.h], [HAVE_EVDEV=1], [HAVE_EVDEV=0])
373
374 AM_CONDITIONAL([HAVE_EVDEV], [test "x$HAVE_EVDEV" = "x1"])
375
376 AC_CHECK_HEADERS_ONCE([sys/prctl.h])
377
378 # Solaris
379 AC_CHECK_HEADERS_ONCE([sys/filio.h])
380
381 # Windows
382 AC_CHECK_HEADERS_ONCE([windows.h winsock2.h ws2tcpip.h])
383
384 # NetBSD
385 AC_CHECK_HEADERS_ONCE([sys/atomic.h])
386
387 # Other
388 AC_CHECK_HEADERS_ONCE([sys/ioctl.h])
389 AC_CHECK_HEADERS_ONCE([byteswap.h])
390 AC_CHECK_HEADERS_ONCE([sys/syscall.h])
391 AC_CHECK_HEADERS_ONCE([sys/eventfd.h])
392 AC_CHECK_HEADERS_ONCE([execinfo.h])
393 AC_CHECK_HEADERS_ONCE([langinfo.h])
394
395 #### Typdefs, structures, etc. ####
396
397 AC_C_CONST
398 AC_C_BIGENDIAN
399 AC_TYPE_PID_T
400 AC_TYPE_SIZE_T
401 AC_CHECK_TYPES(ssize_t, , [AC_DEFINE([ssize_t], [signed long],
402 [Define ssize_t if it is not done by the standard libs.])])
403 AC_TYPE_OFF_T
404
405 AC_TYPE_UID_T
406 AC_CHECK_DECLS(environ)
407
408 AC_CHECK_DEFINE([SIGXCPU], [signal.h], [
409 HAVE_SIGXCPU=1
410 AC_DEFINE([HAVE_SIGXCPU], 1, [Have SIGXCPU?])
411 ], [HAVE_SIGXCPU=0])
412 AM_CONDITIONAL(HAVE_SIGXCPU, test "x$HAVE_SIGXCPU" = "x1")
413
414 # Solaris lacks this
415 AC_CHECK_DEFINE([INADDR_NONE], [netinet/in.h], [],
416 [AC_CHECK_DEFINE([INADDR_NONE], [winsock2.h], [],
417 [AC_DEFINE([INADDR_NONE], [0xffffffff], [Define INADDR_NONE if not found in <netinet/in.h>])])])
418
419 #### POSIX threads ####
420
421 ACX_PTHREAD
422
423 #### Check for libs ####
424
425 # ISO
426 AC_SEARCH_LIBS([pow], [m])
427
428 # POSIX
429 AC_SEARCH_LIBS([sched_setscheduler], [rt])
430 AC_SEARCH_LIBS([dlopen], [dl])
431 AC_SEARCH_LIBS([shm_open], [rt])
432 AC_SEARCH_LIBS([inet_ntop], [nsl])
433 AC_SEARCH_LIBS([timer_create], [rt])
434 AC_SEARCH_LIBS([pthread_setaffinity_np], [pthread])
435
436 # BSD
437 AC_SEARCH_LIBS([connect], [socket])
438 AC_SEARCH_LIBS([backtrace], [execinfo])
439
440 # Non-standard
441
442 # This magic is needed so we do not needlessly add static libs to the win32
443 # build, disabling its ability to make dlls.
444 AC_CHECK_FUNCS([getopt_long], [], [AC_CHECK_LIB([iberty], [getopt_long])])
445
446 # Darwin/OS X
447 if test "x$os_is_darwin" = "x1" ; then
448 AC_MSG_CHECKING([looking for Apple CoreService Framework])
449 # How do I check a framework "library" - AC_CHECK_LIB prob. won't work??, just assign LIBS & hope
450 AC_CHECK_HEADER([/Developer/Headers/FlatCarbon/CoreServices.h],
451 [LIBS="$LIBS -framework CoreServices"],
452 [AC_MSG_ERROR([CoreServices.h header file not found]) ])
453
454 AC_MSG_RESULT([ok])
455 AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [Using clock_gettime() replacement])
456 HAVE_BONJOUR=1
457 fi
458
459 AC_SUBST(HAVE_BONJOUR)
460 AM_CONDITIONAL([HAVE_BONJOUR], [test "x$HAVE_BONJOUR" = x1])
461
462 #### Check for functions ####
463
464 # ISO
465 AC_CHECK_FUNCS_ONCE([lrintf strtof])
466
467 # POSIX
468 AC_FUNC_FORK
469 AC_FUNC_GETGROUPS
470 AC_FUNC_SELECT_ARGTYPES
471 AC_CHECK_FUNCS_ONCE([chmod chown fstat fchown fchmod clock_gettime getaddrinfo getgrgid_r getgrnam_r \
472 getpwnam_r getpwuid_r gettimeofday getuid inet_ntop inet_pton mlock nanosleep \
473 pipe posix_fadvise posix_madvise posix_memalign setpgid setsid shm_open \
474 sigaction sleep symlink sysconf uname pthread_setaffinity_np])
475 AC_CHECK_FUNCS([mkfifo], [HAVE_MKFIFO=1], [HAVE_MKFIFO=0])
476
477 AM_CONDITIONAL(HAVE_MKFIFO, test "x$HAVE_MKFIFO" = "x1")
478
479 # X/OPEN
480 AC_CHECK_FUNCS_ONCE([readlink])
481
482 # SUSv2
483 AC_CHECK_FUNCS_ONCE([ctime_r usleep])
484
485 # SUSv3
486 AC_CHECK_FUNCS_ONCE([strerror_r])
487
488 # BSD
489 AC_CHECK_FUNCS_ONCE([lstat])
490
491 # Non-standard
492
493 AC_CHECK_FUNCS_ONCE([setresuid setresgid setreuid setregid seteuid setegid ppoll strsignal sig2str strtof_l pipe2 accept4])
494
495 AC_FUNC_ALLOCA
496
497 AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
498 pulseaudio_cv_PTHREAD_PRIO_INHERIT,
499 [save_CC=$CC; CC=$PTHREAD_CC
500 save_CFLAGS=$CFLAGS; CFLAGS=$PTHREAD_CFLAGS
501 save_LIBS=$LIBS; LIBS=$PTHREAD_LIBS
502 AC_LINK_IFELSE(
503 AC_LANG_PROGRAM(
504 [[
505 #include <pthread.h>
506 ]],
507 [[int i = PTHREAD_PRIO_INHERIT;]]),
508 [pulseaudio_cv_PTHREAD_PRIO_INHERIT=yes],
509 [pulseaudio_cv_PTHREAD_PRIO_INHERIT=no])
510 CC=$save_CC
511 CFLAGS=$save_CFLAGS
512 LIBS=$save_LIBS
513 ])
514
515 AS_IF([test "$pulseaudio_cv_PTHREAD_PRIO_INHERIT" = "yes"], [
516 AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.])
517 ])
518
519 AC_DEFINE_UNQUOTED(PA_CFLAGS,"$CFLAGS", [The CFLAGS used during compilation])
520
521 #### Large File-Support (LFS) ####
522
523 AC_SYS_LARGEFILE
524
525 # Check for open64 to know if the current system does have open64() and similar functions
526 AC_CHECK_FUNCS_ONCE([open64])
527
528 #### [lib]iconv ####
529
530 AM_ICONV
531
532 IT_PROG_INTLTOOL([0.35.0])
533 GETTEXT_PACKAGE=pulseaudio
534 AC_SUBST([GETTEXT_PACKAGE])
535 AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package])
536 AM_GLIB_GNU_GETTEXT
537
538 pulselocaledir='${prefix}/${DATADIRNAME}/locale'
539 AC_SUBST(pulselocaledir)
540
541 ###################################
542 # External libraries #
543 ###################################
544
545 #### pkg-config ####
546
547 PKG_PROG_PKG_CONFIG
548
549 #### X11 (optional) ####
550
551 AC_ARG_ENABLE([x11],
552 AS_HELP_STRING([--disable-x11],[Disable optional X11 support]),
553 [
554 case "${enableval}" in
555 yes) x11=yes ;;
556 no) x11=no ;;
557 *) AC_MSG_ERROR(bad value ${enableval} for --disable-x11) ;;
558 esac
559 ],
560 [x11=auto])
561
562 if test "x${x11}" != xno ; then
563 PKG_CHECK_MODULES(X11, [ x11-xcb ice sm xtst xcb-atom ],
564 HAVE_X11=1,
565 [
566 HAVE_X11=0
567 if test "x$x11" = xyes ; then
568 AC_MSG_ERROR([*** X11 not found])
569 fi
570 ])
571 else
572 HAVE_X11=0
573 fi
574
575 if test "x${HAVE_X11}" = x1 ; then
576 AC_DEFINE([HAVE_X11], 1, [Have X11?])
577 fi
578
579 AC_SUBST(X11_CFLAGS)
580 AC_SUBST(X11_LIBS)
581 AC_SUBST(HAVE_X11)
582 AM_CONDITIONAL([HAVE_X11], [test "x$HAVE_X11" = x1])
583
584 #### Capabilities (optional) ####
585
586 CAP_LIBS=''
587
588 AC_ARG_WITH(
589 [caps],
590 AS_HELP_STRING([--without-caps],[Omit support for POSIX capabilities.]))
591
592 if test "x${with_caps}" != "xno"; then
593 AC_SEARCH_LIBS([cap_init], [cap], [], [
594 if test "x${with_caps}" = "xyes" ; then
595 AC_MSG_ERROR([*** POSIX caps libraries not found])
596 fi])
597 AC_CHECK_HEADERS([sys/capability.h], [], [
598 if test "x${with_caps}" = "xyes" ; then
599 AC_MSG_ERROR([*** POSIX caps headers not found])
600 fi])
601 fi
602
603 #### Valgrind (optional) ####
604
605 AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h])
606
607 #### Sound file ####
608
609 PKG_CHECK_MODULES(LIBSNDFILE, [ sndfile >= 1.0.20 ])
610 AC_SUBST(LIBSNDFILE_CFLAGS)
611 AC_SUBST(LIBSNDFILE_LIBS)
612
613 PKG_CHECK_MODULES(LIBSPEEX, [ speexdsp >= 1.2 ])
614 AC_SUBST(LIBSPEEX_CFLAGS)
615 AC_SUBST(LIBSPEEX_LIBS)
616
617 #### atomic-ops ###
618
619 AC_MSG_CHECKING([whether we need libatomic_ops])
620 if test "x$need_libatomic_ops" = "xyes"; then
621 AC_MSG_RESULT([yes])
622 AC_CHECK_HEADERS([atomic_ops.h], [], [
623 AC_MSG_ERROR([*** libatomic-ops headers not found])
624 ])
625
626 # Win32 does not need the lib and breaks horribly if we try to include it
627 if test "x$os_is_win32" != "x1" ; then
628 LIBS="$LIBS -latomic_ops"
629 fi
630 else
631 AC_MSG_RESULT([no])
632 fi
633
634 #### Libsamplerate support (optional) ####
635
636 AC_ARG_ENABLE([samplerate],
637 AS_HELP_STRING([--disable-samplerate],[Disable optional libsamplerate support]),
638 [
639 case "${enableval}" in
640 yes) samplerate=yes ;;
641 no) samplerate=no ;;
642 *) AC_MSG_ERROR(bad value ${enableval} for --disable-samplerate) ;;
643 esac
644 ],
645 [samplerate=auto])
646
647 if test "x${samplerate}" != xno ; then
648 PKG_CHECK_MODULES(LIBSAMPLERATE, [ samplerate >= 0.1.0 ],
649 HAVE_LIBSAMPLERATE=1,
650 [
651 HAVE_LIBSAMPLERATE=0
652 if test "x$samplerate" = xyes ; then
653 AC_MSG_ERROR([*** Libsamplerate not found])
654 fi
655 ])
656 else
657 HAVE_LIBSAMPLERATE=0
658 fi
659
660 if test "x${HAVE_LIBSAMPLERATE}" = x1 ; then
661 AC_DEFINE([HAVE_LIBSAMPLERATE], 1, [Have libsamplerate?])
662 fi
663
664 AC_SUBST(LIBSAMPLERATE_CFLAGS)
665 AC_SUBST(LIBSAMPLERATE_LIBS)
666 AC_SUBST(HAVE_LIBSAMPLERATE)
667 AM_CONDITIONAL([HAVE_LIBSAMPLERATE], [test "x$HAVE_LIBSAMPLERATE" = x1])
668
669 #### Database support ####
670
671 HAVE_TDB=0
672 HAVE_GDBM=0
673 HAVE_SIMPLEDB=0
674
675 AC_ARG_WITH(
676 [database],
677 AS_HELP_STRING([--with-database=auto|tdb|gdbm|simple],[Choose database backend.]),[],[with_database=auto])
678
679 if test "x${with_database}" = "xauto" -o "x${with_database}" = "xtdb" ; then
680 PKG_CHECK_MODULES(TDB, [ tdb ],
681 [
682 HAVE_TDB=1
683 with_database=tdb
684 ], [
685 if test "x${with_database}" = "xtdb" ; then
686 AC_MSG_ERROR([*** tdb not found])
687 fi
688 ])
689 fi
690
691 if test "x${with_database}" = "xauto" -o "x${with_database}" = "xgdbm" ; then
692 have_gdbm=yes
693
694 AC_CHECK_LIB(gdbm, gdbm_open, [], [have_gdbm=no])
695 AC_CHECK_HEADERS(gdbm.h, [], [have_gdbm=no])
696
697 if test "x${have_gdbm}" = "xyes" ; then
698 HAVE_GDBM=1
699 GDBM_CFLAGS=
700 GDBM_LIBS=-lgdbm
701 with_database=gdbm
702 elif test "x${with_database}" = "xgdbm"; then
703 AC_MSG_ERROR([*** gdbm not found])
704 fi
705 fi
706
707 if test "x${with_database}" = "xauto" -o "x${with_database}" = "xsimple" ; then
708 HAVE_SIMPLEDB=1
709 with_database=simple
710 fi
711
712 if test "x${HAVE_TDB}" != x1 -a "x${HAVE_GDBM}" != x1 -a "x${HAVE_SIMPLEDB}" != x1; then
713 AC_MSG_ERROR([*** missing database backend])
714 fi
715
716 if test "x${HAVE_TDB}" = x1 ; then
717 AC_DEFINE([HAVE_TDB], 1, [Have tdb?])
718 fi
719
720 if test "x${HAVE_GDBM}" = x1 ; then
721 AC_DEFINE([HAVE_GDBM], 1, [Have gdbm?])
722 fi
723
724 if test "x${HAVE_SIMPLEDB}" = x1 ; then
725 AC_DEFINE([HAVE_SIMPLEDB], 1, [Have simple?])
726 fi
727
728 AC_SUBST(TDB_CFLAGS)
729 AC_SUBST(TDB_LIBS)
730 AC_SUBST(HAVE_TDB)
731 AM_CONDITIONAL([HAVE_TDB], [test "x$HAVE_TDB" = x1])
732
733 AC_SUBST(GDBM_CFLAGS)
734 AC_SUBST(GDBM_LIBS)
735 AC_SUBST(HAVE_GDBM)
736 AM_CONDITIONAL([HAVE_GDBM], [test "x$HAVE_GDBM" = x1])
737
738 AC_SUBST(HAVE_SIMPLEDB)
739 AM_CONDITIONAL([HAVE_SIMPLEDB], [test "x$HAVE_SIMPLEDB" = x1])
740
741 #### OSS support (optional) ####
742
743 AC_ARG_ENABLE([oss-output],
744 AS_HELP_STRING([--disable-oss-output],[Disable optional OSS output support]),
745 [
746 case "${enableval}" in
747 yes) oss_output=yes ;;
748 no) oss_output=no ;;
749 *) AC_MSG_ERROR(bad value ${enableval} for --disable-oss-output) ;;
750 esac
751 ],
752 [oss_output=auto])
753
754 AC_ARG_ENABLE([oss-wrapper],
755 AS_HELP_STRING([--disable-oss-wrapper],[Disable optional OSS wrapper support]),
756 [
757 case "${enableval}" in
758 yes) oss_wrapper=yes ;;
759 no) oss_wrapper=no ;;
760 *) AC_MSG_ERROR(bad value ${enableval} for --disable-oss-wrapper) ;;
761 esac
762 ],
763 [oss_wrapper=auto])
764
765 if test "x${oss_output}" != xno || test "x${oss_wrapper}" != "xno"; then
766 AC_CHECK_HEADERS([sys/soundcard.h],
767 [
768 if test "x${oss_output}" != "xno"; then
769 AC_DEFINE([HAVE_OSS_OUTPUT], 1, [Have OSS output?])
770 fi
771 if test "x${oss_wrapper}" != "xno"; then
772 AC_DEFINE([HAVE_OSS_WRAPPER], 1, [Have OSS wrapper (padsp)?])
773 fi
774 HAVE_OSS=1
775 ],
776 [
777 HAVE_OSS=0
778 if test "x$oss_output" = xyes || test "x$oss_wrapper" = "xyes"; then
779 AC_MSG_ERROR([*** OSS support not found])
780 fi
781 ])
782 else
783 HAVE_OSS=0
784 fi
785
786 AC_SUBST(HAVE_OSS)
787 AM_CONDITIONAL([HAVE_OSS_OUTPUT], [test "x$HAVE_OSS" = x1 && test "x${oss_output}" != "xno"])
788 AM_CONDITIONAL([HAVE_OSS_WRAPPER], [test "x$HAVE_OSS" = x1 && test "x${oss_wrapper}" != "xno"])
789
790 #### CoreAudio support (optional) ####
791
792 AC_ARG_ENABLE([coreaudio-output],
793 AS_HELP_STRING([--disable-coreaudio-output],[Disable optional CoreAudio output support]),
794 [
795 case "${enableval}" in
796 yes) coreaudio_enabled=yes ;;
797 no) coreaudio_enabled=no ;;
798 *) AC_MSG_ERROR(bad value ${enableval} for --disable-coreaudio-output) ;;
799 esac
800 ],
801 [coreaudio_enabled=auto])
802
803 if test "x${coreaudio_enabled}" != xno ; then
804 AC_CHECK_HEADERS([CoreAudio/CoreAudio.h], HAVE_COREAUDIO=1)
805 else
806 HAVE_COREAUDIO=0
807 fi
808
809 AC_SUBST(HAVE_COREAUDIO)
810 AM_CONDITIONAL([HAVE_COREAUDIO], [test "x$HAVE_COREAUDIO" = x1 && test "x${coreaudio_enabled}" != "xno"])
811
812 #### ALSA support (optional) ####
813
814 AC_ARG_ENABLE([alsa],
815 AS_HELP_STRING([--disable-alsa],[Disable optional ALSA support]),
816 [
817 case "${enableval}" in
818 yes) alsa=yes ;;
819 no) alsa=no ;;
820 *) AC_MSG_ERROR(bad value ${enableval} for --disable-alsa) ;;
821 esac
822 ],
823 [alsa=auto])
824
825 if test "x${alsa}" != xno ; then
826 PKG_CHECK_MODULES(ASOUNDLIB, [ alsa >= 1.0.19 ],
827 [
828 HAVE_ALSA=1
829 AC_DEFINE([HAVE_ALSA], 1, [Have ALSA?])
830 ],
831 [
832 HAVE_ALSA=0
833 if test "x$alsa" = xyes ; then
834 AC_MSG_ERROR([*** Needed alsa >= 1.0.19 support not found])
835 fi
836 ])
837 else
838 HAVE_ALSA=0
839 fi
840
841 AC_SUBST(ASOUNDLIB_CFLAGS)
842 AC_SUBST(ASOUNDLIB_LIBS)
843 AC_SUBST(HAVE_ALSA)
844 AM_CONDITIONAL([HAVE_ALSA], [test "x$HAVE_ALSA" = x1])
845
846 #### Solaris audio support (optional) ####
847
848 AC_ARG_ENABLE([solaris],
849 AS_HELP_STRING([--disable-solaris],[Disable optional Solaris audio support]),
850 [
851 case "${enableval}" in
852 yes) solaris=yes ;;
853 no) solaris=no ;;
854 *) AC_MSG_ERROR(bad value ${enableval} for --disable-solaris) ;;
855 esac
856 ],
857 [solaris=auto])
858
859 if test "x${solaris}" != xno ; then
860 AC_CHECK_HEADERS([sys/audio.h],
861 [
862 HAVE_SOLARIS=1
863 AC_DEFINE([HAVE_SOLARIS], 1, [Have Solaris audio?])
864 ],
865 [
866 HAVE_SOLARIS=0
867 if test "x$solaris" = xyes ; then
868 AC_MSG_ERROR([*** Solaris audio support not found])
869 fi
870 ])
871 else
872 HAVE_SOLARIS=0
873 fi
874
875 AC_SUBST(HAVE_SOLARIS)
876 AM_CONDITIONAL([HAVE_SOLARIS], [test "x$HAVE_SOLARIS" = x1])
877
878 #### GLib 2 support (optional) ####
879
880 AC_ARG_ENABLE([glib2],
881 AS_HELP_STRING([--disable-glib2],[Disable optional GLib 2 support]),
882 [
883 case "${enableval}" in
884 yes) glib2=yes ;;
885 no) glib2=no ;;
886 *) AC_MSG_ERROR(bad value ${enableval} for --disable-glib2) ;;
887 esac
888 ],
889 [glib2=auto])
890
891 if test "x${glib2}" != xno ; then
892 PKG_CHECK_MODULES(GLIB20, [ glib-2.0 >= 2.4.0 ],
893 HAVE_GLIB20=1,
894 [
895 HAVE_GLIB20=0
896 if test "x$glib2" = xyes ; then
897 AC_MSG_ERROR([*** GLib 2 support not found])
898 fi
899 ])
900 else
901 HAVE_GLIB20=0
902 fi
903
904 AC_SUBST(GLIB20_CFLAGS)
905 AC_SUBST(GLIB20_LIBS)
906 AC_SUBST(HAVE_GLIB20)
907 AM_CONDITIONAL([HAVE_GLIB20], [test "x$HAVE_GLIB20" = x1])
908
909 if test "x$HAVE_GLIB20" = x1 ; then
910 AC_DEFINE([HAVE_GLIB], 1, [Have GLIB?])
911 fi
912
913 #### GTK2 support (optional) ####
914
915 AC_ARG_ENABLE([gtk2],
916 AS_HELP_STRING([--disable-gtk2],[Disable optional Gtk+ 2 support]),
917 [
918 case "${enableval}" in
919 yes) gtk2=yes ;;
920 no) gtk2=no ;;
921 *) AC_MSG_ERROR(bad value ${enableval} for --disable-gtk2) ;;
922 esac
923 ],
924 [gtk2=auto])
925
926 if test "x${gtk2}" != xno ; then
927 PKG_CHECK_MODULES(GTK20, [ gtk+-2.0 >= 2.4.0 ],
928 HAVE_GTK20=1,
929 [
930 HAVE_GTK20=0
931 if test "x$gtk2" = xyes ; then
932 AC_MSG_ERROR([*** Gtk+ 2 support not found])
933 fi
934 ])
935 else
936 HAVE_GTK20=0
937 fi
938
939 AC_SUBST(GTK20_CFLAGS)
940 AC_SUBST(GTK20_LIBS)
941 AC_SUBST(HAVE_GTK20)
942 AM_CONDITIONAL([HAVE_GTK20], [test "x$HAVE_GTK20" = x1])
943
944 if test "x$HAVE_GTK20" = x1 ; then
945 AC_DEFINE([HAVE_GTK], 1, [Have GTK?])
946 fi
947
948 #### GConf support (optional) ####
949
950 AC_ARG_ENABLE([gconf],
951 AS_HELP_STRING([--disable-gconf],[Disable optional GConf support]),
952 [
953 case "${enableval}" in
954 yes) gconf=yes ;;
955 no) gconf=no ;;
956 *) AC_MSG_ERROR(bad value ${enableval} for --disable-gconf) ;;
957 esac
958 ],
959 [gconf=auto])
960
961 if test "x${gconf}" != xno ; then
962 PKG_CHECK_MODULES(GCONF, [ gconf-2.0 >= 2.4.0 gobject-2.0 ],
963 HAVE_GCONF=1,
964 [
965 HAVE_GCONF=0
966 if test "x$gconf" = xyes ; then
967 AC_MSG_ERROR([*** GConf support not found])
968 fi
969 ])
970 else
971 HAVE_GCONF=0
972 fi
973
974 AC_SUBST(GCONF_CFLAGS)
975 AC_SUBST(GCONF_LIBS)
976 AC_SUBST(HAVE_GCONF)
977 AM_CONDITIONAL([HAVE_GCONF], [test "x$HAVE_GCONF" = x1])
978
979 #### Avahi support (optional) ####
980
981 AC_ARG_ENABLE([avahi],
982 AS_HELP_STRING([--disable-avahi],[Disable optional Avahi support]),
983 [
984 case "${enableval}" in
985 yes) avahi=yes ;;
986 no) avahi=no ;;
987 *) AC_MSG_ERROR(bad value ${enableval} for --disable-avahi) ;;
988 esac
989 ],
990 [avahi=auto])
991
992 if test "x${avahi}" != xno ; then
993 PKG_CHECK_MODULES(AVAHI, [ avahi-client >= 0.6.0 ],
994 HAVE_AVAHI=1,
995 [
996 HAVE_AVAHI=0
997 if test "x$avahi" = xyes ; then
998 AC_MSG_ERROR([*** Avahi support not found])
999 fi
1000 ])
1001 else
1002 HAVE_AVAHI=0
1003 fi
1004
1005 AC_SUBST(AVAHI_CFLAGS)
1006 AC_SUBST(AVAHI_LIBS)
1007 AC_SUBST(HAVE_AVAHI)
1008 AM_CONDITIONAL([HAVE_AVAHI], [test "x$HAVE_AVAHI" = x1])
1009
1010 ### JACK (optional) ####
1011
1012 AC_ARG_ENABLE([jack],
1013 AS_HELP_STRING([--disable-jack],[Disable optional JACK support]),
1014 [
1015 case "${enableval}" in
1016 yes) jack=yes ;;
1017 no) jack=no ;;
1018 *) AC_MSG_ERROR(bad value ${enableval} for --disable-jack) ;;
1019 esac
1020 ],
1021 [jack=auto])
1022
1023 if test "x${jack}" != xno ; then
1024 PKG_CHECK_MODULES(JACK, [ jack >= 0.100 ],
1025 HAVE_JACK=1,
1026 [
1027 HAVE_JACK=0
1028 if test "x$jack" = xyes ; then
1029 AC_MSG_ERROR([*** JACK support not found])
1030 fi
1031 ])
1032 else
1033 HAVE_JACK=0
1034 fi
1035
1036 AC_SUBST(JACK_CFLAGS)
1037 AC_SUBST(JACK_LIBS)
1038 AC_SUBST(HAVE_JACK)
1039 AM_CONDITIONAL([HAVE_JACK], [test "x$HAVE_JACK" = x1])
1040
1041 #### Async DNS support (optional) ####
1042
1043 AC_ARG_ENABLE([asyncns],
1044 AS_HELP_STRING([--disable-asyncns],[Disable optional Async DNS support]),
1045 [
1046 case "${enableval}" in
1047 yes) asyncns=yes ;;
1048 no) asyncns=no ;;
1049 *) AC_MSG_ERROR(bad value ${enableval} for --disable-asyncns) ;;
1050 esac
1051 ],
1052 [asyncns=auto])
1053
1054 if test "x${asyncns}" != xno ; then
1055 PKG_CHECK_MODULES(LIBASYNCNS, [ libasyncns >= 0.1 ],
1056 HAVE_LIBASYNCNS=1,
1057 [
1058 HAVE_LIBASYNCNS=0
1059 if test "x$asyncns" = xyes ; then
1060 AC_MSG_ERROR([*** Async DNS support not found])
1061 fi
1062 ])
1063 else
1064 HAVE_LIBASYNCNS=0
1065 fi
1066
1067 AC_SUBST(LIBASYNCNS_CFLAGS)
1068 AC_SUBST(LIBASYNCNS_LIBS)
1069 AC_SUBST(HAVE_LIBASYNCNS)
1070 AM_CONDITIONAL([HAVE_LIBASYNCNS], [test "x$HAVE_LIBASYNCNS" = x1])
1071
1072 if test "x$HAVE_LIBASYNCNS" != "x0" ; then
1073 AC_DEFINE([HAVE_LIBASYNCNS], 1, [Have libasyncns?])
1074 fi
1075
1076 #### TCP wrappers (optional) ####
1077
1078 AC_ARG_ENABLE([tcpwrap],
1079 AS_HELP_STRING([--disable-tcpwrap],[Disable optional TCP wrappers support]),
1080 [
1081 case "${enableval}" in
1082 yes) tcpwrap=yes ;;
1083 no) tcpwrap=no ;;
1084 *) AC_MSG_ERROR(bad value ${enableval} for --disable-tcpwrap) ;;
1085 esac
1086 ],
1087 [tcpwrap=auto])
1088
1089 if test "x${tcpwrap}" != xno ; then
1090 ACX_LIBWRAP
1091 if test "x${LIBWRAP_LIBS}" = x && test "x$tcpwrap" = xyes ; then
1092 AC_MSG_ERROR([*** TCP wrappers support not found])
1093 fi
1094 else
1095 LIBWRAP_LIBS=
1096 fi
1097
1098 AC_SUBST(LIBWRAP_LIBS)
1099
1100 #### LIRC support (optional) ####
1101
1102 AC_ARG_ENABLE([lirc],
1103 AS_HELP_STRING([--disable-lirc],[Disable optional LIRC support]),
1104 [
1105 case "${enableval}" in
1106 yes) lirc=yes ;;
1107 no) lirc=no ;;
1108 *) AC_MSG_ERROR(bad value ${enableval} for --disable-lirc) ;;
1109 esac
1110 ],
1111 [lirc=auto])
1112
1113 if test "x${lirc}" != xno ; then
1114 ACX_LIRC
1115 if test "x${HAVE_LIRC}" = x0 && test "x$lirc" = xyes ; then
1116 AC_MSG_ERROR([*** LIRC support not found])
1117 fi
1118 else
1119 HAVE_LIRC=0
1120 fi
1121
1122 AC_SUBST(LIRC_CFLAGS)
1123 AC_SUBST(LIRC_LIBS)
1124 AM_CONDITIONAL([HAVE_LIRC], [test "x$HAVE_LIRC" = x1])
1125
1126 #### HAL support (optional) ####
1127
1128 AC_ARG_ENABLE([hal],
1129 AS_HELP_STRING([--disable-hal],[Disable optional HAL support]),
1130 [
1131 case "${enableval}" in
1132 yes) hal=yes ;;
1133 no) hal=no ;;
1134 *) AC_MSG_ERROR(bad value ${enableval} for --disable-hal) ;;
1135 esac
1136 ],
1137 [hal=auto])
1138 if test "x${hal}" != xno -a \( "x$HAVE_OSS" = "x1" -o "x$HAVE_ALSA" = "x1" \) ; then
1139 PKG_CHECK_MODULES(HAL, [ hal >= 0.5.11 ],
1140 [
1141 HAVE_HAL=1
1142 AC_DEFINE([HAVE_HAL], 1, [Have HAL.])
1143 ],
1144 [
1145 HAVE_HAL=0
1146 if test "x$hal" = xyes ; then
1147 AC_MSG_ERROR([*** HAL support not found])
1148 fi
1149 ])
1150 else
1151 HAVE_HAL=0
1152 fi
1153
1154 AC_SUBST(HAL_CFLAGS)
1155 AC_SUBST(HAL_LIBS)
1156 AC_SUBST(HAVE_HAL)
1157 AM_CONDITIONAL([HAVE_HAL], [test "x$HAVE_HAL" = x1])
1158
1159 #### UDEV support (optional) ####
1160
1161 AC_ARG_ENABLE([udev],
1162 AS_HELP_STRING([--disable-udev],[Disable optional UDEV support]),
1163 [
1164 case "${enableval}" in
1165 yes) udev=yes ;;
1166 no) udev=no ;;
1167 *) AC_MSG_ERROR(bad value ${enableval} for --disable-udev) ;;
1168 esac
1169 ],
1170 [udev=auto])
1171 if test "x${udev}" != xno -a \( "x$HAVE_OSS" = "x1" -o "x$HAVE_ALSA" = "x1" \) ; then
1172 PKG_CHECK_MODULES(UDEV, [ libudev >= 143 ],
1173 [
1174 HAVE_UDEV=1
1175 AC_DEFINE([HAVE_UDEV], 1, [Have UDEV.])
1176 ],
1177 [
1178 HAVE_UDEV=0
1179 if test "x$udev" = xyes ; then
1180 AC_MSG_ERROR([*** UDEV support not found])
1181 fi
1182 ])
1183 else
1184 HAVE_UDEV=0
1185 fi
1186
1187 AC_SUBST(UDEV_CFLAGS)
1188 AC_SUBST(UDEV_LIBS)
1189 AC_SUBST(HAVE_UDEV)
1190 AM_CONDITIONAL([HAVE_UDEV], [test "x$HAVE_UDEV" = x1])
1191
1192 #### BlueZ support (optional) ####
1193
1194 AC_ARG_ENABLE([bluez],
1195 AS_HELP_STRING([--disable-bluez],[Disable optional BlueZ support]),
1196 [
1197 case "${enableval}" in
1198 yes) bluez=yes ;;
1199 no) bluez=no ;;
1200 *) AC_MSG_ERROR(bad value ${enableval} for --disable-bluez) ;;
1201 esac
1202 ],
1203 [bluez=auto])
1204 if test "x${bluez}" != xno ; then
1205 PKG_CHECK_MODULES(BLUEZ, [ bluez >= 3.0 ],
1206 HAVE_BLUEZ=1,
1207 [
1208 HAVE_BLUEZ=0
1209 if test "x$bluez" = xyes ; then
1210 AC_MSG_ERROR([*** BLUEZ support not found])
1211 fi
1212 ])
1213 else
1214 HAVE_BLUEZ=0
1215 fi
1216
1217 AC_SUBST(BLUEZ_CFLAGS)
1218 AC_SUBST(BLUEZ_LIBS)
1219 AC_SUBST(HAVE_BLUEZ)
1220 AM_CONDITIONAL([HAVE_BLUEZ], [test "x$HAVE_BLUEZ" = x1])
1221
1222 #### D-Bus support (optional) ####
1223
1224 AC_ARG_ENABLE([dbus],
1225 AS_HELP_STRING([--disable-dbus],[Disable optional D-Bus support]),
1226 [
1227 case "${enableval}" in
1228 yes) dbus=yes ;;
1229 no) dbus=no ;;
1230 *) AC_MSG_ERROR(bad value ${enableval} for --disable-dbus) ;;
1231 esac
1232 ],
1233 [dbus=auto])
1234
1235 if test "x${dbus}" != xno ; then
1236
1237 PKG_CHECK_MODULES(DBUS, [ dbus-1 >= 1.0.0 ],
1238 [
1239 HAVE_DBUS=1
1240 saved_LIBS="$LIBS"
1241 LIBS="$LIBS $DBUS_LIBS"
1242 CFLAGS="$CFLAGS $DBUS_CFLAGS"
1243 AC_CHECK_FUNCS(dbus_watch_get_unix_fd)
1244 LIBS="$saved_LIBS"
1245 AC_DEFINE([HAVE_DBUS], 1, [Have D-Bus.])
1246 ],
1247 [
1248 HAVE_DBUS=0
1249 if test "x$dbus" = xyes ; then
1250 AC_MSG_ERROR([*** D-Bus support not found])
1251 fi
1252 ])
1253 else
1254 HAVE_DBUS=0
1255 fi
1256
1257 AC_SUBST(DBUS_CFLAGS)
1258 AC_SUBST(DBUS_LIBS)
1259 AC_SUBST(HAVE_DBUS)
1260 AM_CONDITIONAL([HAVE_DBUS], [test "x$HAVE_DBUS" = x1])
1261
1262
1263 # udev and HAL depend on DBUS: So double check if they were explicitly enabled.
1264 if test "x$HAVE_DBUS" != "x1" ; then
1265 HAVE_HAL=0
1266 if test "x${hal}" = xyes ; then
1267 AC_MSG_ERROR([*** D-Bus support is required by HAL])
1268 fi
1269
1270 HAVE_BLUEZ=0
1271 if test "x${bluez}" = xyes ; then
1272 AC_MSG_ERROR([*** D-Bus support is required by BLUEZ])
1273 fi
1274 fi
1275
1276
1277 #### HAL compat support (optional) ####
1278
1279 AC_ARG_ENABLE([hal-compat],
1280 AS_HELP_STRING([--disable-hal-compat],[Disable optional HAL->udev transition compatibility support]),
1281 [
1282 case "${enableval}" in
1283 yes) halcompat=yes ;;
1284 no) halcompat=no ;;
1285 *) AC_MSG_ERROR(bad value ${enableval} for --disable-hal-compat) ;;
1286 esac
1287 ],
1288 [halcompat=auto])
1289 if test "x${halcompat}" != xno -a "x$HAVE_HAL" = "x0" -a "x$HAVE_UDEV" = "x1" ; then
1290 HAVE_HAL_COMPAT=1
1291 AC_DEFINE([HAVE_HAL_COMPAT], 1, [Have HAL compatibility.])
1292 else
1293 HAVE_HAL_COMPAT=0
1294 fi
1295
1296 AC_SUBST(HAVE_HAL_COMPAT)
1297 AM_CONDITIONAL([HAVE_HAL_COMPAT], [test "x$HAVE_HAL_COMPAT" = x1])
1298
1299 ### IPv6 connection support (optional) ###
1300
1301 AC_ARG_ENABLE([ipv6],
1302 AS_HELP_STRING([--disable-ipv6],[Disable optional IPv6 support]),
1303 [
1304 case "${enableval}" in
1305 yes) ipv6=yes ;;
1306 no) ipv6=no ;;
1307 *) AC_MSG_ERROR(bad value ${enableval} for --disable-ipv6) ;;
1308 esac
1309 ],
1310 [ipv6=auto])
1311
1312 if test "x${ipv6}" != xno ; then
1313 AC_DEFINE([HAVE_IPV6], [1], [Define this to enable IPv6 connection support])
1314 HAVE_IPV6=1
1315 else
1316 HAVE_IPV6=0
1317 fi
1318
1319 #### OpenSSL support (optional) ####
1320
1321 AC_ARG_ENABLE([openssl],
1322 AS_HELP_STRING([--disable-openssl],[Disable OpenSSL support (used for Airtunes/RAOP)]),
1323 [
1324 case "${enableval}" in
1325 yes) openssl=yes ;;
1326 no) openssl=no ;;
1327 *) AC_MSG_ERROR(bad value ${enableval} for --disable-openssl) ;;
1328 esac
1329 ],
1330 [openssl=auto])
1331
1332 if test "x${openssl}" != xno ; then
1333
1334 PKG_CHECK_MODULES(OPENSSL, [ openssl > 0.9 ],
1335 [
1336 HAVE_OPENSSL=1
1337 AC_DEFINE([HAVE_OPENSSL], 1, [Have OpenSSL])
1338 ],
1339 [
1340 HAVE_OPENSSL=0
1341 if test "x$openssl" = xyes ; then
1342 AC_MSG_ERROR([*** OpenSSL support not found])
1343 fi
1344 ])
1345 else
1346 HAVE_OPENSSL=0
1347 fi
1348
1349 AC_SUBST(OPENSSL_CFLAGS)
1350 AC_SUBST(OPENSSL_LIBS)
1351 AC_SUBST(HAVE_OPENSSL)
1352 AM_CONDITIONAL([HAVE_OPENSSL], [test "x$HAVE_OPENSSL" = x1])
1353
1354 #### FFTW (optional) ####
1355 AC_ARG_WITH(
1356 [fftw],
1357 AS_HELP_STRING([--without-fftw], [Omit FFTW-using modules (equalizer)]))
1358
1359 if test "x${with_fftw}" != "xno"; then
1360 PKG_CHECK_MODULES([FFTW], [fftw3f], [HAVE_FFTW=1], [HAVE_FFTW=0])
1361 fi
1362 AM_CONDITIONAL([HAVE_FFTW], [test "x$HAVE_FFTW" = "x1"])
1363
1364 ### ORC (optional) ###
1365 ORC_CHECK([0.4.9])
1366
1367 ### Build and Install man pages ###
1368 AC_ARG_ENABLE(manpages,
1369 AS_HELP_STRING([--disable-manpages],[Disable building and installation of man pages]),
1370 [case "${enableval}" in
1371 yes) manpages=yes ;;
1372 no) manpages=no ;;
1373 *) AC_MSG_ERROR([bad value ${enableval} for --disable-manpages]) ;;
1374 esac],[manpages=yes])
1375
1376 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$manpages" = xyes])
1377
1378 #### PulseAudio system group & user #####
1379
1380 AC_ARG_WITH(system_user, AS_HELP_STRING([--with-system-user=<user>],[User for running the PulseAudio daemon as a system-wide instance (pulse)]))
1381 if test -z "$with_system_user" ; then
1382 PA_SYSTEM_USER=pulse
1383 else
1384 PA_SYSTEM_USER=$with_system_user
1385 fi
1386 AC_SUBST(PA_SYSTEM_USER)
1387 AC_DEFINE_UNQUOTED(PA_SYSTEM_USER,"$PA_SYSTEM_USER", [User for running the PulseAudio system daemon])
1388
1389 AC_ARG_WITH(system_group,AS_HELP_STRING([--with-system-group=<group>],[Group for running the PulseAudio daemon as a system-wide instance (pulse)]))
1390 if test -z "$with_system_group" ; then
1391 PA_SYSTEM_GROUP=pulse
1392 else
1393 PA_SYSTEM_GROUP=$with_system_group
1394 fi
1395 AC_SUBST(PA_SYSTEM_GROUP)
1396 AC_DEFINE_UNQUOTED(PA_SYSTEM_GROUP,"$PA_SYSTEM_GROUP", [Group for the PulseAudio system daemon])
1397
1398 AC_ARG_WITH(access_group,AS_HELP_STRING([--with-access-group=<group>],[Group which is allowed access to a system-wide PulseAudio daemon (pulse-access)]))
1399 if test -z "$with_access_group" ; then
1400 PA_ACCESS_GROUP=pulse-access
1401 else
1402 PA_ACCESS_GROUP=$with_access_group
1403 fi
1404 AC_SUBST(PA_ACCESS_GROUP)
1405 AC_DEFINE_UNQUOTED(PA_ACCESS_GROUP,"$PA_ACCESS_GROUP", [Access group])
1406
1407 AC_ARG_ENABLE(
1408 per_user_esound_socket,
1409 AS_HELP_STRING([--disable-per-user-esound-socket], [Use global esound socket directory /tmp/.esd/socket.]),
1410 [
1411 case "${enableval}" in
1412 yes) per_user_esound_socket=1 ;;
1413 no) per_user_esound_socket=0 ;;
1414 *) AC_MSG_ERROR(bad value ${enableval} for --disable-per-user-esound-socket) ;;
1415 esac
1416 ],
1417 [per_user_esound_socket=1])
1418
1419 if test "x$per_user_esound_socket" = "x1"; then
1420 AC_DEFINE([USE_PER_USER_ESOUND_SOCKET], [1], [Define this if you want per-user esound socket directories])
1421 fi
1422
1423 #### PulseAudio system runtime dir ####
1424 PA_SYSTEM_RUNTIME_PATH="${localstatedir}/run/pulse"
1425 AC_SUBST(PA_SYSTEM_RUNTIME_PATH)
1426 PA_SYSTEM_CONFIG_PATH="${localstatedir}/lib/pulse"
1427 AC_SUBST(PA_SYSTEM_CONFIG_PATH)
1428 PA_SYSTEM_STATE_PATH="${localstatedir}/lib/pulse"
1429 AC_SUBST(PA_SYSTEM_STATE_PATH)
1430
1431 ###################################
1432 # Output #
1433 ###################################
1434
1435 AC_ARG_ENABLE([legacy-runtime-dir],
1436 AS_HELP_STRING([--disable-legacy-runtime-dir], [Try to connect on legacy (< 0.9.12) socket paths.]))
1437 if test "x$enable_legacy_runtime_dir" != "xno" ; then
1438 AC_DEFINE(ENABLE_LEGACY_RUNTIME_DIR, [1], [Legacy runtime dir])
1439 fi
1440
1441 AC_ARG_ENABLE(
1442 [static-bins],
1443 AS_HELP_STRING([--enable-static-bins],[Statically link executables.]),
1444 [STATIC_BINS=1], [STATIC_BINS=0])
1445 AM_CONDITIONAL([STATIC_BINS], [test "x$STATIC_BINS" = "x1"])
1446
1447 AC_ARG_WITH(
1448 [preopen-mods],
1449 AS_HELP_STRING([--with-preopen-mods],[Modules to preopen in daemon (default: all).]),
1450 [PREOPEN_MODS=$withval], [PREOPEN_MODS="all"])
1451 AM_CONDITIONAL([PREOPEN_MODS], [test "x$PREOPEN_MODS" != "xall"])
1452 if test "x$PREOPEN_MODS" != "xall" ; then
1453 tmpLIBS=""
1454 for mod in $PREOPEN_MODS; do
1455 tmpLIBS="$tmpLIBS module-$mod.la"
1456 done
1457 PREOPEN_MODS="$tmpLIBS"
1458 AC_SUBST(PREOPEN_MODS)
1459 fi
1460
1461 AC_ARG_WITH(
1462 [module-dir],
1463 AS_HELP_STRING([--with-module-dir],[Directory where to install the modules to (defaults to ${libdir}/pulse-${PA_MAJORMINOR}/modules]),
1464 [modlibexecdir=$withval], [modlibexecdir="${libdir}/pulse-${PA_MAJORMINOR}/modules"])
1465
1466 AC_SUBST(modlibexecdir)
1467
1468 AC_ARG_WITH(
1469 [udev-rules-dir],
1470 AS_HELP_STRING([--with-udev-rules-dir],[Directory where to install udev rules to (defaults to /lib/udev/rules.d)]),
1471 [udevrulesdir=$withval], [udevrulesdir="/lib/udev/rules.d"])
1472
1473 AC_SUBST(udevrulesdir)
1474
1475 AC_ARG_ENABLE(
1476 [force-preopen],
1477 AS_HELP_STRING([--enable-force-preopen],[Preopen modules, even when dlopen() is supported.]),
1478 [FORCE_PREOPEN=$enableval], [FORCE_PREOPEN=no])
1479 AM_CONDITIONAL([FORCE_PREOPEN], [test "x$FORCE_PREOPEN" = "xyes"])
1480
1481 AC_CONFIG_FILES([
1482 Makefile
1483 src/Makefile
1484 man/Makefile
1485 libpulse.pc
1486 libpulse-simple.pc
1487 libpulse-browse.pc
1488 libpulse-mainloop-glib.pc
1489 doxygen/Makefile
1490 doxygen/doxygen.conf
1491 src/pulse/version.h
1492 po/Makefile.in
1493 ])
1494
1495 AC_OUTPUT
1496
1497 # ==========================================================================
1498 ENABLE_X11=no
1499 if test "x$HAVE_X11" = "x1" ; then
1500 ENABLE_X11=yes
1501 fi
1502
1503 ENABLE_OSS_OUTPUT=no
1504 ENABLE_OSS_WRAPPER=no
1505 if test "x$HAVE_OSS" = "x1" ; then
1506 if test "x$enable_oss_output" != "xno"; then
1507 ENABLE_OSS_OUTPUT=yes
1508 fi
1509 if test "x$enable_oss_wrapper" != "xno"; then
1510 ENABLE_OSS_WRAPPER=yes
1511 fi
1512 fi
1513
1514 ENABLE_COREAUDIO=no
1515 if test "x$HAVE_COREAUDIO" = "x1" ; then
1516 ENABLE_COREAUDIO=yes
1517 fi
1518
1519 ENABLE_ALSA=no
1520 if test "x$HAVE_ALSA" = "x1" ; then
1521 ENABLE_ALSA=yes
1522 fi
1523
1524 ENABLE_SOLARIS=no
1525 if test "x$HAVE_SOLARIS" = "x1" ; then
1526 ENABLE_SOLARIS=yes
1527 fi
1528
1529 ENABLE_GTK20=no
1530 if test "x$HAVE_GTK20" = "x1" ; then
1531 ENABLE_GTK20=yes
1532 fi
1533
1534 ENABLE_GLIB20=no
1535 if test "x$HAVE_GLIB20" = "x1" ; then
1536 ENABLE_GLIB20=yes
1537 fi
1538
1539 ENABLE_GCONF=no
1540 if test "x$HAVE_GCONF" = "x1" ; then
1541 ENABLE_GCONF=yes
1542 fi
1543
1544 ENABLE_AVAHI=no
1545 if test "x$HAVE_AVAHI" = "x1" ; then
1546 ENABLE_AVAHI=yes
1547 fi
1548
1549 ENABLE_JACK=no
1550 if test "x$HAVE_JACK" = "x1" ; then
1551 ENABLE_JACK=yes
1552 fi
1553
1554 ENABLE_LIBASYNCNS=no
1555 if test "x$HAVE_LIBASYNCNS" = "x1" ; then
1556 ENABLE_LIBASYNCNS=yes
1557 fi
1558
1559 ENABLE_LIRC=no
1560 if test "x$HAVE_LIRC" = "x1" ; then
1561 ENABLE_LIRC=yes
1562 fi
1563
1564 ENABLE_DBUS=no
1565 if test "x$HAVE_DBUS" = "x1" ; then
1566 ENABLE_DBUS=yes
1567 fi
1568
1569 ENABLE_HAL=no
1570 if test "x$HAVE_HAL" = "x1" ; then
1571 ENABLE_HAL=yes
1572 fi
1573
1574 ENABLE_UDEV=no
1575 if test "x$HAVE_UDEV" = "x1" ; then
1576 ENABLE_UDEV=yes
1577 fi
1578
1579 ENABLE_HAL_COMPAT=no
1580 if test "x$HAVE_HAL_COMPAT" = "x1" ; then
1581 ENABLE_HAL_COMPAT=yes
1582 fi
1583
1584 ENABLE_TCPWRAP=no
1585 if test "x${LIBWRAP_LIBS}" != x ; then
1586 ENABLE_TCPWRAP=yes
1587 fi
1588
1589 ENABLE_LIBSAMPLERATE=no
1590 if test "x${HAVE_LIBSAMPLERATE}" = "x1" ; then
1591 ENABLE_LIBSAMPLERATE=yes
1592 fi
1593
1594 ENABLE_BLUEZ=no
1595 if test "x${HAVE_BLUEZ}" = "x1" ; then
1596 ENABLE_BLUEZ=yes
1597 fi
1598
1599 ENABLE_GDBM=no
1600 if test "x${HAVE_GDBM}" = "x1" ; then
1601 ENABLE_GDBM=yes
1602 fi
1603
1604 ENABLE_TDB=no
1605 if test "x${HAVE_TDB}" = "x1" ; then
1606 ENABLE_TDB=yes
1607 fi
1608
1609 ENABLE_SIMPLEDB=no
1610 if test "x${HAVE_SIMPLEDB}" = "x1" ; then
1611 ENABLE_SIMPLEDB=yes
1612 fi
1613
1614 ENABLE_FFTW=no
1615 if test "x${HAVE_FFTW}" = "x1" ; then
1616 ENABLE_FFTW=yes
1617 fi
1618
1619 ENABLE_ORC=no
1620 if test "x${HAVE_ORC}" = "xyes" ; then
1621 ENABLE_ORC=yes
1622 fi
1623
1624 ENABLE_OPENSSL=no
1625 if test "x${HAVE_OPENSSL}" = "x1" ; then
1626 ENABLE_OPENSSL=yes
1627 fi
1628
1629 ENABLE_IPV6=no
1630 if test "x${HAVE_IPV6}" = "x1" ; then
1631 ENABLE_IPV6=yes
1632 fi
1633
1634 ENABLE_PER_USER_ESOUND_SOCKET=no
1635 if test "x$per_user_esound_socket" = "x1" ; then
1636 ENABLE_PER_USER_ESOUND_SOCKET=yes
1637 fi
1638
1639 echo "
1640 ---{ $PACKAGE_NAME $VERSION }---
1641
1642 prefix: ${prefix}
1643 sysconfdir: ${sysconfdir}
1644 localstatedir: ${localstatedir}
1645 System Runtime Path: ${PA_SYSTEM_RUNTIME_PATH}
1646 System State Path: ${PA_SYSTEM_STATE_PATH}
1647 System Config Path: ${PA_SYSTEM_CONFIG_PATH}
1648 Compiler: ${CC}
1649 CFLAGS: ${CFLAGS}
1650
1651 Have X11: ${ENABLE_X11}
1652 Enable OSS Output: ${ENABLE_OSS_OUTPUT}
1653 Enable OSS Wrapper: ${ENABLE_OSS_WRAPPER}
1654 Enable CoreAudio: ${ENABLE_COREAUDIO}
1655 Enable Alsa: ${ENABLE_ALSA}
1656 Enable Solaris: ${ENABLE_SOLARIS}
1657 Enable GLib 2.0: ${ENABLE_GLIB20}
1658 Enable Gtk+ 2.0: ${ENABLE_GTK20}
1659 Enable GConf: ${ENABLE_GCONF}
1660 Enable Avahi: ${ENABLE_AVAHI}
1661 Enable Jack: ${ENABLE_JACK}
1662 Enable Async DNS: ${ENABLE_LIBASYNCNS}
1663 Enable LIRC: ${ENABLE_LIRC}
1664 Enable DBUS: ${ENABLE_DBUS}
1665 Enable HAL: ${ENABLE_HAL}
1666 Enable BlueZ: ${ENABLE_BLUEZ}
1667 Enable udev: ${ENABLE_UDEV}
1668 Enable HAL->udev compat: ${ENABLE_HAL_COMPAT}
1669 Enable TCP Wrappers: ${ENABLE_TCPWRAP}
1670 Enable libsamplerate: ${ENABLE_LIBSAMPLERATE}
1671 Enable IPv6: ${ENABLE_IPV6}
1672 Enable OpenSSL (for Airtunes): ${ENABLE_OPENSSL}
1673 Enable tdb: ${ENABLE_TDB}
1674 Enable gdbm: ${ENABLE_GDBM}
1675 Enable simple database: ${ENABLE_SIMPLEDB}
1676 Enable fftw: ${ENABLE_FFTW}
1677 Enable orc: ${ENABLE_ORC}
1678
1679 System User: ${PA_SYSTEM_USER}
1680 System Group: ${PA_SYSTEM_GROUP}
1681 Access Group: ${PA_ACCESS_GROUP}
1682 Enable per-user EsounD socket: ${ENABLE_PER_USER_ESOUND_SOCKET}
1683 Force preopen: ${FORCE_PREOPEN}
1684 Preopened modules: ${PREOPEN_MODS}
1685 "
1686
1687 if test "${ENABLE_DBUS}" = "no" ; then
1688 echo "
1689 ===== WARNING WARNING WARNING WARNING WARNING WARNING WARNING =====
1690 You do not have DBUS support enabled. It is strongly recommended
1691 that you enable DBUS support if you platform supports it.
1692 Many parts of PulseAudio use udev, from Console Kit interaction
1693 to the Device Reservation Protocol to speak to JACK, Bluetooth
1694 support and even a native control protocol for communicating and
1695 controling the PulseAudio daemon itself.
1696 ===== WARNING WARNING WARNING WARNING WARNING WARNING WARNING =====
1697 "
1698 fi
1699
1700 if test "${ENABLE_UDEV}" = "no" ; then
1701 echo "
1702 ===== WARNING WARNING WARNING WARNING WARNING WARNING WARNING =====
1703 You do not have udev support enabled. It is strongly recommended
1704 that you enable udev support if you platform supports it as it is
1705 the primary method used to detect hardware audio devices (on Linux)
1706 and is thus a critical part of PulseAudio on that platform.
1707 ===== WARNING WARNING WARNING WARNING WARNING WARNING WARNING =====
1708 "
1709 fi