Explicitly define _POSIX_C_SOURCE and _XOPEN_SOURCE
[openal-soft.git] / CMakeLists.txt
blobabd81fd20923b0fb1ba074262937f728d05dbbbf
1 # CMake build file list for OpenAL
3 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
5 PROJECT(OpenAL)
7 IF(COMMAND CMAKE_POLICY)
8   CMAKE_POLICY(SET CMP0003 NEW)
9   CMAKE_POLICY(SET CMP0005 NEW)
10 ENDIF(COMMAND CMAKE_POLICY)
12 SET(CMAKE_MODULE_PATH "${OpenAL_SOURCE_DIR}/cmake")
14 INCLUDE(CheckFunctionExists)
15 INCLUDE(CheckLibraryExists)
16 INCLUDE(CheckSharedFunctionExists)
17 INCLUDE(CheckIncludeFile)
18 INCLUDE(CheckIncludeFiles)
19 INCLUDE(CheckSymbolExists)
20 INCLUDE(CheckCCompilerFlag)
21 INCLUDE(CheckCSourceCompiles)
22 INCLUDE(CheckTypeSize)
25 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
28 OPTION(ALSOFT_CPUEXT_SSE  "Check for SSE/SSE2 support" ON)
29 OPTION(ALSOFT_CPUEXT_NEON "Check for ARM Neon support" ON)
31 OPTION(ALSOFT_REQUIRE_SSE  "Require SSE/SSE2 support" OFF)
32 OPTION(ALSOFT_REQUIRE_NEON "Require ARM Neon support" OFF)
34 IF(WIN32)
35     # This option is mainly for static linking OpenAL Soft into another project
36     # that already defines the IDs. It is up to that project to ensure all
37     # required IDs are defined.
38     OPTION(ALSOFT_NO_UID_DEFS "Do not define GUIDs, IIDs, CLSIDs, or PropertyKeys" OFF)
39 ENDIF()
42 OPTION(ALSOFT_BACKEND_ALSA    "Check for ALSA backend"                ON)
43 OPTION(ALSOFT_BACKEND_OSS     "Check for OSS backend"                 ON)
44 OPTION(ALSOFT_BACKEND_SOLARIS "Check for Solaris backend"             ON)
45 OPTION(ALSOFT_BACKEND_SNDIO   "Check for SndIO backend"               ON)
46 OPTION(ALSOFT_BACKEND_QSA     "Check for QSA backend"                 ON)
47 OPTION(ALSOFT_BACKEND_MMDEVAPI "Check for MMDevApi backend"           ON)
48 OPTION(ALSOFT_BACKEND_DSOUND   "Check for DirectSound backend"        ON)
49 OPTION(ALSOFT_BACKEND_WINMM    "Check for Windows Multimedia backend" ON)
50 OPTION(ALSOFT_BACKEND_PORTAUDIO  "Check for PortAudio backend"        ON)
51 OPTION(ALSOFT_BACKEND_PULSEAUDIO "Check for PulseAudio backend"       ON)
52 OPTION(ALSOFT_BACKEND_COREAUDIO  "Check for CoreAudio backend"        ON)
53 OPTION(ALSOFT_BACKEND_OPENSL     "Check for OpenSL backend"           ON)
54 OPTION(ALSOFT_BACKEND_WAVE "Enable Wave Writer backend"               ON)
56 OPTION(ALSOFT_REQUIRE_ALSA       "Require ALSA backend"               OFF)
57 OPTION(ALSOFT_REQUIRE_OSS        "Require OSS backend"                OFF)
58 OPTION(ALSOFT_REQUIRE_SOLARIS    "Require Solaris backend"            OFF)
59 OPTION(ALSOFT_REQUIRE_SNDIO      "Require SndIO backend"              OFF)
60 OPTION(ALSOFT_REQUIRE_QSA        "Require QSA backend"                OFF)
61 OPTION(ALSOFT_REQUIRE_MMDEVAPI   "Require MMDevApi"                   OFF)
62 OPTION(ALSOFT_REQUIRE_DSOUND     "Require DirectSound backend"        OFF)
63 OPTION(ALSOFT_REQUIRE_WINMM      "Require Windows Multimedia backend" OFF)
64 OPTION(ALSOFT_REQUIRE_PORTAUDIO  "Require PortAudio backend"          OFF)
65 OPTION(ALSOFT_REQUIRE_PULSEAUDIO "Require PulseAudio backend"         OFF)
66 OPTION(ALSOFT_REQUIRE_COREAUDIO  "Require CoreAudio backend"          OFF)
67 OPTION(ALSOFT_REQUIRE_OPENSL     "Require OpenSL backend"             OFF)
69 OPTION(ALSOFT_DLOPEN  "Check for the dlopen API for loading optional libs"  ON)
71 OPTION(ALSOFT_WERROR  "Treat compile warnings as errors"      OFF)
73 OPTION(ALSOFT_UTILS          "Build and install utility programs"         ON)
74 OPTION(ALSOFT_NO_CONFIG_UTIL "Disable building the alsoft-config utility" OFF)
76 OPTION(ALSOFT_EXAMPLES  "Build and install example programs"  ON)
78 OPTION(ALSOFT_CONFIG "Install alsoft.conf sample configuration file" ON)
81 IF(WIN32)
82     SET(LIBNAME OpenAL32)
83     ADD_DEFINITIONS("-D_WIN32 -D_WIN32_WINNT=0x0501")
84 ELSE()
85     SET(LIBNAME openal)
86 ENDIF()
88 # QNX's gcc do not uses /usr/include and /usr/lib pathes by default
89 IF ("${CMAKE_C_PLATFORM_ID}" STREQUAL "QNX")
90     ADD_DEFINITIONS("-I/usr/include")
91     SET(EXTRA_LIBS ${EXTRA_LIBS} -L/usr/lib)
92 ENDIF()
94 IF(NOT LIBTYPE)
95     SET(LIBTYPE SHARED)
96 ENDIF()
98 SET(LIB_MAJOR_VERSION "1")
99 SET(LIB_MINOR_VERSION "15")
100 SET(LIB_REVISION "1")
101 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}")
103 SET(EXPORT_DECL "")
104 SET(ALIGN_DECL "")
107 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
108 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
111 CHECK_C_COMPILER_FLAG(-std=c99 HAVE_STD_C99)
112 IF(HAVE_STD_C99)
113     SET(CMAKE_C_FLAGS "-std=c99 ${CMAKE_C_FLAGS}")
114 ENDIF()
116 # TODO: Once we truly require C99, these restrict and inline checks should go
117 # away. Currently they're needed to maintain MSVC compatibility.
118 CHECK_C_SOURCE_COMPILES("int *restrict foo;
119                          int main() {return 0;}" HAVE_RESTRICT)
120 IF(NOT HAVE_RESTRICT)
121     # Slightly convoluted way to do this, because MSVC may barf if restrict is
122     # defined to __restrict.
123     CHECK_C_SOURCE_COMPILES("#define restrict __restrict
124                              #include <stdlib.h>
125                              int *restrict foo;
126                              int main() {return 0;}" HAVE___RESTRICT)
127     IF(HAVE___RESTRICT)
128         ADD_DEFINITIONS(-Drestrict=__restrict)
129     ELSE()
130         ADD_DEFINITIONS("-Drestrict=")
131     ENDIF()
132 ENDIF()
134 CHECK_C_SOURCE_COMPILES("inline void foo(void) { }
135                          int main() {return 0;}" HAVE_INLINE)
136 IF(NOT HAVE_INLINE)
137     CHECK_C_SOURCE_COMPILES("__inline void foo(void) { }
138                              int main() {return 0;}" HAVE___INLINE)
139     IF(NOT HAVE___INLINE)
140         MESSAGE(FATAL_ERROR "No inline keyword found, please report!")
141     ENDIF()
143     ADD_DEFINITIONS(-Dinline=__inline)
144 ENDIF()
147 # Add definitions, compiler switches, etc.
148 INCLUDE_DIRECTORIES("${OpenAL_SOURCE_DIR}/include" "${OpenAL_BINARY_DIR}")
149 IF(CMAKE_VERSION VERSION_LESS "2.8.8")
150     INCLUDE_DIRECTORIES("${OpenAL_SOURCE_DIR}/OpenAL32/Include" "${OpenAL_SOURCE_DIR}/Alc")
151     IF(WIN32 AND ALSOFT_NO_UID_DEFS)
152         ADD_DEFINITIONS("-DAL_NO_UID_DEFS")
153     ENDIF()
154 ENDIF()
156 IF(NOT CMAKE_BUILD_TYPE)
157     SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
158         "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
159         FORCE)
160 ENDIF()
161 IF(NOT CMAKE_DEBUG_POSTFIX)
162     SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
163         "Library postfix for debug builds. Normally left blank."
164         FORCE)
165 ENDIF()
167 IF(MSVC)
168     # ???
169     SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
170     SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
171     SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
172     SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
173     ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
174     ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
175     ADD_DEFINITIONS("/wd4098")
177     IF(NOT DXSDK_DIR)
178         STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
179     ELSE()
180         STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
181     ENDIF()
182     IF(DXSDK_DIR)
183         MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
184         SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
185         INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
186         LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
187     ENDIF()
189     OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
190     IF(FORCE_STATIC_VCRT)
191         FOREACH(flag_var
192                 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
193                 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
194             IF(${flag_var} MATCHES "/MD")
195                 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
196             ENDIF()
197         ENDFOREACH(flag_var)
198     ENDIF()
199 ELSE()
200     ADD_DEFINITIONS(-Winline -Wall)
201     CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
202     IF(HAVE_W_EXTRA)
203         ADD_DEFINITIONS(-Wextra)
204     ENDIF()
206     IF(ALSOFT_WERROR)
207         ADD_DEFINITIONS(-Werror)
208     ENDIF()
210     SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
211         "Flags used by the compiler during Release with Debug Info builds."
212         FORCE)
213     SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
214         "Flags used by the compiler during release minsize builds."
215         FORCE)
216     SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
217         "Flags used by the compiler during release builds"
218         FORCE)
219     SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
220         "Flags used by the compiler during debug builds."
221         FORCE)
223     CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
224                              int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
225 ENDIF()
227 # Set visibility/export options if available
228 IF(WIN32)
229     SET(EXPORT_DECL "__declspec(dllexport)")
230     IF(NOT MINGW)
231         SET(ALIGN_DECL "__declspec(align(x))")
232     ELSE()
233         SET(ALIGN_DECL "__declspec(aligned(x))")
234     ENDIF()
235 ELSE()
236     SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
237     # Yes GCC, really don't accept visibility modes you don't support
238     SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wattributes -Werror")
240     CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"protected\")));
241                              int main() {return 0;}" HAVE_GCC_PROTECTED_VISIBILITY)
242     IF(HAVE_GCC_PROTECTED_VISIBILITY)
243         SET(EXPORT_DECL "__attribute__((visibility(\"protected\")))")
244     ELSE()
245         CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
246                                  int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY)
247         IF(HAVE_GCC_DEFAULT_VISIBILITY)
248             SET(EXPORT_DECL "__attribute__((visibility(\"default\")))")
249         ENDIF()
250     ENDIF()
252     IF(HAVE_GCC_PROTECTED_VISIBILITY OR HAVE_GCC_DEFAULT_VISIBILITY)
253         CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_INTERNAL_SWITCH)
254         IF(HAVE_VISIBILITY_INTERNAL_SWITCH)
255             ADD_DEFINITIONS(-fvisibility=internal)
256         ELSE()
257             CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH)
258             IF(HAVE_VISIBILITY_HIDDEN_SWITCH)
259                 ADD_DEFINITIONS(-fvisibility=hidden)
260             ENDIF()
261         ENDIF()
262     ENDIF()
264     CHECK_C_SOURCE_COMPILES("int foo __attribute__((aligned(16)));
265                              int main() {return 0;}" HAVE_ATTRIBUTE_ALIGNED)
266     IF(HAVE_ATTRIBUTE_ALIGNED)
267         SET(ALIGN_DECL "__attribute__((aligned(x)))")
268     ENDIF()
270     SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
271 ENDIF()
273 SET(SSE_SWITCH "")
274 IF(MSVC)
275     CHECK_C_COMPILER_FLAG(/arch:SSE HAVE_ARCHSSE_SWITCH)
276     IF(HAVE_ARCHSSE_SWITCH)
277         SET(SSE_SWITCH "/arch:SSE")
278     ENDIF()
279 ENDIF()
280 IF(NOT SSE_SWITCH)
281     CHECK_C_COMPILER_FLAG(-msse HAVE_MSSE_SWITCH)
282     IF(HAVE_MSSE_SWITCH)
283         SET(SSE_SWITCH "-msse")
284     ENDIF()
285 ENDIF()
287 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
288                          int main() {return 0;}" HAVE_GCC_FORMAT)
290 CHECK_INCLUDE_FILE(malloc.h HAVE_MALLOC_H)
291 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
292 CHECK_INCLUDE_FILE(cpuid.h HAVE_CPUID_H)
293 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
294 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
295 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
296 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
297 IF(NOT HAVE_GUIDDEF_H)
298     CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
299 ENDIF()
301 # Some systems need libm for some of the following math functions to work
302 CHECK_LIBRARY_EXISTS(m pow "" HAVE_LIBM)
303 IF(HAVE_LIBM)
304     SET(EXTRA_LIBS m ${EXTRA_LIBS})
305     SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m)
306 ENDIF()
309 CHECK_SYMBOL_EXISTS(aligned_alloc    stdlib.h HAVE_ALIGNED_ALLOC)
310 CHECK_SYMBOL_EXISTS(posix_memalign   stdlib.h HAVE_POSIX_MEMALIGN)
311 CHECK_SYMBOL_EXISTS(_aligned_malloc  malloc.h HAVE__ALIGNED_MALLOC)
312 CHECK_SYMBOL_EXISTS(lrintf math.h HAVE_LRINTF)
314 IF(HAVE_FLOAT_H)
315     CHECK_SYMBOL_EXISTS(_controlfp float.h HAVE__CONTROLFP)
316     CHECK_SYMBOL_EXISTS(__control87_2 float.h HAVE___CONTROL87_2)
317 ENDIF()
319 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
320 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
321 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
322 IF(NOT HAVE_STRCASECMP)
323     CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
324     IF(NOT HAVE__STRICMP)
325         MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
326     ENDIF()
328     ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
329 ENDIF()
331 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
332 IF(NOT HAVE_STRNCASECMP)
333     CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
334     IF(NOT HAVE__STRNICMP)
335         MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
336     ENDIF()
338     ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
339 ENDIF()
341 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
342 IF(NOT HAVE_SNPRINTF)
343     CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
344     IF(NOT HAVE__SNPRINTF)
345         MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
346     ENDIF()
348     ADD_DEFINITIONS(-Dsnprintf=_snprintf)
349 ENDIF()
351 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
352 IF(NOT HAVE_ISFINITE)
353     CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
354     IF(NOT HAVE_FINITE)
355         CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
356         IF(NOT HAVE__FINITE)
357             MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
358         ENDIF()
359         ADD_DEFINITIONS(-Disfinite=_finite)
360     ELSE()
361         ADD_DEFINITIONS(-Disfinite=finite)
362     ENDIF()
363 ENDIF()
365 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
366 IF(NOT HAVE_ISNAN)
367     CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
368     IF(NOT HAVE__ISNAN)
369         MESSAGE(FATAL_ERROR "No isnan function found, please report!")
370     ENDIF()
372     ADD_DEFINITIONS(-Disnan=_isnan)
373 ENDIF()
376 # Check for the dlopen API (for dynamicly loading backend libs)
377 IF(ALSOFT_DLOPEN)
378     CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
379     IF(HAVE_DLFCN_H)
380         CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
381         IF(HAVE_LIBDL)
382             SET(EXTRA_LIBS dl ${EXTRA_LIBS})
383         ENDIF()
384     ENDIF()
385 ENDIF()
387 # Check if we have Windows headers
388 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0501)
389 IF(NOT HAVE_WINDOWS_H)
390     # These are needed on some systems for extra features
391     ADD_DEFINITIONS(-D_GNU_SOURCE=1 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700)
392     SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_GNU_SOURCE=1 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700")
394     CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
395     IF(NOT HAVE_GETTIMEOFDAY)
396         MESSAGE(FATAL_ERROR "No timing function found!")
397     ENDIF()
399     CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
400     IF(NOT HAVE_NANOSLEEP)
401         MESSAGE(FATAL_ERROR "No sleep function found!")
402     ENDIF()
404     # We need pthreads outside of Windows
405     CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
406     IF(NOT HAVE_PTHREAD_H)
407         MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
408     ENDIF()
409     # Some systems need pthread_np.h to get recursive mutexes
410     CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
412     CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
413     IF(HAVE_PTHREAD)
414         ADD_DEFINITIONS(-pthread)
415         SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -pthread")
416         SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
417     ENDIF()
419     CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
420     IF(HAVE_LIBPTHREAD)
421         SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
422     ENDIF()
424     CHECK_SYMBOL_EXISTS(pthread_setschedparam pthread.h HAVE_PTHREAD_SETSCHEDPARAM)
426     CHECK_SYMBOL_EXISTS(pthread_setname_np pthread.h HAVE_PTHREAD_SETNAME_NP)
427     IF(NOT HAVE_PTHREAD_SETNAME_NP)
428         CHECK_SYMBOL_EXISTS(pthread_set_name_np pthread.h HAVE_PTHREAD_SET_NAME_NP)
429     ENDIF()
431     CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
432     IF(HAVE_LIBRT)
433         SET(EXTRA_LIBS rt ${EXTRA_LIBS})
434     ENDIF()
435 ENDIF()
437 # Check for a 64-bit type
438 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
439 IF(NOT HAVE_STDINT_H)
440     IF(HAVE_WINDOWS_H)
441         CHECK_C_SOURCE_COMPILES("#define _WIN32_WINNT 0x0501
442                                  #include <windows.h>
443                                  __int64 foo;
444                                  int main() {return 0;}" HAVE___INT64)
445     ENDIF()
446     IF(NOT HAVE___INT64)
447         IF(NOT SIZEOF_LONG MATCHES "8")
448             IF(NOT SIZEOF_LONG_LONG MATCHES "8")
449                 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
450             ENDIF()
451         ENDIF()
452     ENDIF()
453 ENDIF()
455 # Windows needs winmm for timeGetTime, even if the backend is disabled
456 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
457 IF(HAVE_LIBWINMM)
458     SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
459     SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
460 ENDIF()
463 SET(OPENAL_OBJS  OpenAL32/alAuxEffectSlot.c
464                  OpenAL32/alBuffer.c
465                  OpenAL32/alEffect.c
466                  OpenAL32/alError.c
467                  OpenAL32/alExtension.c
468                  OpenAL32/alFilter.c
469                  OpenAL32/alListener.c
470                  OpenAL32/alSource.c
471                  OpenAL32/alState.c
472                  OpenAL32/alThunk.c
474 SET(ALC_OBJS  Alc/ALc.c
475               Alc/ALu.c
476               Alc/alcConfig.c
477               Alc/alcRing.c
478               Alc/bs2b.c
479               Alc/effects/autowah.c
480               Alc/effects/chorus.c
481               Alc/effects/compressor.c
482               Alc/effects/dedicated.c
483               Alc/effects/distortion.c
484               Alc/effects/echo.c
485               Alc/effects/equalizer.c
486               Alc/effects/flanger.c
487               Alc/effects/modulator.c
488               Alc/effects/null.c
489               Alc/effects/reverb.c
490               Alc/helpers.c
491               Alc/hrtf.c
492               Alc/panning.c
493               Alc/threads.c
494               Alc/mixer.c
495               Alc/mixer_c.c
499 SET(CPU_EXTS "Default")
500 SET(HAVE_SSE  0)
501 SET(HAVE_NEON 0)
503 # Check for SSE support
504 IF(ALSOFT_CPUEXT_SSE AND ALIGN_DECL)
505     CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H "${SSE_SWITCH}")
506     IF(HAVE_XMMINTRIN_H)
507         SET(HAVE_SSE 1)
508         SET(ALC_OBJS  ${ALC_OBJS} Alc/mixer_sse.c)
509         IF(SSE_SWITCH)
510             SET_SOURCE_FILES_PROPERTIES(Alc/mixer_sse.c PROPERTIES
511                                         COMPILE_FLAGS "${SSE_SWITCH}")
512         ENDIF()
513         SET(CPU_EXTS "${CPU_EXTS}, SSE")
514     ENDIF()
515 ENDIF()
516 IF(ALSOFT_REQUIRE_SSE AND NOT HAVE_SSE)
517     MESSAGE(FATAL_ERROR "Failed to enabled required SSE CPU extensions")
518 ENDIF()
520 # Check for ARM Neon support
521 IF(ALSOFT_CPUEXT_NEON)
522     CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H)
523     IF(HAVE_ARM_NEON_H)
524         SET(HAVE_NEON 1)
525         SET(ALC_OBJS  ${ALC_OBJS} Alc/mixer_neon.c)
526         SET(CPU_EXTS "${CPU_EXTS}, Neon")
527     ENDIF()
528 ENDIF()
529 IF(ALSOFT_REQUIRE_NEON AND NOT HAVE_NEON)
530     MESSAGE(FATAL_ERROR "Failed to enabled required ARM Neon CPU extensions")
531 ENDIF()
534 SET(ALC_OBJS  ${ALC_OBJS}
535               Alc/backends/base.c
536               # Default backends, always available
537               Alc/backends/loopback.c
538               Alc/backends/null.c
541 SET(BACKENDS "")
542 SET(HAVE_ALSA       0)
543 SET(HAVE_OSS        0)
544 SET(HAVE_SOLARIS    0)
545 SET(HAVE_SNDIO      0)
546 SET(HAVE_QSA        0)
547 SET(HAVE_DSOUND     0)
548 SET(HAVE_MMDEVAPI   0)
549 SET(HAVE_WINMM      0)
550 SET(HAVE_PORTAUDIO  0)
551 SET(HAVE_PULSEAUDIO 0)
552 SET(HAVE_COREAUDIO  0)
553 SET(HAVE_OPENSL     0)
554 SET(HAVE_WAVE       0)
556 # Check ALSA backend
557 IF(ALSOFT_BACKEND_ALSA)
558     CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
559     IF(HAVE_ALSA_ASOUNDLIB_H)
560         CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
561         IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
562             SET(HAVE_ALSA 1)
563             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/alsa.c)
564             IF(HAVE_DLFCN_H OR WIN32)
565                 SET(BACKENDS  "${BACKENDS} ALSA,")
566             ELSE()
567                 SET(BACKENDS  "${BACKENDS} ALSA \(linked\),")
568                 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
569             ENDIF()
570         ENDIF()
571     ENDIF()
572 ENDIF()
573 IF(ALSOFT_REQUIRE_ALSA AND NOT HAVE_ALSA)
574     MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
575 ENDIF()
577 # Check OSS backend
578 IF(ALSOFT_BACKEND_OSS)
579     CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
580     IF(HAVE_SYS_SOUNDCARD_H)
581         SET(HAVE_OSS 1)
582         SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/oss.c)
583         SET(BACKENDS  "${BACKENDS} OSS,")
584     ENDIF()
585 ENDIF()
586 IF(ALSOFT_REQUIRE_OSS AND NOT HAVE_OSS)
587     MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
588 ENDIF()
590 # Check Solaris backend
591 IF(ALSOFT_BACKEND_SOLARIS)
592     CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
593     IF(HAVE_SYS_AUDIOIO_H)
594         SET(HAVE_SOLARIS 1)
595         SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/solaris.c)
596         SET(BACKENDS  "${BACKENDS} Solaris,")
597     ENDIF()
598 ENDIF()
599 IF(ALSOFT_REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
600     MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
601 ENDIF()
603 # Check SndIO backend
604 IF(ALSOFT_BACKEND_SNDIO)
605     CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
606     IF(HAVE_SNDIO_H)
607         CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
608         IF(HAVE_LIBSNDIO)
609             SET(HAVE_SNDIO 1)
610             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/sndio.c)
611             SET(BACKENDS  "${BACKENDS} SndIO \(linked\),")
612             SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
613         ENDIF()
614     ENDIF()
615 ENDIF()
616 IF(ALSOFT_REQUIRE_SNDIO AND NOT HAVE_SNDIO)
617     MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
618 ENDIF()
620 # Check QSA backend
621 IF (ALSOFT_BACKEND_QSA AND "${CMAKE_C_PLATFORM_ID}" STREQUAL "QNX")
622     CHECK_INCLUDE_FILE(sys/asoundlib.h HAVE_SYS_ASOUNDLIB_H)
623     IF(HAVE_SYS_ASOUNDLIB_H)
624         CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "sys/asoundlib.h" asound "" HAVE_LIBASOUND)
625         IF(HAVE_LIBASOUND)
626             SET(HAVE_QSA 1)
627             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/qsa.c)
628             SET(EXTRA_LIBS asound ${EXTRA_LIBS})
629             SET(BACKENDS  "${BACKENDS} QSA \(linked\),")
630         ENDIF()
631     ENDIF()
632 ENDIF()
633 IF(ALSOFT_REQUIRE_QSA AND NOT HAVE_QSA)
634     MESSAGE(FATAL_ERROR "Failed to enabled required QSA backend")
635 ENDIF()
637 # Check for MMDevApi backend
638 IF(HAVE_WINDOWS_H)
639     IF(ALSOFT_BACKEND_MMDEVAPI)
640         CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
641         IF(HAVE_MMDEVICEAPI_H)
642             SET(HAVE_MMDEVAPI 1)
643             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/mmdevapi.c)
645             SET(BACKENDS  "${BACKENDS} MMDevApi,")
646         ENDIF()
647     ENDIF()
648 ENDIF()
649 IF(ALSOFT_REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
650     MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
651 ENDIF()
653 # Check DSound/MMSystem backend
654 IF(ALSOFT_BACKEND_DSOUND)
655     CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
656     IF(HAVE_DSOUND_H)
657         CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
658         IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
659             SET(HAVE_DSOUND 1)
660             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/dsound.c)
662             IF(HAVE_DLFCN_H OR WIN32)
663                 SET(BACKENDS  "${BACKENDS} DirectSound,")
664             ELSE()
665                 SET(BACKENDS  "${BACKENDS} DirectSound \(linked\),")
666                 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
667             ENDIF()
668         ENDIF()
669     ENDIF()
670 ENDIF()
671 IF(ALSOFT_REQUIRE_DSOUND AND NOT HAVE_DSOUND)
672     MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
673 ENDIF()
675 IF(HAVE_WINDOWS_H)
676     IF(ALSOFT_BACKEND_WINMM)
677         CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0501)
678         IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
679             SET(HAVE_WINMM 1)
680             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/winmm.c)
681             SET(BACKENDS  "${BACKENDS} WinMM,")
682         ENDIF()
683     ENDIF()
684 ENDIF()
685 IF(ALSOFT_REQUIRE_WINMM AND NOT HAVE_WINMM)
686     MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
687 ENDIF()
689 # Check PortAudio backend
690 IF(ALSOFT_BACKEND_PORTAUDIO)
691     CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
692     IF(HAVE_PORTAUDIO_H)
693         CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
694         IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
695             SET(HAVE_PORTAUDIO 1)
696             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/portaudio.c)
697             IF(HAVE_DLFCN_H OR WIN32)
698                 SET(BACKENDS  "${BACKENDS} PortAudio,")
699             ELSE()
700                 SET(BACKENDS  "${BACKENDS} PortAudio \(linked\),")
701                 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
702             ENDIF()
703         ENDIF()
704     ENDIF()
705 ENDIF()
706 IF(ALSOFT_REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
707     MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
708 ENDIF()
710 # Check PulseAudio backend
711 IF(ALSOFT_BACKEND_PULSEAUDIO)
712     CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
713     IF(HAVE_PULSE_PULSEAUDIO_H)
714         CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
715         IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
716             SET(HAVE_PULSEAUDIO 1)
717             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/pulseaudio.c)
718             IF(HAVE_DLFCN_H OR WIN32)
719                 SET(BACKENDS  "${BACKENDS} PulseAudio,")
720             ELSE()
721                 SET(BACKENDS  "${BACKENDS} PulseAudio \(linked\),")
722                 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
723             ENDIF()
724         ENDIF()
725     ENDIF()
726 ENDIF()
727 IF(ALSOFT_REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
728     MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
729 ENDIF()
731 # Check CoreAudio backend
732 IF(ALSOFT_BACKEND_COREAUDIO)
733     CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
734     IF(HAVE_COREAUDIO_FRAMEWORK)
735         SET(HAVE_COREAUDIO 1)
736         SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/coreaudio.c)
737         SET(BACKENDS  "${BACKENDS} CoreAudio,")
738         SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
739         SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
740         SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
742         # Some versions of OSX may need the AudioToolbox framework. Add it if
743         # it's found.
744         FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY
745                      NAMES AudioToolbox
746                      PATHS ~/Library/Frameworks
747                            /Library/Frameworks
748                            /System/Library/Frameworks
749                     )
750         IF(AUDIOTOOLBOX_LIBRARY)
751             SET(EXTRA_LIBS ${AUDIOTOOLBOX_LIBRARY} ${EXTRA_LIBS})
752         ENDIF()
753     ENDIF()
754 ENDIF()
755 IF(ALSOFT_REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
756     MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
757 ENDIF()
759 # Check for OpenSL (Android) backend
760 IF(ALSOFT_BACKEND_OPENSL)
761     CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
762     IF(HAVE_SLES_OPENSLES_ANDROID_H)
763         CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
764         IF(HAVE_LIBOPENSLES)
765             SET(HAVE_OPENSL 1)
766             SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/opensl.c)
767             SET(BACKENDS  "${BACKENDS} OpenSL,")
768             SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
769         ENDIF()
770     ENDIF()
771 ENDIF()
772 IF(ALSOFT_REQUIRE_OPENSL AND NOT HAVE_OPENSL)
773     MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
774 ENDIF()
776 # Optionally enable the Wave Writer backend
777 IF(ALSOFT_BACKEND_WAVE)
778     SET(HAVE_WAVE 1)
779     SET(ALC_OBJS  ${ALC_OBJS} Alc/backends/wave.c)
780     SET(BACKENDS  "${BACKENDS} WaveFile,")
781 ENDIF()
783 # This is always available
784 SET(BACKENDS  "${BACKENDS} Null")
786 IF(ALSOFT_UTILS AND NOT ALSOFT_NO_CONFIG_UTIL)
787     add_subdirectory(utils/alsoft-config)
788 ENDIF()
789 IF(ALSOFT_EXAMPLES)
790     FIND_PACKAGE(SDL)
791     IF(SDL_FOUND)
792         FIND_PACKAGE(SDL_sound)
793         IF(SDL_SOUND_FOUND AND CMAKE_VERSION VERSION_LESS "2.8.8")
794             INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR} ${SDL_SOUND_INCLUDE_DIR})
795         ENDIF()
796     ENDIF()
797 ENDIF()
799 IF(LIBTYPE STREQUAL "STATIC")
800     ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
801     SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
802 ENDIF()
804 # Needed for openal.pc.in
805 SET(prefix ${CMAKE_INSTALL_PREFIX})
806 SET(exec_prefix "\${prefix}")
807 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
808 SET(bindir "\${exec_prefix}/bin")
809 SET(includedir "\${prefix}/include")
810 SET(PACKAGE_VERSION "${LIB_VERSION}")
812 # End configuration
813 CONFIGURE_FILE(
814     "${OpenAL_SOURCE_DIR}/config.h.in"
815     "${OpenAL_BINARY_DIR}/config.h")
816 CONFIGURE_FILE(
817     "${OpenAL_SOURCE_DIR}/openal.pc.in"
818     "${OpenAL_BINARY_DIR}/openal.pc"
819     @ONLY)
821 # Build a library
822 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
823 SET_PROPERTY(TARGET ${LIBNAME} APPEND PROPERTY COMPILE_DEFINITIONS AL_BUILD_LIBRARY AL_ALEXT_PROTOTYPES)
824 IF(WIN32 AND ALSOFT_NO_UID_DEFS)
825     SET_PROPERTY(TARGET ${LIBNAME} APPEND PROPERTY COMPILE_DEFINITIONS AL_NO_UID_DEFS)
826 ENDIF()
827 SET_PROPERTY(TARGET ${LIBNAME} APPEND PROPERTY INCLUDE_DIRECTORIES "${OpenAL_SOURCE_DIR}/OpenAL32/Include" "${OpenAL_SOURCE_DIR}/Alc")
828 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES VERSION ${LIB_VERSION}
829                                             SOVERSION ${LIB_MAJOR_VERSION})
830 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
831     SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
832 ENDIF()
834 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
836 # Add an install target here
837 INSTALL(TARGETS ${LIBNAME}
838         RUNTIME DESTINATION bin
839         LIBRARY DESTINATION "lib${LIB_SUFFIX}"
840         ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
842 INSTALL(FILES include/AL/al.h
843               include/AL/alc.h
844               include/AL/alext.h
845               include/AL/efx.h
846               include/AL/efx-creative.h
847               include/AL/efx-presets.h
848         DESTINATION include/AL
850 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
851         DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
854 MESSAGE(STATUS "")
855 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
856 MESSAGE(STATUS "    ${BACKENDS}")
857 MESSAGE(STATUS "")
858 MESSAGE(STATUS "Building with support for CPU extensions:")
859 MESSAGE(STATUS "    ${CPU_EXTS}")
860 MESSAGE(STATUS "")
862 IF(WIN32)
863     IF(NOT HAVE_DSOUND)
864         MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
865         MESSAGE(STATUS "         This is probably NOT what you want!")
866         MESSAGE(STATUS "")
867     ENDIF()
868 ENDIF()
870 # Install alsoft.conf configuration file
871 IF(ALSOFT_CONFIG)
872     INSTALL(FILES alsoftrc.sample
873             DESTINATION share/openal
874     )
875     MESSAGE(STATUS "Installing sample configuration")
876     MESSAGE(STATUS "")
877 ENDIF()
879 IF(ALSOFT_UTILS)
880     ADD_EXECUTABLE(openal-info utils/openal-info.c)
881     TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
883     ADD_EXECUTABLE(makehrtf utils/makehrtf.c)
884     IF(HAVE_LIBM)
885         TARGET_LINK_LIBRARIES(makehrtf m)
886     ENDIF()
888     INSTALL(TARGETS openal-info makehrtf
889             RUNTIME DESTINATION bin
890             LIBRARY DESTINATION "lib${LIB_SUFFIX}"
891             ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
892     )
894     MESSAGE(STATUS "Building utility programs")
895     IF(TARGET alsoft-config)
896         MESSAGE(STATUS "Building configuration program")
897     ENDIF()
898     MESSAGE(STATUS "")
899 ENDIF()
901 IF(ALSOFT_EXAMPLES)
902     IF(SDL_FOUND AND SDL_SOUND_FOUND)
903         ADD_LIBRARY(ex-common STATIC examples/common/alhelpers.c
904                                      examples/common/sdl_sound.c)
905         SET_PROPERTY(TARGET ex-common APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL_SOUND_INCLUDE_DIR})
907         ADD_EXECUTABLE(alstream examples/alstream.c)
908         TARGET_LINK_LIBRARIES(alstream ex-common ${SDL_SOUND_LIBRARIES} ${LIBNAME})
909         SET_PROPERTY(TARGET alstream APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL_SOUND_INCLUDE_DIR})
911         ADD_EXECUTABLE(alreverb examples/alreverb.c)
912         TARGET_LINK_LIBRARIES(alreverb ex-common ${SDL_SOUND_LIBRARIES} ${LIBNAME})
913         SET_PROPERTY(TARGET alreverb APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL_SOUND_INCLUDE_DIR})
915         ADD_EXECUTABLE(allatency examples/allatency.c)
916         TARGET_LINK_LIBRARIES(allatency ex-common ${SDL_SOUND_LIBRARIES} ${LIBNAME})
917         SET_PROPERTY(TARGET allatency APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL_SOUND_INCLUDE_DIR})
919         ADD_EXECUTABLE(alloopback examples/alloopback.c)
920         TARGET_LINK_LIBRARIES(alloopback ex-common ${SDL_SOUND_LIBRARIES} ${SDL_LIBRARY} ${LIBNAME})
921         SET_PROPERTY(TARGET alloopback APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL_INCLUDE_DIR}
922                                                                            ${SDL_SOUND_INCLUDE_DIR})
924         INSTALL(TARGETS alstream alreverb allatency alloopback
925                 RUNTIME DESTINATION bin
926                 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
927                 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
928         )
930         MESSAGE(STATUS "Building example programs")
931         MESSAGE(STATUS "")
932     ENDIF()
933 ENDIF()