configure.ac 24.8 KB
Newer Older
1
dnl Ring - configure.ac for automake 1.9 and autoconf 2.59
2

3
dnl Process this file with autoconf to produce a configure script.
4
AC_PREREQ([2.65])
Guillaume Roguez's avatar
Guillaume Roguez committed
5
AC_INIT([Ring],[3.0.0],[ring@lists.savoirfairelinux.net],[ring])
6

7
AC_COPYRIGHT([[Copyright (c) Savoir-faire Linux 2004-2017]])
8 9
AC_REVISION([$Revision$])

10
dnl Where to find configure files
Adrien Béraud's avatar
Adrien Béraud committed
11
AC_CONFIG_SRCDIR(src/ring_api.cpp)
12
AC_CONFIG_AUX_DIR([build-aux])
13 14 15 16
AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_BUILD
AC_CANONICAL_HOST

17
AM_INIT_AUTOMAKE([-Wno-portability])
18
m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) # required by automake 1.12
19
AC_CONFIG_HEADERS([config.h])
20

21
# Silent build by default. Use make V=1 to increase verbosity
22
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
23

24 25 26
dnl Check for programs
AC_PROG_CC
AC_PROG_CXX
27
AC_PROG_OBJCXX
28 29 30 31
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
Adrien Béraud's avatar
Adrien Béraud committed
32
AC_LANG(C++)
33

34 35 36 37
dnl
dnl  Check the operating system
dnl
HAVE_WIN64="0"
38
HAVE_IOS="0"
39 40 41 42 43 44 45 46 47 48
HAVE_OSX="0"

case "${host_os}" in
  "")
    SYS=unknown
    ;;
  linux*)
    SYS=linux
    # Necessary for linking .a to a .so
    LDFLAGS+=" -Wl,-Bsymbolic"
49 50
    # Needed for plugin system
    LDFLAGS+=" -ldl"
51 52 53
    ;;
  darwin*)
    SYS=darwin
Guillaume Roguez's avatar
Guillaume Roguez committed
54 55 56 57 58 59 60 61
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
        [[#import <TargetConditionals.h>
          #if TARGET_OS_IPHONE == 0
          #error this is not an IPHONE
          #endif
        ]])],
        [HAVE_IOS="1"],
        [HAVE_OSX="1"])
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
    ;;
  mingw32*)
    SYS=mingw32
    AC_CHECK_TOOL(WINDRES, windres, :)
    AC_CHECK_TOOL(OBJCOPY, objcopy, :)
    AC_DEFINE([_UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
    AC_DEFINE([UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
    AC_DEFINE([_ISOC99_SOURCE], [1], [Extensions to ISO C89 from ISO C99.])
    AC_DEFINE([_ISOC11_SOURCE], [1], [Extensions to ISO C99 from ISO C11.])
    AC_DEFINE([_POSIX_SOURCE], [1], [IEEE Std 1003.1.])
    AC_DEFINE([_POSIX_C_SOURCE], [200809L], [IEEE Std 1003.1.])
    AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
    AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [XPG things and X/Open Unix extensions.])
    AC_DEFINE([_BSD_SOURCE], [1], [ISO C, POSIX, and 4.3BSD things.])
    AC_DEFINE([_SVID_SOURCE], [1], [ISO C, POSIX, and SVID things.])
Edric Milaret's avatar
Edric Milaret committed
77

Edric Milaret's avatar
Edric Milaret committed
78
    AC_DEFINE([WIN32_LEAN_AND_MEAN],[1], [Define to limit the scope of <windows.h>.])
Edric Milaret's avatar
Edric Milaret committed
79

80
    CPPFLAGS+="-D_WIN32_WINNT=0x0601 -DWINVER=0x0601 -D__USE_MINGW_ANSI_STDIO=1"
81 82
    LDFLAGS+="-Wl,--nxcompat -Wl,--dynamicbase"
    LIBS+=" -lws2_32"
83 84 85 86
    ac_default_prefix="`pwd`/_win32"
    DESTDIR="`pwd`/_win32/"
    AC_SUBST(WINDOWS_ARCH)
    AC_SUBST(PROGRAMFILES)
Edric Milaret's avatar
Edric Milaret committed
87 88 89 90 91 92

    case "${host}" in
            amd64*|x86_64*)
                HAVE_WIN64="1"
            ;;
    esac
93 94 95 96 97 98 99 100 101 102
    ;;
  *)
    SYS="${host_os}"
    ;;
esac
AM_CONDITIONAL(HAVE_DARWIN,  test "${SYS}" = "darwin")
AM_CONDITIONAL(HAVE_LINUX,   test "${SYS}" = "linux")
AM_CONDITIONAL(HAVE_WIN32,   test "${SYS}" = "mingw32")
AM_CONDITIONAL(HAVE_WIN64,   test "${HAVE_WIN64}" = "1")
AM_CONDITIONAL(HAVE_OSX,   test "${HAVE_OSX}" = "1")
Edric Milaret's avatar
Edric Milaret committed
103
AM_CONDITIONAL(HAVE_IOS,   test "${HAVE_IOS}" = "1")
104

105 106
dnl FIXME this should be deduced automatically
AC_DEFINE_UNQUOTED([HAVE_COREAUDIO],
107
                    `if test "${HAVE_OSX}" = "1" || test "${HAVE_IOS}" = "1"; then echo 1; else echo 0; fi`,
108 109
                    [Define if you have CoreAudio])

110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
dnl Android is linux, but a bit different
AS_IF([test "$SYS" = linux],[
    AC_MSG_CHECKING([for an Android system])
    AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
        [[#ifndef __ANDROID__
         # error Not Android
         #endif
        ]],[[;]])
    ],[
      HAVE_ANDROID="1"
      AC_MSG_RESULT([yes])
    ],[
      AC_MSG_RESULT([no])
    ])
])
AM_CONDITIONAL(HAVE_ANDROID, test "${HAVE_ANDROID}" = "1")

