configure.ac 25.2 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])
5
AC_INIT([Ring Daemon],[4.2.0],[ring@gnu.org],[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 subdir-objects])
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

Guillaume Roguez's avatar
Guillaume Roguez committed
142 143
dnl Check for C++14 support
AX_CXX_COMPILE_STDCXX(14,[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])
       ]);
385
       AM_CONDITIONAL(RING_DBUS, true)],TESTS= $(check_PROGRAMS)
Adrien Béraud's avatar
Adrien Béraud committed
386
       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])

Adrien Béraud's avatar
Adrien Béraud committed
393 394 395 396 397 398 399 400 401 402 403 404 405 406
dnl Ring nodejs module
AC_ARG_WITH([nodejs], AS_HELP_STRING([--with-nodejs], [Enable Ring NodeJS module]))
AM_CONDITIONAL([RING_NODEJS], test "x$enable_nodejs" != "xno", [Define if you use the Ring NodeJS module])
AC_DEFINE_UNQUOTED([HAVE_NODEJS], `if test "x$enable_ringns" != "xno"; then echo 1; else echo 0; fi`, [Define if you use the Ring NodeJS module])
AS_IF([test "x$with_nodejs" = "xyes"], [
    AC_PATH_PROG(SWIG, swig, "")
    AS_AC_EXPAND(SBINDIR, $sbindir)
    AC_SUBST(SBINDIR)
    AC_CONFIG_FILES([bin/nodejs/Makefile])
    AM_CONDITIONAL(RING_NODEJS, true)
  ],
  AM_CONDITIONAL(RING_NODEJS, false)
);

Guillaume Roguez's avatar
Guillaume Roguez committed
407 408 409
# Rest C++ with restbed
AC_ARG_WITH([restcpp],
    AS_HELP_STRING([--with-restcpp], [enable rest support with C++]))
410 411 412 413
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
414

415 416
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
417

418
AS_IF([test "x$with_restcpp" = "xyes"], [
Guillaume Roguez's avatar
Guillaume Roguez committed
419 420 421
    AS_AC_EXPAND(SBINDIR, $sbindir)
    AC_SUBST(SBINDIR)
    AC_CONFIG_FILES([bin/restcpp/Makefile])
422 423 424 425
    AM_CONDITIONAL(RING_RESTCPP, true)
  ],
  AM_CONDITIONAL(RING_RESTCPP, false)
);
426

427
dnl Check for libav
Philippe Gorley's avatar
Philippe Gorley committed
428
PKG_CHECK_MODULES(LIBAVUTIL, libavutil >= 54.31.100,, AC_MSG_ERROR([Missing libavutil development files]))
429

Philippe Gorley's avatar
Philippe Gorley committed
430
PKG_CHECK_MODULES(LIBAVCODEC, libavcodec >= 56.60.100,, AC_MSG_ERROR([Missing libavcodec development files]))
Philippe Gorley's avatar
Philippe Gorley committed
431
LIBAVCODEC_CFLAGS="${LIBAVCODEC_CFLAGS} -D__STDC_CONSTANT_MACROS"
432

Philippe Gorley's avatar
Philippe Gorley committed
433
PKG_CHECK_MODULES(LIBAVFORMAT, libavformat >= 56.40.101,, AC_MSG_ERROR([Missing libavformat development files]))
434

Philippe Gorley's avatar
Philippe Gorley committed
435
PKG_CHECK_MODULES(LIBAVDEVICE, libavdevice >= 56.4.100,, AC_MSG_ERROR([Missing libavdevice development files]))
436

Philippe Gorley's avatar
Philippe Gorley committed
437
PKG_CHECK_MODULES(LIBSWSCALE, libswscale >= 3.1.101,, AC_MSG_ERROR([Missing libswscale development files]))
438

Tristan Matthews's avatar
Tristan Matthews committed
439 440
dnl Video is default-enabled
AC_ARG_ENABLE([video], AS_HELP_STRING([--disable-video], [Disable video]))
441

Tristan Matthews's avatar
Tristan Matthews committed
442
AS_IF([test "x$enable_video" != "xno"],
443
      [
Adrien Béraud's avatar
Adrien Béraud committed
444 445
        AC_DEFINE(RING_VIDEO, [], [Video support enabled])
        AM_CONDITIONAL(RING_VIDEO, true)
Adrien Béraud's avatar
Adrien Béraud committed
446
        AS_IF([test "$SYS" = linux && test -z "${HAVE_ANDROID_FALSE}"],[
447 448 449
            PKG_CHECK_MODULES(UDEV, libudev,, AC_MSG_ERROR([Missing libudev development files]))
        ],[
        ])
450
    ],
451
    [
Adrien Béraud's avatar
Adrien Béraud committed
452
     AM_CONDITIONAL(RING_VIDEO, false)
453
     ]);
454

