1# Process this file with autoconf to produce a configure script.
2AC_PREREQ([2.60])
3AC_INIT([aqualung],[1.0],[http://aqualung.factorial.hu/mantis])
4AM_INIT_AUTOMAKE
5AC_CONFIG_SRCDIR([src/core.c])
6AC_CONFIG_HEADERS([config.h])
7AC_CONFIG_FILES([
8    Makefile
9    doc/Makefile
10    po/Makefile.in
11    skin/Makefile
12    skin/dark/Makefile
13    skin/default/Makefile
14    skin/metal/Makefile
15    skin/ocean/Makefile
16    skin/plain/Makefile
17    skin/woody/Makefile
18    skin/no_skin/Makefile
19    src/Makefile
20    src/decoder/Makefile
21    src/encoder/Makefile
22    src/img/Makefile
23])
24AC_CANONICAL_HOST
25
26
27# Checks for programs.
28AC_PROG_CC
29AC_PROG_RANLIB
30AC_PROG_CXX
31AM_PROG_CC_C_O
32AC_USE_SYSTEM_EXTENSIONS
33m4_ifndef([AM_GNU_GETTEXT],
34    [m4_fatal([GNU gettext is required to prepare the Aqualung build])])
35AM_GNU_GETTEXT([external])
36AM_GNU_GETTEXT_VERSION([0.17])
37m4_ifndef([PKG_PROG_PKG_CONFIG],
38    [m4_fatal([pkg-config is required to prepare the Aqualung build])])
39PKG_PROG_PKG_CONFIG
40
41
42# Checks for libraries.
43# opportunistic
44AC_CHECK_LIB([z], [gzopen])
45AC_CHECK_LIB([bz2], [BZ2_bzopen])
46# required
47AC_SEARCH_LIBS([floor], [m], [],
48    [AC_MSG_ERROR([POSIX math.h functions are required to build Aqualung])])
49PKG_CHECK_MODULES([xml], [libxml-2.0])
50PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.14 gthread-2.0])
51PKG_CHECK_MODULES([gtk], [gtk+-2.0 >= 2.18])
52
53
54# Checks for header files.
55AC_CHECK_HEADERS([dlfcn.h errno.h fcntl.h sys/ioctl.h])
56
57
58# Checks for typedefs, structures, and compiler characteristics.
59AC_C_CONST
60AC_C_INLINE
61AC_TYPE_SIZE_T
62
63
64# Checks for library functions.
65AC_FUNC_MALLOC
66AC_CHECK_FUNCS([memset mkdir psiginfo strcasestr strdup strndup strrchr strstr])
67
68
69# Platform-specific tweaks.
70AC_SYS_LARGEFILE
71AS_CASE([$host_os],
72    [cygwin*],
73        [AS_VAR_IF([GCC], [yes], [CPPFLAGS="-mwin32 $CPPFLAGS"])],
74    [AC_CHECK_LIB([pthread], [pthread_create], [],
75        [AC_MSG_ERROR([pthreads are required to build Aqualung])])])
76
77
78dnl
79dnl Convenience macros for expressing common autoconf idioms used below.
80dnl (These macro definitions themselves do not directly add code to the
81dnl configure script.)
82dnl
83dnl AQUALUNG_DETECT(package, brief-description, [detect-actions])
84dnl -----------------------------------------------------------------------
85AC_DEFUN([AQUALUNG_DETECT], [
86    m4_pushdef([_aqualung_cond], [AS_TR_CPP([HAVE_$1])])[]dnl
87    AC_ARG_WITH([$1],
88        [AS_HELP_STRING([--with-$1],
89            [compile with $2 support (default: detect)])],
90        [], [with_$1='detect'])
91    AS_VAR_IF([with_$1], [no], [], [
92        AC_MSG_NOTICE([$2 Support])
93        m4_default([$3], [:])
94        AS_CASE([$with_$1],
95            [detect], [with_$1='not found'],
96            [yes*], [AC_DEFINE(_aqualung_cond, [1],
97                        [Define to build with $2 support])])
98    ])
99    AM_CONDITIONAL(_aqualung_cond, [expr "X$with_$1" : 'Xyes' >/dev/null])
100    m4_popdef([_aqualung_cond])[]dnl
101])dnl
102dnl AQUALUNG_FOUND(package, [package_LIBS-value])
103dnl -----------------------------------------------------------------------
104AC_DEFUN([AQUALUNG_FOUND], [
105    AS_VAR_IF([with_$1], [detect], [with_$1='yes (found)'])
106    m4_ifnblank([$2], [AC_SUBST([$1_LIBS], ['$2'])])
107])dnl
108dnl AQUALUNG_MISSING(package, error-description)
109dnl -----------------------------------------------------------------------
110AC_DEFUN([AQUALUNG_MISSING],
111    [AS_VAR_IF([with_$1], [yes], [AC_MSG_ERROR([$2])])])dnl
112
113
114#
115# Feature Options
116#
117AC_MSG_CHECKING([for type of build])
118buildtype='release'
119AC_ARG_ENABLE([debug],
120    [AS_HELP_STRING([--enable-debug], [compile with debugging support])],
121    [AS_VAR_IF([enable_debug], [yes], [buildtype='debug'])])
122AC_MSG_RESULT([$buildtype])
123AS_VAR_IF([buildtype], [release],
124    [AC_DEFINE([RELEASE_BUILD], [1], [Define if doing a release build])],
125    [
126        dnl
127        dnl backtracing is fairly non-standard, BSD users will likely have to
128        dnl install libexecinfo first
129        dnl
130        AC_CHECK_FUNC([backtrace_symbols], [],
131            [AC_CHECK_LIB([execinfo], [backtrace_symbols],
132                [AC_SUBST([debug_LIBS], [-lexecinfo])],
133                [AC_MSG_ERROR([debug builds need backtrace support])])])
134        dnl
135        dnl We must ensure we have frame pointers for backtrace() to work with.
136        dnl As such, we must override any previously set optimizations (such as
137        dnl those set by the AC_PROG_CC macro), so while setting user variables
138        dnl directly is normally considered bad form, it's necessary here.
139        dnl
140        AS_VAR_IF([GCC], [yes], [
141            AC_SUBST([debug_LDFLAGS], [-rdynamic])
142            CFLAGS="$CFLAGS -ggdb -g -O0"
143        ])
144        AS_VAR_IF([GXX], [yes], [CXXFLAGS="$CXXFLAGS -ggdb -g -O0"])
145        AC_DEFINE([DEBUG_BUILD], [1], [Define if doing a debug build])
146    ])
147
148AC_ARG_ENABLE([jack_mgmt],
149    [AS_HELP_STRING([--disable-jack-mgmt],
150        [compile without JACK port management support])],
151    [], [enable_jack_mgmt='yes'])
152# see JACK output driver check below
153
154AC_ARG_ENABLE([loop],
155    [AS_HELP_STRING([--disable-loop], [compile without loop playback support])],
156    [], [enable_loop='yes'])
157AS_VAR_IF([enable_loop], [yes],
158    [AC_DEFINE([HAVE_LOOP], [1], [Define to build with loop playback support])])
159AM_CONDITIONAL([HAVE_LOOP], [test "x$enable_loop" = 'xyes'])
160
161AC_ARG_ENABLE([podcast],
162    [AS_HELP_STRING([--disable-podcast], [compile without podcast support])],
163    [], [enable_podcast='yes'])
164AS_VAR_IF([enable_podcast], [yes],
165    [AC_DEFINE([HAVE_PODCAST], [1], [Define to build with podcast support])])
166AM_CONDITIONAL([HAVE_PODCAST], [test "x$enable_podcast" = 'xyes'])
167
168AC_ARG_ENABLE([systray],
169    [AS_HELP_STRING([--disable-systray], [compile without systray support])],
170    [], [enable_systray='yes'])
171AS_VAR_IF([enable_systray], [yes],
172    [AC_DEFINE([HAVE_SYSTRAY], [1], [Define to build with GTK+ systray])])
173
174AC_ARG_ENABLE([transcoding],
175    [AS_HELP_STRING([--disable-transcoding],
176        [compile without transcoding support])],
177    [], [enable_transcoding='yes'])
178AS_VAR_IF([enable_transcoding], [yes], [], [
179    dnl
180    dnl --disable-transcoding implies --without-lame --without-vorbisenc
181    dnl setting these variables now ensures detection is forced off below
182    dnl
183    with_lame='no'
184    with_vorbisenc='no'
185])
186
187
188#
189# Output Driver Library Options
190#
191AQUALUNG_DETECT([alsa], [ALSA],
192    [PKG_CHECK_MODULES([alsa], [alsa],
193        [AQUALUNG_FOUND([alsa])],
194        [AQUALUNG_MISSING([alsa], [ALSA support requires libasound])])])
195
196AQUALUNG_DETECT([jack], [JACK],
197    [AC_CHECK_LIB([jack], [jack_on_info_shutdown],
198        [AQUALUNG_FOUND([jack], [-ljack])],
199        [AQUALUNG_MISSING([jack], [JACK support requires libjack])])])
200AS_CASE([$enable_jack_mgmt/$with_jack],
201    [yes/yes*], [AC_DEFINE([HAVE_JACK_MGMT], [1],
202                    [Define to build with JACK port management support])],
203    [enable_jack_mgmt='no'])
204AM_CONDITIONAL([HAVE_JACK_MGMT], [test "x$enable_jack_mgmt" = 'xyes'])
205
206AC_ARG_WITH([oss],
207    [AS_HELP_STRING([--with-oss],
208        [compile with OSS support (default: detect)])],
209    [], [with_oss='detect'])
210AS_VAR_IF([with_oss], [no], [], [
211    AC_MSG_NOTICE([OSS Support])
212    dnl
213    dnl OSS detection is a wee bit squirrely, sorry if this hard to follow...
214    dnl
215    AC_CHECK_HEADERS([sys/soundcard.h soundcard.h linux/soundcard.h],
216        [AS_CASE([$with_oss], [*yes], [], [with_oss='yes (found)'])],
217        [with_oss="Z$with_oss"])
218    AS_CASE([$with_oss],
219        [ZZZyes], [AC_MSG_ERROR([OSS support requires soundcard.h])],
220        [*found*], [with_oss='yes (found)'],
221        [*yes*], [with_oss='yes'],
222        [with_oss='not found'])
223    AS_CASE([$with_oss], [yes*], [
224        AC_CHECK_LIB([ossaudio], [_oss_ioctl],
225            [AC_SUBST([oss_LIBS], [-lossaudio])])
226        AC_DEFINE([HAVE_OSS], [1], [Define to build with OSS support])
227    ])
228])
229AM_CONDITIONAL([HAVE_OSS], [expr "X$with_oss" : 'Xyes' >/dev/null])
230
231AQUALUNG_DETECT([pulse], [PulseAudio],
232    [PKG_CHECK_MODULES([pulse], [libpulse-simple],
233        [AQUALUNG_FOUND([pulse])],
234        [AQUALUNG_MISSING([pulse], [$pulse_PKG_ERRORS])])])
235
236AQUALUNG_DETECT([sndio], [sndio],
237    [AC_CHECK_LIB([sndio], [sio_open],
238        [AQUALUNG_FOUND([sndio], [-lsndio])],
239        [AQUALUNG_MISSING([sndio], [sndio support requires libsndio])])])
240
241AQUALUNG_DETECT([winmm], [Windows Multimedia Extensions API], [
242    AC_MSG_CHECKING([for platform support])
243    AS_CASE([$host_os], [cygwin*], [AC_MSG_RESULT([yes])], [
244        AC_MSG_RESULT([no])
245        AQUALUNG_MISSING([winmm],
246            [WinMM is only supported on Microsoft Windows])
247        with_winmm="not supported on $host_os"
248    ])
249    AS_CASE([$with_winmm], [yes|detect],
250        [AC_CHECK_HEADER([mmsystem.h],
251            [AQUALUNG_FOUND([winmm], [-lwinmm])],
252            [AQUALUNG_MISSING([winmm], [WinMM support requires mmsystem.h])],
253            [[#include <windows.h>]])])
254])
255
256
257#
258# Codec Library Options
259#
260AQUALUNG_DETECT([flac], [Free Lossless Audio Codec],
261    [PKG_CHECK_MODULES([flac], [flac],
262        [AQUALUNG_FOUND([flac])],
263        [AQUALUNG_MISSING([flac], [$flac_PKG_ERRORS])])])
264AS_VAR_IF([enable_transcoding], [yes],
265    [with_flac_enc="$with_flac"], [with_flac_enc='no'])
266AS_CASE([$with_flac_enc],
267    [yes*], [AC_DEFINE([HAVE_FLAC_ENC], [1],
268                [Define to build with flac encoding support])])
269
270AQUALUNG_DETECT([lame], [LAME MP3 Encoding],
271    [AC_CHECK_LIB([mp3lame], [lame_init],
272        [AQUALUNG_FOUND([lame], [-lmp3lame])],
273        [AQUALUNG_MISSING([lame], [LAME support requires libmp3lame])])])
274
275AQUALUNG_DETECT([lavc], [Libav / FFmpeg],
276    [PKG_CHECK_MODULES([lavc], [libavcodec libavformat libavutil],
277        [AQUALUNG_FOUND([lavc])],
278        [AQUALUNG_MISSING([lavc], [$lavc_PKG_ERRORS])])])
279
280AQUALUNG_DETECT([mac], [Monkey's Audio Codec],
281    [AC_CHECK_LIB([mac], [CreateIAPEDecompress],
282        [AQUALUNG_FOUND([mac], [-lmac -lstdc++])],
283        [AQUALUNG_MISSING([mac],
284            [Monkey's Audio Codec support requires libmac])],
285        [-lstdc++])])
286
287AQUALUNG_DETECT([mod], [MOD Audio],
288    [PKG_CHECK_MODULES([mod], [libmodplug >= 0.8.4],
289        [AQUALUNG_FOUND([mod])],
290        [AQUALUNG_MISSING([mod], [$mod_PKG_ERRORS])])])
291
292AQUALUNG_DETECT([mpc], [Musepack], [
293    AC_CHECK_LIB([mpcdec], [mpc_demux_init],
294        [AQUALUNG_FOUND([mpc], [-lmpcdec])],
295        [AC_CHECK_LIB([mpcdec], [mpc_streaminfo_init],
296            [
297                AQUALUNG_FOUND([mpc], [-lmpcdec])
298                AC_DEFINE([MPC_OLD_API], [1],
299                    [Defined if old Musepack API is used])
300            ],
301            [AQUALUNG_MISSING([mpc], [Musepack support requires libmpcdec])])])
302])
303
304AQUALUNG_DETECT([mpeg], [MPEG Audio],
305    [PKG_CHECK_MODULES([mad], [mad],
306        [AQUALUNG_FOUND([mpeg])],
307        [AQUALUNG_MISSING([mpeg], [$mad_PKG_ERRORS])])])
308
309AQUALUNG_DETECT([sndfile], [sndfile (WAV, AIFF, etc.)], [
310    PKG_CHECK_MODULES([sndfile], [sndfile >= 1.0.17],
311        [AQUALUNG_FOUND([sndfile])],
312        [AQUALUNG_MISSING([sndfile], [$sndfile_PKG_ERRORS])])
313    PKG_CHECK_EXISTS([sndfile >= 1.0.18],
314        [AC_DEFINE([HAVE_SNDFILE_1_0_18], [1], [Defined if sndfile >= 1.0.18])])
315])
316AS_VAR_IF([enable_transcoding], [yes],
317    [with_sndfile_enc="$with_sndfile"], [with_sndfile_enc='no'])
318AS_CASE([$with_sndfile_enc],
319    [yes*], [AC_DEFINE([HAVE_SNDFILE_ENC], [1],
320                [Define to build with sndfile encoding support])])
321
322AQUALUNG_DETECT([speex], [Ogg Speex],
323    [PKG_CHECK_MODULES([speex], [oggz speex ogg],
324        [AQUALUNG_FOUND([speex])],
325        [AQUALUNG_MISSING([speex], [$speex_PKG_ERRORS])])])
326
327AQUALUNG_DETECT([vorbis], [Ogg Vorbis],
328    [PKG_CHECK_MODULES([vorbis], [vorbis vorbisfile ogg],
329        [AQUALUNG_FOUND([vorbis])],
330        [AQUALUNG_MISSING([vorbis], [$vorbis_PKG_ERRORS])])])
331
332AQUALUNG_DETECT([vorbisenc], [Ogg Vorbis Encoding],
333    [PKG_CHECK_MODULES([vorbisenc], [vorbisenc ogg],
334        [AQUALUNG_FOUND([vorbisenc])],
335        [AQUALUNG_MISSING([vorbisenc], [$vorbisenc_PKG_ERRORS])])])
336AS_CASE([$with_flac_enc/$with_lame/$with_sndfile_enc/$with_vorbisenc],
337    [*yes*], [AC_DEFINE([HAVE_TRANSCODING], [1],
338                 [Define to build with transcoding support])],
339    [enable_transcoding='no'])
340AM_CONDITIONAL([HAVE_TRANSCODING], [test "x$enable_transcoding" = 'xyes'])
341
342AQUALUNG_DETECT([wavpack], [WavPack],
343    [PKG_CHECK_MODULES([wavpack], [wavpack >= 4.40.0],
344        [AQUALUNG_FOUND([wavpack])],
345        [AQUALUNG_MISSING([wavpack], [$wavpack_PKG_ERRORS])])])
346
347
348#
349# DSP Library Options
350#
351AQUALUNG_DETECT([ladspa], [LADSPA Plugin], [
352    PKG_CHECK_MODULES([lrdf], [lrdf >= 0.4.0],
353        [AQUALUNG_FOUND([ladspa])],
354        [AQUALUNG_MISSING([ladspa],
355            [LADSPA support requires liblrdf >= 0.4.0])])
356    AS_CASE([$with_ladspa], [yes*],
357        [AC_CHECK_FUNC([dlopen], [],
358            [AC_CHECK_LIB([dl], [dlopen], [lrdf_LIBS="$lrdf_LIBS -ldl"], [
359                AQUALUNG_MISSING([ladspa],
360                    [LADSPA support requires dynamic loading])
361                with_ladspa='no (missing dlopen)'
362            ])])])
363])
364
365AQUALUNG_DETECT([src], [Sample Rate Converter],
366    [PKG_CHECK_MODULES([src], [samplerate],
367        [AQUALUNG_FOUND([src])],
368        [AQUALUNG_MISSING([src], [$src_PKG_ERRORS])])])
369
370
371#
372# Hardware Library Options
373#
374AQUALUNG_DETECT([cdda], [Compact Disc Digital Audio],
375    [PKG_CHECK_MODULES([cdio], [libcdio >= 0.76 libcdio_paranoia],
376        [
377            AQUALUNG_FOUND([cdda])
378            AC_CHECK_HEADERS([cdio/paranoia/cdda.h cdio/paranoia/paranoia.h])
379        ],
380        [AQUALUNG_MISSING([cdda], [$cdio_PKG_ERRORS])])])
381
382AQUALUNG_DETECT([ifp], [iRiver iFP],
383    [AC_CHECK_LIB([usb], [usb_init],
384        [AC_CHECK_LIB([ifp], [ifp_find_device],
385            [AQUALUNG_FOUND([ifp], [-lusb -lifp])],
386            [AQUALUNG_MISSING([ifp], [iRiver iFP support requires libifp])])],
387        [AQUALUNG_MISSING([ifp], [iRiver iFP support requires libusb])])])
388
389
390#
391# Miscellaneous Library Options
392#
393AQUALUNG_DETECT([cddb], [Compact Disc Database], [
394    PKG_CHECK_MODULES([cddb], [libcddb >= 1.2.1],
395        [AQUALUNG_FOUND([cddb])],
396        [AQUALUNG_MISSING([cddb], [$cddb_PKG_ERRORS])])
397    AC_CHECK_LIB([cddb], [cddb_disc_get_revision],
398        [AC_DEFINE([LIBCDDB_REVISION], [1],
399            [Define if libcddb has cddb_disc_get_revision function])])
400])
401
402AQUALUNG_DETECT([lua], [Lua Extension],
403    [PKG_CHECK_MODULES([lua], [lua5.2],
404        [AQUALUNG_FOUND([lua])],
405        [PKG_CHECK_MODULES([lua], [lua-5.2],
406            [AQUALUNG_FOUND([lua])],
407            [PKG_CHECK_MODULES([lua], [lua52],
408                [AQUALUNG_FOUND([lua])],
409                [PKG_CHECK_MODULES([lua], [lua5.1],
410                    [AQUALUNG_FOUND([lua])],
411                    [PKG_CHECK_MODULES([lua], [lua-5.1],
412                        [AQUALUNG_FOUND([lua])],
413                        [PKG_CHECK_MODULES([lua], [lua51],
414                            [AQUALUNG_FOUND([lua])],
415                            [PKG_CHECK_MODULES([lua], [lua >= 5.2],
416                                [AQUALUNG_FOUND([lua])],
417                                    [PKG_CHECK_MODULES([lua], [lua >= 5.1],
418                                    [AQUALUNG_FOUND([lua])],
419                                [AQUALUNG_MISSING([lua], [$lua_PKG_ERRORS])])])])])])])])])])
420
421
422# Compiler and linker variables.
423AS_VAR_IF([GCC], [yes], [CFLAGS="-Wall $CFLAGS"])
424AS_VAR_IF([GXX], [yes], [CXXFLAGS="-Wall $CXXFLAGS"])
425
426
427AC_MSG_NOTICE([summary
428---------------------------------------------------------------------------
429
430  Build type / target platform            :  $buildtype / $host_os
431
432  Optional features:
433      LADSPA plugin support               :  $with_ladspa
434      CDDA (Audio CD) support             :  $with_cdda
435      CDDB support                        :  $with_cddb
436      Sample Rate Converter support       :  $with_src
437      iRiver iFP driver support           :  $with_ifp
438      JACK port management support        :  $enable_jack_mgmt
439      Loop playback support               :  $enable_loop
440      Systray support                     :  $enable_systray
441      Podcast support                     :  $enable_podcast
442      Lua extension support               :  $with_lua
443
444  Decoding support:
445      sndfile (WAV, AIFF, AU, etc.)       :  $with_sndfile
446      Free Lossless Audio Codec (FLAC)    :  $with_flac
447      Ogg Vorbis                          :  $with_vorbis
448      Ogg Speex                           :  $with_speex
449      MPEG Audio (MPEG 1-2.5 Layer I-III) :  $with_mpeg
450      MOD Audio (MOD, S3M, XM, IT, etc.)  :  $with_mod
451      Musepack                            :  $with_mpc
452      Monkey's Audio Codec                :  $with_mac
453      WavPack                             :  $with_wavpack
454      LAVC (AC3, AAC, WavPack, WMA, etc.) :  $with_lavc
455
456  Encoding support:
457      sndfile (WAV)                       :  $with_sndfile_enc
458      Free Lossless Audio Codec (FLAC)    :  $with_flac_enc
459      Ogg Vorbis                          :  $with_vorbisenc
460      LAME (MP3)                          :  $with_lame
461
462  Output driver support:
463      sndio Audio                         :  $with_sndio
464      OSS Audio                           :  $with_oss
465      ALSA Audio                          :  $with_alsa
466      JACK Audio Server                   :  $with_jack
467      PulseAudio                          :  $with_pulse
468      Win32 Sound API                     :  $with_winmm
469
470---------------------------------------------------------------------------])
471AC_OUTPUT
472