127 128 129 130 131 132 133
dnl override platform specific check for dependent libraries
dnl otherwise libtool linking of shared libraries will
dnl fail on anything other than pass_all.
AC_CACHE_VAL(lt_cv_deplibs_check_method,
    [lt_cv_deplibs_check_method=pass_all])

LT_INIT([dlopen win32-dll shared disable-static])
134

Rafaël Carré's avatar
Rafaël Carré committed
135
dnl Define C++ as default language
136 137
LT_LANG(C++)

Luca Barbato's avatar
Luca Barbato committed
138 139
DOLT

140
lt_cv_deplibs_check_method=pass_all
yanmorin's avatar
 
yanmorin committed
141

142
dnl Check for C++11 support
143
AX_CXX_COMPILE_STDCXX_11([ext],[mandatory])
144

Rafaël Carré's avatar
Rafaël Carré committed
145 146 147
dnl Check for header files
AC_FUNC_ALLOCA
AC_HEADER_STDC
148 149 150
AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h limits.h \
                  netdb.h netinet/in.h stdlib.h string.h \
                  sys/ioctl.h sys/socket.h sys/time.h unistd.h])
Rafaël Carré's avatar
Rafaël Carré committed
151 152 153 154 155 156 157 158 159 160

dnl Check for typedefs, structures, and compiler characteristics
AC_HEADER_STAT
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_C_VOLATILE
161 162
AC_CHECK_TYPES([ptrdiff_t])

Tristan Matthews's avatar
Tristan Matthews committed
163
PKG_PROG_PKG_CONFIG()
yanmorin's avatar
 
yanmorin committed
164

165 166 167 168 169 170 171
dnl On some OS we need static linking
AS_IF([test -n "${PKG_CONFIG}" ],[
    AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "darwin"],[
        PKG_CONFIG="${PKG_CONFIG} --static"
    ])
])

172 173 174 175 176 177 178 179 180 181 182
dnl Check if we are using clang
AC_MSG_CHECKING([if compiling with clang])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([], [[
#ifndef __clang__
       not clang
#endif
]])],
[CLANG=yes], [CLANG=no])

AC_MSG_RESULT([$CLANG])
183

184 185 186 187 188 189 190 191 192
dnl
dnl  Check for the contrib directory
dnl
AC_ARG_WITH(contrib,
  [AS_HELP_STRING([--with-contrib[=DIR]],
    [search for 3rd party libraries in DIR/include and DIR/lib])
])
AC_MSG_CHECKING([for 3rd party libraries path])
AS_IF([test -z "${with_contrib}" || test "${with_contrib}" = "yes"], [
Tristan Matthews's avatar
Tristan Matthews committed
193
  CONTRIB_DIR="${srcdir}/contrib/${host}"
194 195
  AS_IF([test ! -d "${CONTRIB_DIR}"], [
    echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
Tristan Matthews's avatar
Tristan Matthews committed
196
    CONTRIB_DIR="${srcdir}/contrib/`$CC -dumpmachine`"
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
    AS_IF([test ! -d "${CONTRIB_DIR}"], [
      echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
      CONTRIB_DIR=""
      AC_MSG_RESULT([not found])
    ])
  ])
], [
  AS_IF([test "${with_contrib}" != "no"], [
    CONTRIB_DIR="${with_contrib}"
  ], [
    CONTRIB_DIR=""
    AC_MSG_RESULT([disabled])
  ])
])

AS_IF([test -n "${CONTRIB_DIR}"], [
  AS_IF([test -d "${CONTRIB_DIR}/lib"],[
    CONTRIB_DIR=`cd "${CONTRIB_DIR}" && pwd`
  ], [
    echo "${CONTRIB_DIR}/lib not found" >&AS_MESSAGE_LOG_FD
    CONTRIB_DIR=""
    AC_MSG_RESULT([not usable])
  ])
])