Philippe Gorley's avatar
Philippe Gorley committed
455
AC_ARG_ENABLE([accel], AS_HELP_STRING([--disable-accel], [Disable all hardware accelerations (enabled by default)]))
456
AS_IF([test "x$enable_video" != "xno" -a "x$enable_accel" != "xno"], [
Philippe Gorley's avatar
Philippe Gorley committed
457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476
  dnl if new hwaccel api is found, activate Ring's hardware accel
  dnl prefix needs to be different from the one above
  PKG_CHECK_MODULES(AVUTIL, libavutil >= 55.75.100, [
    ring_accel="yes"
    AC_DEFINE([RING_ACCEL], [1], [Hardware acceleration is enabled in Ring])
    AS_IF([test "${SYS}" = "linux" && test -z "${HAVE_ANDROID_FALSE}"], [
      dnl ffmpeg's vaapi and vdpau implementations depend on x11
      PKG_CHECK_MODULES([X11], [x11], [x11_available="yes"], [x11_available="no"])
      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], [Defined if vaapi via DRM is available])
          ], [])
          PKG_CHECK_MODULES([LIBVA_X11], [libva-x11], [
            AC_DEFINE([HAVE_VAAPI_ACCEL_X11], [1], [Defined if vaapi via X11 is available])
          ], [])
          AC_CHECK_HEADERS([libavcodec/vaapi.h], [
            ring_vaapi="yes"
            AC_DEFINE([RING_VAAPI], [1], [Defined if vaapi is available in Ring])
          ])
Philippe Gorley's avatar
Philippe Gorley committed
477
        ], [])
Philippe Gorley's avatar
Philippe Gorley committed
478 479 480 481 482
        PKG_CHECK_MODULES([VDPAU], [vdpau], [
          AC_CHECK_HEADERS([libavcodec/vdpau.h], [
            ring_vdpau="yes"
            AC_DEFINE([RING_VDPAU], [1], [Defined if vdpau is available in Ring])
          ])
Philippe Gorley's avatar
Philippe Gorley committed
483
        ], [])
Philippe Gorley's avatar
Philippe Gorley committed
484
      ])
485
    ])
Philippe Gorley's avatar
Philippe Gorley committed
486 487 488 489 490 491
    AS_IF([test "${SYS}" = "darwin"], [
      AC_CHECK_HEADER([VideoToolbox/VideoToolbox.h], [
        AC_CHECK_HEADER([libavcodec/videotoolbox.h], [
          ring_vt="yes"
          AC_DEFINE([RING_VIDEOTOOLBOX], [1], [Defined if videotoolbox is available in Ring])
        ])
Philippe Gorley's avatar
Philippe Gorley committed
492
      ])
493
    ])
Philippe Gorley's avatar
Philippe Gorley committed
494
  ],[AC_MSG_NOTICE([HWAccel API not found])])
495 496 497
])
AM_CONDITIONAL([RING_ACCEL], [test "x${ring_accel}" = "xyes"])
AM_CONDITIONAL([RING_VAAPI], [test "x${ring_vaapi}" = "xyes"])
498
AM_CONDITIONAL([RING_VDPAU], [test "x${ring_vdpau}" = "xyes"])
499
AM_CONDITIONAL([RING_VIDEOTOOLBOX], [test "x${ring_vt}" = "xyes"])
500 501 502

dnl check for GnuTLS
PKG_CHECK_MODULES([GNUTLS], [gnutls >= 3.4.14], [HAVE_GNUTLS=1], [HAVE_GNUTLS=0])
503 504 505

# PTHREAD
# required dependency(ies): libxpat
506
AX_PTHREAD
507

508

509 510
# SDES Key Exchange
# required dependency(ies): libpcre
511
AC_ARG_WITH([sdes],
512
    [AS_HELP_STRING([--without-sdes], [disable support for sdes key exchange])],
513 514
    [],
    [with_sdes=yes])
515
AS_IF([test "x$with_sdes" = "xyes"], [
516
      PKG_CHECK_MODULES(PCRE, [libpcre],,AC_MSG_ERROR([libpcre not found]))]);
517

518 519
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
520

521

522 523 524
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 ))
525

526

527
if test "${SYS}" != "mingw32"; then
528 529
# GSM CODEC
# required dependency(ies): libgsm
530 531
dnl check for libgsm1 (doesn't use pkg-config)
dnl Check for libgsm
532
AC_ARG_WITH([gsm], [AS_HELP_STRING([--without-gsm],
533
            [disable support for gsm codec])], [], [with_gsm=yes])
534 535 536

LIBGSM=
AS_IF([test "x$with_gsm" != xno],
537 538 539 540 541
        [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.])
        ])
    ])
542

543
AC_DEFINE_UNQUOTED([HAVE_GSM], `if test "x$with_gsm" = "xyes"; then echo 1; else echo 0; fi`, [Define if you have libgsm])
544
fi
545 546
AM_CONDITIONAL(BUILD_GSM, test "x$with_gsm" = "xyes" )