AS_IF([test -n "${CONTRIB_DIR}"], [
  AC_MSG_RESULT([${CONTRIB_DIR}])
  export PATH=${CONTRIB_DIR}/bin:$PATH
  CPPFLAGS="${CPPFLAGS} -I${CONTRIB_DIR}/include"
Edric Milaret's avatar
Edric Milaret committed
226 227 228 229 230 231 232 233
  CFLAGS="${CFLAGS} -DPJ_AUTOCONF=1 "
  CXXFLAGS="${CXXFLAGS} -DPJ_AUTOCONF=1 "
  AS_IF([test "${HAVE_WIN64}" = "1"],[
      CFLAGS+=" -DPJ_WIN64=1"
      CXXFLAGS+=" -DPJ_WIN64=1"
  ])
  CFLAGS+=" -I${CONTRIB_DIR}/include"
  CXXFLAGS+=" -I${CONTRIB_DIR}/include"
234
  OBJCFLAGS="${OBJCFLAGS} -I${CONTRIB_DIR}/include"
Edric Milaret's avatar
Edric Milaret committed
235 236 237 238 239
  AS_IF([test "${SYS}" = "mingw32"],[
        PKG_CONFIG_PATH_CUSTOM="${CONTRIB_DIR}/lib/pkgconfig:${CONTRIB_DIR}/lib64/pkgconfig"
        AC_SUBST(PKG_CONFIG_PATH_CUSTOM)
        export PKG_CONFIG_PATH_CUSTOM
  ])
240
  export PKG_CONFIG_PATH="${CONTRIB_DIR}/lib/pkgconfig:${CONTRIB_DIR}/lib64/pkgconfig:$PKG_CONFIG_PATH"
aviau's avatar
aviau committed
241
  LDFLAGS="${LDFLAGS} -L${CONTRIB_DIR}/lib"
242 243 244 245 246 247 248 249 250 251 252 253

  AS_IF([test "${SYS}" = "darwin"], [
    export LD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$LD_LIBRARY_PATH"
    export DYLD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$DYLD_LIBRARY_PATH"
  ])
], [
  AS_IF([test -n "${with_contrib}" && test "${with_contrib}" != "no"], [
    AC_MSG_ERROR([Third party libraries not found!])
  ])
])
AC_SUBST(CONTRIB_DIR)

254 255 256 257 258 259
dnl Add extras/tools to the PATH
TOOLS_DIR="${srcdir}/extras/tools/build/bin"
AS_IF([test -d "${TOOLS_DIR}"], [
  TOOLS_DIR=`cd "${TOOLS_DIR}" && pwd`
  export PATH="${TOOLS_DIR}":$PATH
])
260

aviau's avatar
aviau committed
261 262 263
dnl Check for zlib
PKG_CHECK_MODULES(ZLIB, zlib,, AC_MSG_ERROR([zlib not found]))

264 265 266
dnl Check for pjproject
PKG_CHECK_MODULES(PJPROJECT, libpjproject,, AC_MSG_ERROR([Missing pjproject files]))

267
PKG_CHECK_MODULES([YAMLCPP], [yaml-cpp >= 0.5.1],, AC_MSG_ERROR([yaml-cpp not found]))
Alexandre Lision's avatar
Alexandre Lision committed
268
PKG_CHECK_MODULES([JSONCPP], [jsoncpp >= 1.6.5],, AC_MSG_ERROR([jsoncpp not found]))
269

270
if test "${HAVE_ANDROID}" = "1"; then
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
    dnl Check for OpenSL
    AC_ARG_WITH([opensl],
                AS_HELP_STRING([--without-opensl],
                               [Ignore presence of opensl and disable it]))

    AS_IF([test "x$with_opensl" != "xno"],
          [AC_CHECK_HEADER(["SLES/OpenSLES.h"],
                           [have_opensl=yes], [have_opensl=no])],
          [have_opensl=no])
    AC_DEFINE_UNQUOTED([HAVE_OPENSL],
                       `if test "x$have_opensl" = "xyes"; then echo 1; else echo 0; fi`,
                       [Define if you have OpenSL])
fi
AM_CONDITIONAL([BUILD_OPENSL], test "x$have_opensl" = "xyes")

286
if test "${SYS}" = "linux"; then
Rafaël Carré's avatar
Rafaël Carré committed
287
dnl Check for alsa development package - name: libasound2-dev
288
ALSA_MIN_VERSION=1.0
289
AC_ARG_WITH([alsa],
Guillaume Roguez's avatar
Guillaume Roguez committed
290 291 292
    [AS_HELP_STRING([--without-alsa], [disable support for alsa])],
    [],
    [with_alsa=yes])
293
AS_IF([test "x$with_alsa" = "xyes"], [
294
       PKG_CHECK_MODULES(ALSA, alsa >= ${ALSA_MIN_VERSION},, AC_MSG_ERROR([Missing alsa development files]))
Guillaume Roguez's avatar
Guillaume Roguez committed
295
    ]);
296 297

AC_DEFINE_UNQUOTED([HAVE_ALSA], `if test "x$with_alsa" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have alsa])
298
fi
299 300
AM_CONDITIONAL(BUILD_ALSA, test "x$with_alsa" = "xyes")

301

302
if test "${SYS}" = "linux"; then
Rafaël Carré's avatar
Rafaël Carré committed
303
dnl Check for pulseaudio development package - name: libpulse-dev
304
LIBPULSE_MIN_VERSION=0.9.15
305
AC_ARG_WITH([pulse],
306
    [AS_HELP_STRING([--without-pulse], [disable support for pulseaudio])],
307 308 309
    [],
    [with_pulse=yes])

310
AS_IF([test "x$with_pulse" = "xyes"], [
311
       PKG_CHECK_MODULES(PULSEAUDIO, libpulse >= ${LIBPULSE_MIN_VERSION},, AC_MSG_ERROR([Missing pulseaudio development files]))
312
      ]);
313

314
AC_DEFINE_UNQUOTED([HAVE_PULSE], `if test "x$with_pulse" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have pulseaudio])
315
fi
316
AM_CONDITIONAL(BUILD_PULSE, test "x$with_pulse" = "xyes")
317

318 319 320 321 322 323 324 325 326 327 328 329 330
AC_ARG_WITH([jack],
    AS_HELP_STRING([--without-jack], [Ignore presence of jack and disable it]))

AS_IF([test "x$with_jack" != "xno"],
      [PKG_CHECK_MODULES(JACK, jack, [have_jack=yes], [have_jack=no])],
      [have_jack=no])

AS_IF([test "x$have_jack" = "xyes"],,
      [AS_IF([test "x$with_jack" = "xyes"],
             [AC_MSG_ERROR([jack requested but not found])
      ])
])

Edric Milaret's avatar
Edric Milaret committed
331 332 333 334
dnl check for libportaudio
AS_IF([test "${SYS}" = "mingw32"],[
AC_ARG_WITH([portaudio], [AS_HELP_STRING([--without-portaudio],
            [disable support for portaudio])], [], [with_portaudio=yes])
335
])
Edric Milaret's avatar
Edric Milaret committed
336 337 338
AS_IF([test "x$with_portaudio" = "xyes"],
      [PKG_CHECK_MODULES(PORTAUDIO, [portaudio-2.0],
        [AC_DEFINE([HAVE_PORTAUDIO], 1, [Define if you have portaudio])],
339
        [AC_MSG_ERROR([Missing libportaudio development files])])
Edric Milaret's avatar
Edric Milaret committed
340
      ])
341

Edric Milaret's avatar
Edric Milaret committed
342 343 344
AM_CONDITIONAL(BUILD_PORTAUDIO, test "x$with_portaudio" = "xyes")
AM_CONDITIONAL(HAVE_PORTAUDIO, test "x$with_portaudio" = "xyes")