547

548 549
# SPEEX CODEC
# required dependency(ies): libspeex
550
dnl Check for libspeex
551
AC_ARG_WITH([speex],
552
        [AS_HELP_STRING([--without-speex], [disable support for speex codec])],
553 554
        [],
        [with_speex=yes])
555

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

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

561

562 563
# SPEEX DSP
# required dependency(ies): libspeexdsp
564
dnl check in case the libspeexdsp is not installed
565
AC_ARG_WITH([speexdsp],
566 567 568 569
    [AS_HELP_STRING([--without-speexdsp],
    [disable support for speexdp Noise Suppression and Automatic Gain Control])],
    [],
    [with_speexdsp=yes])
570

571
AS_IF([test "x$with_speexdsp" != xno], [PKG_CHECK_MODULES([SPEEXDSP], [speexdsp])])
572 573 574 575

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" )

576
dnl iLBC is enabled if it's installed
577
AC_ARG_WITH([libilbc],
578 579 580 581 582 583
  [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])],
584
  [no], [HAVE_LIBILBC=0],
585
  [PKG_CHECK_MODULES([libilbc], [libilbc], [HAVE_LIBILBC=1], [HAVE_LIBILBC=0])])
586
AM_CONDITIONAL([BUILD_ILBC], [test "$HAVE_LIBILBC" -eq 1])
jpbl's avatar
jpbl committed
587

588
dnl opus is enabled if it's installed
589
AC_ARG_WITH([opus],
590 591 592
  [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])],
593
  [no], [HAVE_OPUS=0],
594
  [PKG_CHECK_MODULES([opus], [opus], [HAVE_OPUS=1], [HAVE_OPUS=0])])
595
AM_CONDITIONAL([BUILD_OPUS], [test "$HAVE_OPUS" -eq 1])
jpbl's avatar
jpbl committed
596

597 598
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
599

600 601 602
dnl check for argon2
PKG_CHECK_MODULES([ARGON2], [libargon2],, AC_MSG_FAILURE([Missing Argon2]))

603
PKG_CHECK_MODULES([SECP256K1], [libsecp256k1 >= 0.1],, AC_MSG_FAILURE([Missing secp256k1]))
Adrien Béraud's avatar
Adrien Béraud committed
604

605 606 607
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
608 609
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" )
610

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

Stepan Salenikovich's avatar
Stepan Salenikovich committed
616 617 618 619 620 621
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])])
      ])
622

Adrien Béraud's avatar
Adrien Béraud committed
623 624 625 626 627 628 629 630 631 632 633 634 635 636
# 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])

637
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
638
    [Define if you have shared memory support])
639

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

657 658
# Actually perform the doxygen check
BB_ENABLE_DOXYGEN
659 660


661 662 663 664
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"],
665
      [CXXFLAGS="${CXXFLAGS} -g -fno-omit-frame-pointer -Wall -Wextra -Wnon-virtual-dtor -Wno-unknown-pragmas -Wformat=2 -O0"])
666 667 668

dnl What Makefiles to generate

Guillaume Roguez's avatar
Guillaume Roguez committed
669

670
#TODO: split this list across where the relevant check is performed
671
AC_CONFIG_FILES([Makefile \
672
                 bin/Makefile \
673 674 675
                 src/Makefile \
                 src/sip/Makefile \
                 src/im/Makefile \
676
                 src/ringdht/Makefile \
Adrien Béraud's avatar
Adrien Béraud committed
677 678
                 src/ringdht/eth/libdevcore/Makefile \
                 src/ringdht/eth/libdevcrypto/Makefile \
679 680 681 682 683 684 685
                 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
686
                 src/media/audio/portaudio/Makefile \
687
                 src/media/audio/sound/Makefile \
688
                 src/config/Makefile \
689
                 src/client/Makefile \
690
                 src/hooks/Makefile \
691 692
                 src/media/video/Makefile \
                 src/media/video/v4l2/Makefile \
693
                 src/media/video/androidvideo/Makefile \
694
                 src/media/video/osxvideo/Makefile \
Edric Milaret's avatar
Edric Milaret committed
695
                 src/media/video/winvideo/Makefile \
696
                 src/security/Makefile \
Stepan Salenikovich's avatar
Stepan Salenikovich committed
697
                 src/upnp/Makefile \
698
                 ringtones/Makefile \
Guillaume Roguez's avatar
Guillaume Roguez committed
699
                 test/Makefile\
700 701
                 test/sip/Makefile
                 test/turn/Makefile \
702 703
                 test/unitTest/Makefile \

704 705 706
                 man/Makefile \
                 doc/Makefile \
                 doc/doxygen/Makefile])
707

708
# Go!
Rafaël Carré's avatar
Rafaël Carré committed
709
AC_OUTPUT