345 346 347
AC_DEFINE_UNQUOTED([HAVE_JACK], `if test "x$have_jack" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have jack])
AM_CONDITIONAL(BUILD_JACK, test "x$have_jack" = "xyes")

348 349
dnl Check for the samplerate development package - name: libsamplerate0-dev
LIBSAMPLERATE_MIN_VERSION=0.1.2
350
PKG_CHECK_MODULES(SAMPLERATE, samplerate >= ${LIBSAMPLERATE_MIN_VERSION},, AC_MSG_ERROR([Missing libsamplerate development files]))
351

352
dnl Check for the sndfile development package - name: libsndfile-dev
353
PKG_CHECK_MODULES(SNDFILE, sndfile,, AC_MSG_ERROR([Missing sndfile development files]))
354

355 356 357 358
dnl Coverage is default-disabled
AC_ARG_ENABLE([coverage], AS_HELP_STRING([--enable-coverage], [Enable coverage]))

AS_IF([test "x$enable_coverage" = "xyes"], [
359 360
        CXXFLAGS="${CXXFLAGS} --coverage"
        LDFLAGS="${LDFLAGS} --coverage"])
361

362 363 364 365 366 367 368 369
# DBUSCPP
dnl Check for dbuscpp, the C++ bindings for D-Bus
AC_ARG_WITH([dbus],
    [AS_HELP_STRING([--without-dbus], [disable support for dbus])],
    [],
    [with_dbus=yes])
AS_IF([test "x$with_dbus" = "xyes"], [
       PKG_CHECK_MODULES(DBUSCPP, dbus-c++-1,, AC_MSG_WARN([Missing dbus development files]))
370

aviau's avatar
aviau committed
371 372
       AS_AC_EXPAND(LIBDIR, $libdir)
       AC_SUBST(LIBDIR)
373

374
       AC_CONFIG_FILES([bin/dbus/Makefile
Adrien Béraud's avatar
Adrien Béraud committed
375
                        bin/dbus/cx.ring.Ring.service])
376 377 378 379 380 381 382 383 384

       AC_CHECK_PROG(HAVE_DBUSXML2CPP, dbusxx-xml2cpp, true, false)
       if test "x$HAVE_DBUSXML2CPP" = "xfalse"; then
           AC_MSG_ERROR([dbusxx-xml2cpp not found])
       fi

       AS_IF([test "x$CLANG" = "xyes"], [
             AC_MSG_ERROR([dbus does not compile when clang is used, rerun with --without-dbus])
       ]);
Adrien Béraud's avatar
Adrien Béraud committed
385 386
       AM_CONDITIONAL(RING_DBUS, true)],
       AM_CONDITIONAL(RING_DBUS, false));
387

388 389 390 391 392
dnl Ring name service is default-enabled
AC_ARG_ENABLE([ringns], AS_HELP_STRING([--disable-ringns], [Enable Ring Name Service]))
AM_CONDITIONAL([RINGNS], test "x$enable_ringns" != "xno", [Define if you use the Ring Name Service])
AC_DEFINE_UNQUOTED([HAVE_RINGNS], `if test "x$enable_ringns" != "xno"; then echo 1; else echo 0; fi`, [Define if you use the Ring Name Service])

Guillaume Roguez's avatar
Guillaume Roguez committed
393 394 395
# Rest C++ with restbed
AC_ARG_WITH([restcpp],
    AS_HELP_STRING([--with-restcpp], [enable rest support with C++]))
396 397 398 399
AC_ARG_ENABLE([restbed_old_api], AS_HELP_STRING([--enable-restbed-old-api], [Use the old restbed API]))
AS_IF([test "x$enable_restbed_old_api" = "xyes"], [
  AC_DEFINE([RESTBED_OLD_API], [], [Defined if you use the old restbed API])
])
Guillaume Roguez's avatar
Guillaume Roguez committed
400

401 402
AS_IF([test "x$enable_ringns" != "xno" || test "x$with_restcpp" = "xyes"],
  AC_CHECK_LIB(restbed, exit,, AC_MSG_ERROR([Missing restbed files])));
Guillaume Roguez's avatar
Guillaume Roguez committed
403

404
AS_IF([test "x$with_restcpp" = "xyes"], [
Guillaume Roguez's avatar
Guillaume Roguez committed
405 406 407
    AS_AC_EXPAND(SBINDIR, $sbindir)
    AC_SUBST(SBINDIR)
    AC_CONFIG_FILES([bin/restcpp/Makefile])
408 409 410 411
    AM_CONDITIONAL(RING_RESTCPP, true)
  ],
  AM_CONDITIONAL(RING_RESTCPP, false)
);
412

413 414 415 416 417 418 419 420 421 422
dnl Check for libav
PKG_CHECK_MODULES(LIBAVCODEC, libavcodec >= 53.5.0,, AC_MSG_ERROR([Missing libavcodec development files]))
LIBAVCODEC_CFLAGS="${LIBAVCODEC_CFLAGS} -D__STDC_CONSTANT_MACROS"

PKG_CHECK_MODULES(LIBAVFORMAT, libavformat >= 54.20.3,, AC_MSG_ERROR([Missing libavformat development files]))

PKG_CHECK_MODULES(LIBSWSCALE, libswscale >= 1.1.0,, AC_MSG_ERROR([Missing libswscale development files]))

PKG_CHECK_MODULES(LIBAVDEVICE, libavdevice >= 53.0.0,, AC_MSG_ERROR([Missing libavdevice development files]))

423
PKG_CHECK_MODULES(LIBAVUTIL, libavutil >= 52.5.0,, AC_MSG_ERROR([Missing libavutil development files]))
424

Tristan Matthews's avatar
Tristan Matthews committed
425 426
dnl Video is default-enabled
AC_ARG_ENABLE([video], AS_HELP_STRING([--disable-video], [Disable video]))
427

Tristan Matthews's avatar
Tristan Matthews committed
428
AS_IF([test "x$enable_video" != "xno"],
429
      [
Adrien Béraud's avatar
Adrien Béraud committed
430 431
        AC_DEFINE(RING_VIDEO, [], [Video support enabled])
        AM_CONDITIONAL(RING_VIDEO, true)
Adrien Béraud's avatar
Adrien Béraud committed
432
        AS_IF([test "$SYS" = linux && test -z "${HAVE_ANDROID_FALSE}"],[
433 434 435
            PKG_CHECK_MODULES(UDEV, libudev,, AC_MSG_ERROR([Missing libudev development files]))
        ],[
        ])
436
    ],
437
    [
Adrien Béraud's avatar
Adrien Béraud committed
438
     AM_CONDITIONAL(RING_VIDEO, false)
439
     ]);
440

441 442 443 444
dnl Ring video acceleration compile-time dependencies
AS_IF([test "${SYS}" = linux && test -z "${HAVE_ANDROID_FALSE}"], [
  x11_available="no"
  vaapi_available="no"
445 446
  vdpau_available="no"
  dnl ffmpeg's vaapi and vdpau implementations depend on x11
447 448 449 450 451
  PKG_CHECK_MODULES([X11], [x11], [x11_available="yes"], [])
  AS_IF([test "${x11_available}" = "yes"], [
    PKG_CHECK_MODULES([LIBVA], [libva], [
      PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm], [
        AC_DEFINE([HAVE_VAAPI_ACCEL_DRM], [1], [Vaapi via DRM found])
Philippe Gorley's avatar
Philippe Gorley committed
452
      ])
453 454 455 456
      PKG_CHECK_MODULES([LIBVA_X11], [libva-x11], [
        AC_DEFINE([HAVE_VAAPI_ACCEL_X11], [1], [Vaapi via X11 found])
      ])
      AC_CHECK_HEADERS([libavcodec/vaapi.h], [vaapi_available="yes"])
457
    ], [vaapi_available=no])
458 459 460 461 462 463
    PKG_CHECK_MODULES([VDPAU], [vdpau], [
      AC_CHECK_HEADERS([libavcodec/vdpau.h], [
        AC_DEFINE([HAVE_VDPAU_ACCEL], [1], [Vdpau found])
        vdpau_available="yes"
      ])
    ], [vdpau_available="no"])
Philippe Gorley's avatar
Philippe Gorley committed
464
  ])
465 466 467
])

AC_ARG_ENABLE([accel], AS_HELP_STRING([--disable-accel], [Disable all hardware accelerations]))
468
AC_ARG_ENABLE([vdpau], AS_HELP_STRING([--disable-vdpau], [Disable VDPAU hardware acceleration]))
469 470 471 472 473 474 475 476 477 478
AC_ARG_ENABLE([vaapi], AS_HELP_STRING([--disable-vaapi], [Disable VAAPI hardware acceleration]))
AS_IF([test "x$enable_video" != "xno" -a "x$enable_accel" != "xno"], [
  ring_accel="yes"
  AC_DEFINE([RING_ACCEL], [1], [Hardware acceleration is enabled in Ring])
  AS_IF([test "x$enable_vaapi" != "xno"], [
    AS_IF([test "x${vaapi_available}" = "xyes"], [
      ring_vaapi="yes"
      AC_DEFINE([RING_VAAPI], [1], [VAAPI is available in Ring])
    ])
  ])
479 480 481 482 483 484
  AS_IF([test "x$enable_vdpau" != "xno"], [
    AS_IF([test "x${vdpau_available}" = "xyes"], [
      ring_vdpau="yes"
      AC_DEFINE([RING_VDPAU], [1], [VDPAU is available in Ring])
    ])
  ])
485 486 487
])
AM_CONDITIONAL([RING_ACCEL], [test "x${ring_accel}" = "xyes"])
AM_CONDITIONAL([RING_VAAPI], [test "x${ring_vaapi}" = "xyes"])
488
AM_CONDITIONAL([RING_VDPAU], [test "x${ring_vdpau}" = "xyes"])
489 490 491

dnl check for GnuTLS
PKG_CHECK_MODULES([GNUTLS], [gnutls >= 3.4.14], [HAVE_GNUTLS=1], [HAVE_GNUTLS=0])
492 493 494

# PTHREAD
# required dependency(ies): libxpat
495
AX_PTHREAD
496

497

498 499
# SDES Key Exchange
# required dependency(ies): libpcre
500
AC_ARG_WITH([sdes],
501
    [AS_HELP_STRING([--without-sdes], [disable support for sdes key exchange])],
502 503
    [],
    [with_sdes=yes])
504
AS_IF([test "x$with_sdes" = "xyes"], [
505
      PKG_CHECK_MODULES(PCRE, [libpcre],,AC_MSG_ERROR([libpcre not found]))]);
506

507 508
AC_DEFINE_UNQUOTED([HAVE_SDES], `if test "x$with_sdes" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have sdes support])
AM_CONDITIONAL(BUILD_SDES, test "x$with_sdes" = "xyes" )
Alexandre Savard's avatar
Alexandre Savard committed
509

510

511 512 513
dnl Check for libcppunit-dev
CPPUNIT_MIN_VERSION=1.12
PKG_CHECK_MODULES(CPPUNIT, cppunit >= ${CPPUNIT_MIN_VERSION}, AM_CONDITIONAL(BUILD_TEST, test 1 = 1 ), AM_CONDITIONAL(BUILD_TEST, test 0 = 1 ))
514

515

516
if test "${SYS}" != "mingw32"; then
517 518
# GSM CODEC
# required dependency(ies): libgsm
519 520
dnl check for libgsm1 (doesn't use pkg-config)
dnl Check for libgsm
521
AC_ARG_WITH([gsm], [AS_HELP_STRING([--without-gsm],
522
            [disable support for gsm codec])], [], [with_gsm=yes])
523 524 525

LIBGSM=
AS_IF([test "x$with_gsm" != xno],
526 527 528 529 530
        [AC_CHECK_HEADER([gsm/gsm.h], , AC_MSG_FAILURE([Unable to find the libgsm1 headers (you may need to install the dev package).  You may use --without-gsm to compile without gsm codec support.]))]
        [AC_CHECK_LIB([gsm], [gsm_decode], [], [
            AC_MSG_FAILURE([libgsm link test failed. You may use --without-gsm to compile without gsm codec support.])
        ])
    ])
531

532
AC_DEFINE_UNQUOTED([HAVE_GSM], `if test "x$with_gsm" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have libgsm])
533
fi
534 535
AM_CONDITIONAL(BUILD_GSM, test "x$with_gsm" = "xyes" )

536

537 538
# SPEEX CODEC
# required dependency(ies): libspeex
539
dnl Check for libspeex
540
AC_ARG_WITH([speex],
541
        [AS_HELP_STRING([--without-speex], [disable support for speex codec])],
542 543
        [],
        [with_speex=yes])
544

545
AS_IF([test "x$with_speex" != xno], [PKG_CHECK_MODULES([SPEEX], [speex])])
546

Rafaël Carré's avatar
Rafaël Carré committed
547
AC_DEFINE_UNQUOTED([HAVE_SPEEX], `if test "x$with_speex" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have libspeex])
548
AM_CONDITIONAL(BUILD_SPEEX, test "x$with_speex" = "xyes" )
549

550

551 552
# SPEEX DSP
# required dependency(ies): libspeexdsp
553
dnl check in case the libspeexdsp is not installed
554
AC_ARG_WITH([speexdsp],
555 556 557 558
    [AS_HELP_STRING([--without-speexdsp],
    [disable support for speexdp Noise Suppression and Automatic Gain Control])],
    [],
    [with_speexdsp=yes])
559

560
AS_IF([test "x$with_speexdsp" != xno], [PKG_CHECK_MODULES([SPEEXDSP], [speexdsp])])
561 562 563 564

AC_DEFINE_UNQUOTED([HAVE_SPEEXDSP], `if test "x$with_speexdsp" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have libspeexdsp])
AM_CONDITIONAL(BUILD_SPEEXDSP, test "x$with_speexdsp" = "xyes" )

565
dnl iLBC is enabled if it's installed
566
AC_ARG_WITH([libilbc],
567 568 569 570 571 572
  [AS_HELP_STRING([--with-libilbc],
    [support ilbc audio @<:@default=check@:>@])],
  [],
  [with_libilbc=check])
AS_CASE(["$with_libilbc"],
  [yes], [PKG_CHECK_MODULES([libilbc], [libilbc], [HAVE_LIBILBC=1])],
573
  [no], [HAVE_LIBILBC=0],
574
  [PKG_CHECK_MODULES([libilbc], [libilbc], [HAVE_LIBILBC=1], [HAVE_LIBILBC=0])])
575
AM_CONDITIONAL([BUILD_ILBC], [test "$HAVE_LIBILBC" -eq 1])
jpbl's avatar
jpbl committed
576

577
dnl opus is enabled if it's installed
578
AC_ARG_WITH([opus],
579 580 581
  [AS_HELP_STRING([--with-opus], [support opus audio @<:@default=check@:>@])], [], [with_opus=check])
AS_CASE(["$with_opus"],
  [yes], [PKG_CHECK_MODULES([opus], [opus], [HAVE_OPUS=1])],
582
  [no], [HAVE_OPUS=0],
583
  [PKG_CHECK_MODULES([opus], [opus], [HAVE_OPUS=1], [HAVE_OPUS=0])])
584
AM_CONDITIONAL([BUILD_OPUS], [test "$HAVE_OPUS" -eq 1])
jpbl's avatar
jpbl committed
585

586 587
dnl check for openDHT
PKG_CHECK_MODULES([OPENDHT], [opendht >= 0.6.1],, AC_MSG_WARN([Missing OpenDHT]))
Adrien Béraud's avatar
Adrien Béraud committed
588

589 590 591
dnl check for argon2
PKG_CHECK_MODULES([ARGON2], [libargon2],, AC_MSG_FAILURE([Missing Argon2]))

Adrien Béraud's avatar
Adrien Béraud committed
592 593 594 595 596 597 598 599 600 601 602 603
AC_CHECK_HEADER([cryptopp/cryptlib.h], , AC_MSG_FAILURE([Unable to find the cryptopp headers (you may need to install the dev package).]))
LDFLAGS+=" -lcryptopp"
AS_IF([test "${SYS}" = "mingw32"],[
    LDFLAGS+=" -lboost_random -lboost_system"
    CPPFLAGS+=" -DBOOST_SYSTEM_NO_DEPRECATED"
], [
  AX_BOOST_BASE([1.48],,[AC_MSG_ERROR([Ring needs Boost but it was not found in your system])])
  AC_CHECK_LIB([boost_system], exit, , [AC_MSG_FAILURE(['Can't find boost system'])])
  AC_CHECK_LIB([boost_random], exit, , [AC_MSG_FAILURE(['Can't find boost random'])])
  CPPFLAGS+=" -DBOOST_SYSTEM_NO_DEPRECATED"
])

604 605 606
dnl IPv6 mode is default-disabled
AC_ARG_ENABLE([ipv6], AS_HELP_STRING([--enable-ipv6], [Enable IPv6 support]))

Adrien Béraud's avatar
Adrien Béraud committed
607 608
AC_DEFINE_UNQUOTED([HAVE_IPV6], `if test "x$enable_ipv6" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have IPv6])
AM_CONDITIONAL(BUILD_IPV6, test "x$enable_ipv6" = "xyes" )
609

Stepan Salenikovich's avatar
Stepan Salenikovich committed
610 611
# LIBUPNP
dnl check for libupnp
Stepan Salenikovich's avatar
Stepan Salenikovich committed
612 613 614
AC_ARG_WITH([upnp], [AS_HELP_STRING([--without-upnp],
            [disable support for upnp])], [], [with_upnp=yes])

Stepan Salenikovich's avatar
Stepan Salenikovich committed
615 616 617 618 619 620
AS_IF([test "x$with_upnp" = "xyes"],
      [PKG_CHECK_MODULES(LIBUPNP, [libupnp],
        [AC_DEFINE([HAVE_LIBUPNP], 1, [Define if you have libupnp])],
        [AC_MSG_WARN([Missing libupnp development files])
         AC_DEFINE([HAVE_LIBUPNP], 0, [Define if you have libupnp])])
      ])
621

Adrien Béraud's avatar
Adrien Béraud committed
622 623 624 625 626 627 628 629 630 631 632 633 634 635
# LIBNATPMP
dnl check for libnatpmp
AC_ARG_WITH([natpmp], [AS_HELP_STRING([--without-natpmp],
            [disable support for NAT-PMP])], [], [with_natpmp=yes])

AS_IF([test "x$with_natpmp" != xno],
        [AC_CHECK_HEADER([natpmp.h],
            AC_CHECK_LIB([natpmp], [initnatpmp], [], [with_natpmp=no]),
            [AC_MSG_WARN([Unable to find the libnatpmp headers (you may need to install the dev package). You may use --without-natpmp to compile without NAT-PMP support.]);
             with_natpmp=no])
        ],[])

AC_DEFINE_UNQUOTED([HAVE_LIBNATPMP], `if test "x$with_natpmp" != xno; then echo 1; else echo 0; fi`, [Define if you have libnatpmp])

636
AC_DEFINE_UNQUOTED([HAVE_SHM], `if test -z "${HAVE_LINUX_TRUE}" && test -z "${HAVE_ANDROID_FALSE}" ; then echo 1; else echo 0; fi`,
Guillaume Roguez's avatar
Guillaume Roguez committed
637
    [Define if you have shared memory support])
638

639 640
# DOXYGEN
# required dependency(ies): doxygen
641 642 643
# check for doxygen, mostly stolen from http://log4cpp.sourceforge.net/
# ----------------------------------------------------------------------------
AC_DEFUN([BB_ENABLE_DOXYGEN],
Rafaël Carré's avatar
Rafaël Carré committed
644
    [
Rafaël Carré's avatar
Rafaël Carré committed
645
    AC_ARG_ENABLE(doxygen, [  --enable-doxygen        enable documentation generation with doxygen (disabled by default)])
Rafaël Carré's avatar
Rafaël Carré committed
646
    AC_ARG_ENABLE(dot, [  --enable-dot            use 'dot' to generate graphs in doxygen (auto)])
Rafaël Carré's avatar
Rafaël Carré committed
647
    if test "x$enable_doxygen" = xyes; then
Rafaël Carré's avatar
Rafaël Carré committed
648
        AC_PATH_PROG(DOXYGEN, doxygen, , $PATH)
Rafaël Carré's avatar
Rafaël Carré committed
649
        test x$DOXYGEN = x && AC_MSG_ERROR([could not find doxygen])
Rafaël Carré's avatar
Rafaël Carré committed
650
        AC_PATH_PROG(DOT, dot, , $PATH)
Rafaël Carré's avatar
Rafaël Carré committed
651
        test x$DOT = x -a "x$enable_dot" = xyes && AC_MSG_ERROR([could not find dot])
Rafaël Carré's avatar
Rafaël Carré committed
652
    fi
653
    AM_CONDITIONAL(ENABLE_DOXYGEN, test "x$DOXYGEN" != "x")
Rafaël Carré's avatar
Rafaël Carré committed
654
])
655

656 657
# Actually perform the doxygen check
BB_ENABLE_DOXYGEN
658 659


660 661 662 663
dnl debug mode is default-disabled
AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [Build in debug mode, adds stricter warnings, disables optimization]))

AS_IF([test "x$enable_debug" = "xyes"],
664
      [CXXFLAGS="${CXXFLAGS} -g -fno-omit-frame-pointer -Wall -Wextra -Wnon-virtual-dtor -Wno-unknown-pragmas -O0"])
665 666 667

dnl What Makefiles to generate

668
#TODO: split this list across where the relevant check is performed
669
AC_CONFIG_FILES([Makefile \
670
                 bin/Makefile \
671 672 673
                 src/Makefile \
                 src/sip/Makefile \
                 src/im/Makefile \
674
                 src/ringdht/Makefile \
Adrien Béraud's avatar
Adrien Béraud committed
675 676
                 src/ringdht/eth/libdevcore/Makefile \
                 src/ringdht/eth/libdevcrypto/Makefile \
677 678 679 680 681 682 683
                 src/media/Makefile \
                 src/media/audio/Makefile \
                 src/media/audio/pulseaudio/Makefile \
                 src/media/audio/alsa/Makefile \
                 src/media/audio/opensl/Makefile \
                 src/media/audio/jack/Makefile \
                 src/media/audio/coreaudio/Makefile \
Edric Milaret's avatar
Edric Milaret committed
684
                 src/media/audio/portaudio/Makefile \
685
                 src/media/audio/sound/Makefile \
686
                 src/config/Makefile \
687
                 src/client/Makefile \
688
                 src/hooks/Makefile \
689 690
                 src/media/video/Makefile \
                 src/media/video/v4l2/Makefile \
691
                 src/media/video/androidvideo/Makefile \
692
                 src/media/video/osxvideo/Makefile \
Edric Milaret's avatar
Edric Milaret committed
693
                 src/media/video/winvideo/Makefile \
694
                 src/media/video/test/Makefile \
695
                 src/security/Makefile \
Stepan Salenikovich's avatar
Stepan Salenikovich committed
696
                 src/upnp/Makefile \
697 698 699 700
                 ringtones/Makefile \
                 man/Makefile \
                 doc/Makefile \
                 doc/doxygen/Makefile])
701

702
# Go!
Rafaël Carré's avatar
Rafaël Carré committed
703
AC_OUTPUT