Release 1.13
[openal-soft.git] / CMakeLists.txt
blob44f9ea8410bfeb6934428d6a84db4671dfca0374
1 # CMake build file list for OpenAL
3 CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
5 IF(COMMAND CMAKE_POLICY)
6   CMAKE_POLICY(SET CMP0003 NEW)
7 ENDIF(COMMAND CMAKE_POLICY)
9 SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
11 INCLUDE(CheckFunctionExists)
12 INCLUDE(CheckLibraryExists)
13 INCLUDE(CheckSharedLibraryExists)
14 INCLUDE(CheckIncludeFile)
15 INCLUDE(CheckIncludeFiles)
16 INCLUDE(CheckSymbolExists)
17 INCLUDE(CheckCCompilerFlag)
18 INCLUDE(CheckCSourceCompiles)
19 INCLUDE(CheckTypeSize)
22 PROJECT(OpenAL C)
25 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
28 OPTION(ALSA    "Check for ALSA backend"                ON)
29 OPTION(OSS     "Check for OSS backend"                 ON)
30 OPTION(SOLARIS "Check for Solaris backend"             ON)
31 OPTION(DSOUND  "Check for DirectSound backend"         ON)
32 OPTION(WINMM   "Check for Windows Multimedia backend"  ON)
33 OPTION(PORTAUDIO  "Check for PortAudio backend"        ON)
34 OPTION(PULSEAUDIO "Check for PulseAudio backend"       ON)
35 OPTION(WAVE    "Enable Wave Writer backend"            ON)
37 OPTION(DLOPEN  "Check for the dlopen API for loading optional libs"  ON)
39 OPTION(WERROR  "Treat compile warnings as errors"      OFF)
41 OPTION(UTILS  "Build and install utility programs"  ON)
43 OPTION(ALSOFT_CONFIG "Install alsoft.conf configuration file" OFF)
46 IF(WIN32)
47     SET(LIBNAME OpenAL32)
48     ADD_DEFINITIONS("-D_WIN32")
49 ELSE()
50     SET(LIBNAME openal)
51 ENDIF()
53 IF(NOT LIBTYPE)
54     SET(LIBTYPE SHARED)
55 ENDIF()
57 SET(LIB_MAJOR_VERSION "1")
58 SET(LIB_MINOR_VERSION "13")
59 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}")
62 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
63 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
64 CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
65 CHECK_TYPE_SIZE("void*" SIZEOF_VOIDP)
68 # Add definitions, compiler switches, etc.
69 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
71 IF(NOT CMAKE_BUILD_TYPE)
72     SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
73         "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
74         FORCE)
75 ENDIF()
76 IF(NOT CMAKE_DEBUG_POSTFIX)
77     SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
78         "Library postfix for debug builds. Normally left blank."
79         FORCE)
80 ENDIF()
82 IF(MSVC)
83     # ???
84     SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
85     SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
86     SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
87     SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
88     ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
89     ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
91     IF(NOT DXSDK_DIR)
92         STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
93     ELSE()
94         STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
95     ENDIF()
96     IF(DXSDK_DIR)
97         MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
98         SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
99         INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
100         LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
101     ENDIF()
103     OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
104     IF(FORCE_STATIC_VCRT)
105         FOREACH(flag_var
106                 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
107                 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
108             IF(${flag_var} MATCHES "/MD")
109                 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
110             ENDIF()
111         ENDFOREACH(flag_var)
112     ENDIF()
113 ELSE()
114     ADD_DEFINITIONS(-Winline -Wall)
115     CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
116     IF(HAVE_W_EXTRA)
117         ADD_DEFINITIONS(-Wextra)
118     ENDIF()
120     IF(WERROR)
121         ADD_DEFINITIONS(-Werror)
122     ENDIF()
124     SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
125         "Flags used by the compiler during Release with Debug Info builds."
126         FORCE)
127     SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
128         "Flags used by the compiler during release minsize builds."
129         FORCE)
130     SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
131         "Flags used by the compiler during release builds"
132         FORCE)
133     SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
134         "Flags used by the compiler during debug builds."
135         FORCE)
137     CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
138                              int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
140     # Set visibility options if available
141     IF(NOT WIN32)
142         CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_SWITCH)
143         IF(HAVE_VISIBILITY_SWITCH)
144             CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
145                                      int main() {return 0;}" HAVE_GCC_VISIBILITY)
146             IF(HAVE_GCC_VISIBILITY)
147                 ADD_DEFINITIONS(-fvisibility=internal -DHAVE_GCC_VISIBILITY)
148             ENDIF()
149         ENDIF()
150     ENDIF()
151 ENDIF()
153 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
154                          int main() {return 0;}" HAVE_GCC_FORMAT)
156 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
157 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
159 CHECK_LIBRARY_EXISTS(m  powf   "" HAVE_POWF)
160 CHECK_LIBRARY_EXISTS(m  sqrtf  "" HAVE_SQRTF)
161 CHECK_LIBRARY_EXISTS(m  acosf  "" HAVE_ACOSF)
162 CHECK_LIBRARY_EXISTS(m  atanf  "" HAVE_ATANF)
163 CHECK_LIBRARY_EXISTS(m  fabsf  "" HAVE_FABSF)
164 IF(HAVE_FENV_H)
165     CHECK_LIBRARY_EXISTS(m  fesetround  "" HAVE_FESETROUND)
166 ENDIF()
167 IF(HAVE_SQRTF OR HAVE_ACOSF OR HAVE_ATANF OR HAVE_FABSF OR HAVE_FESETROUND)
168     SET(EXTRA_LIBS m ${EXTRA_LIBS})
169 ENDIF()
170 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
171 CHECK_FUNCTION_EXISTS(_controlfp HAVE__CONTROLFP)
173 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
174 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
175 IF(NOT HAVE_STRCASECMP)
176     CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
177     IF(NOT HAVE__STRICMP)
178         MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
179     ENDIF()
181     ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
182 ENDIF()
184 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
185 IF(NOT HAVE_STRNCASECMP)
186     CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
187     IF(NOT HAVE__STRNICMP)
188         MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
189     ENDIF()
191     ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
192 ENDIF()
194 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
195 IF(NOT HAVE_SNPRINTF)
196     CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
197     IF(NOT HAVE__SNPRINTF)
198         MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
199     ENDIF()
201     ADD_DEFINITIONS(-Dsnprintf=_snprintf)
202 ENDIF()
204 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
205 IF(NOT HAVE_VSNPRINTF)
206     CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
207     IF(NOT HAVE__VSNPRINTF)
208         MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
209     ENDIF()
211     ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
212 ENDIF()
214 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
215 IF(NOT HAVE_ISNAN)
216     CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
217     IF(NOT HAVE__ISNAN)
218         MESSAGE(FATAL_ERROR "No isnan function found, please report!")
219     ENDIF()
221     ADD_DEFINITIONS(-Disnan=_isnan)
222 ENDIF()
225 # Check for the dlopen API (for dynamicly loading backend libs)
226 IF(DLOPEN)
227     CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
228     IF(HAVE_DLFCN_H)
229         CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
230         IF(HAVE_LIBDL)
231             SET(EXTRA_LIBS dl ${EXTRA_LIBS})
232         ENDIF()
233     ENDIF()
234 ENDIF()
236 # Check if we have Windows headers
237 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0500)
238 IF(NOT HAVE_WINDOWS_H)
239     CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
240     IF(NOT HAVE_GETTIMEOFDAY)
241         MESSAGE(FATAL_ERROR "No timing function found!")
242     ENDIF()
244     CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
245     IF(NOT HAVE_NANOSLEEP)
246         MESSAGE(FATAL_ERROR "No sleep function found!")
247     ENDIF()
249     CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
250     IF(HAVE_PTHREAD)
251         ADD_DEFINITIONS(-pthread)
252         SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
253     ENDIF()
255     # We need pthreads outside of Windows
256     CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
257     IF(NOT HAVE_PTHREAD_H)
258         MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
259     ENDIF()
260     # Some systems need pthread_np.h to get recursive mutexes
261     CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
263     # _GNU_SOURCE is needed on some systems for extra attributes, and
264     # _REENTRANT is needed for libc thread-safety
265     ADD_DEFINITIONS(-D_GNU_SOURCE=1)
266     CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
267     IF(HAVE_LIBPTHREAD)
268         SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
269     ENDIF()
271     CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
273     CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
274     IF(HAVE_LIBRT)
275         SET(EXTRA_LIBS rt ${EXTRA_LIBS})
276     ENDIF()
277 ENDIF()
279 # Check for a 64-bit type
280 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
281 IF(NOT HAVE_STDINT_H)
282     IF(HAVE_WINDOWS_H)
283         CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0500
284                                  \#include <windows.h>
285                                  __int64 foo;
286                                  int main() {return 0;}" HAVE___INT64)
287     ENDIF()
288     IF(NOT HAVE___INT64)
289         IF(NOT SIZEOF_LONG MATCHES "8")
290             IF(NOT SIZEOF_LONG_LONG MATCHES "8")
291                 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
292             ENDIF()
293         ENDIF()
294     ENDIF()
295 ENDIF()
297 IF(WIN32)
298     # Windows needs winmm for timeGetTime, even if the backend is disabled
299     CHECK_SHARED_LIBRARY_EXISTS(winmm timeGetTime 0 "" HAVE_LIBWINMM)
300     IF(HAVE_LIBWINMM)
301         SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
302         SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
303     ENDIF()
304 ENDIF()
307 SET(OPENAL_OBJS  OpenAL32/alAuxEffectSlot.c
308                  OpenAL32/alBuffer.c
309                  OpenAL32/alDatabuffer.c
310                  OpenAL32/alEffect.c
311                  OpenAL32/alError.c
312                  OpenAL32/alExtension.c
313                  OpenAL32/alFilter.c
314                  OpenAL32/alListener.c
315                  OpenAL32/alSource.c
316                  OpenAL32/alState.c
317                  OpenAL32/alThunk.c
319 SET(ALC_OBJS  Alc/ALc.c
320               Alc/ALu.c
321               Alc/alcConfig.c
322               Alc/alcEcho.c
323               Alc/alcModulator.c
324               Alc/alcReverb.c
325               Alc/alcRing.c
326               Alc/alcThread.c
327               Alc/bs2b.c
328               Alc/mixer.c
329               Alc/panning.c
330               Alc/null.c
333 SET(BACKENDS "")
334 SET(HAVE_ALSA       0)
335 SET(HAVE_OSS        0)
336 SET(HAVE_SOLARIS    0)
337 SET(HAVE_DSOUND     0)
338 SET(HAVE_WINMM      0)
339 SET(HAVE_PORTAUDIO  0)
340 SET(HAVE_PULSEAUDIO 0)
341 SET(HAVE_WAVE       0)
343 # Check ALSA backend
344 IF(ALSA)
345     CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
346     IF(HAVE_ALSA_ASOUNDLIB_H)
347         CHECK_SHARED_LIBRARY_EXISTS(asound snd_pcm_open 4 "" HAVE_LIBASOUND)
348         IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
349             SET(HAVE_ALSA 1)
350             SET(ALC_OBJS  ${ALC_OBJS} Alc/alsa.c)
351             IF(HAVE_DLFCN_H OR WIN32)
352                 SET(BACKENDS  "${BACKENDS} ALSA,")
353             ELSE()
354                 SET(BACKENDS  "${BACKENDS} ALSA \(linked\),")
355                 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
356             ENDIF()
357         ENDIF()
358     ENDIF()
359 ENDIF()
361 # Check OSS backend
362 IF(OSS)
363     CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
364     IF(HAVE_SYS_SOUNDCARD_H)
365         SET(HAVE_OSS 1)
366         SET(ALC_OBJS  ${ALC_OBJS} Alc/oss.c)
367         SET(BACKENDS  "${BACKENDS} OSS,")
368     ENDIF()
369 ENDIF()
371 # Check Solaris backend
372 IF(SOLARIS)
373     CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
374     IF(HAVE_SYS_AUDIOIO_H)
375         SET(HAVE_SOLARIS 1)
376         SET(ALC_OBJS  ${ALC_OBJS} Alc/solaris.c)
377         SET(BACKENDS  "${BACKENDS} Solaris,")
378     ENDIF()
379 ENDIF()
381 # Check DSound/MMSystem backend
382 IF(DSOUND)
383     CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
384     IF(HAVE_DSOUND_H)
385         CHECK_SHARED_LIBRARY_EXISTS(dsound DirectSoundCreate 3 "" HAVE_LIBDSOUND)
386         IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
387             SET(HAVE_DSOUND 1)
388             SET(ALC_OBJS  ${ALC_OBJS} Alc/dsound.c)
390             IF(HAVE_DLFCN_H OR WIN32)
391                 SET(BACKENDS  "${BACKENDS} DirectSound,")
392             ELSE()
393                 SET(BACKENDS  "${BACKENDS} DirectSound \(linked\),")
394                 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
395             ENDIF()
396         ENDIF()
397     ENDIF()
398 ENDIF()
400 IF(HAVE_WINDOWS_H)
401     IF(WINMM)
402         CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0500)
403         IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
404             SET(HAVE_WINMM 1)
405             SET(ALC_OBJS  ${ALC_OBJS} Alc/winmm.c)
406             SET(BACKENDS  "${BACKENDS} WinMM,")
407         ENDIF()
408     ENDIF()
409 ENDIF()
411 # Check PortAudio backend
412 IF(PORTAUDIO)
413     CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
414     IF(HAVE_PORTAUDIO_H)
415         CHECK_SHARED_LIBRARY_EXISTS(portaudio Pa_Initialize 0 "" HAVE_LIBPORTAUDIO)
416         IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
417             SET(HAVE_PORTAUDIO 1)
418             SET(ALC_OBJS  ${ALC_OBJS} Alc/portaudio.c)
419             IF(HAVE_DLFCN_H OR WIN32)
420                 SET(BACKENDS  "${BACKENDS} PortAudio,")
421             ELSE()
422                 SET(BACKENDS  "${BACKENDS} PortAudio \(linked\),")
423                 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
424             ENDIF()
425         ENDIF()
426     ENDIF()
427 ENDIF()
429 # Check PortAudio backend
430 IF(PULSEAUDIO)
431     CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
432     IF(HAVE_PULSE_PULSEAUDIO_H)
433         CHECK_SHARED_LIBRARY_EXISTS(pulse pa_context_new 2 "" HAVE_LIBPULSE)
434         IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
435             SET(HAVE_PULSEAUDIO 1)
436             SET(ALC_OBJS  ${ALC_OBJS} Alc/pulseaudio.c)
437             IF(HAVE_DLFCN_H OR WIN32)
438                 SET(BACKENDS  "${BACKENDS} PulseAudio,")
439             ELSE()
440                 SET(BACKENDS  "${BACKENDS} PulseAudio \(linked\),")
441                 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
442             ENDIF()
443         ENDIF()
444     ENDIF()
445 ENDIF()
447 # Optionally enable the Wave Writer backend
448 IF(WAVE)
449     SET(HAVE_WAVE 1)
450     SET(ALC_OBJS  ${ALC_OBJS} Alc/wave.c)
451     SET(BACKENDS  "${BACKENDS} WaveFile,")
452 ENDIF()
454 # This is always available
455 SET(BACKENDS  "${BACKENDS} Null")
457 IF(LIBTYPE STREQUAL "STATIC")
458     ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
459     SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
460 ENDIF()
462 # Needed for openal.pc.in
463 SET(prefix ${CMAKE_INSTALL_PREFIX})
464 SET(exec_prefix "\${prefix}")
465 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
466 SET(bindir "\${exec_prefix}/bin")
467 SET(includedir "\${prefix}/include")
468 SET(PACKAGE_VERSION "${LIB_VERSION}")
470 # End configuration
471 CONFIGURE_FILE(
472     "${OpenAL_SOURCE_DIR}/config.h.in"
473     "${OpenAL_BINARY_DIR}/config.h")
474 CONFIGURE_FILE(
475     "${OpenAL_SOURCE_DIR}/openal.pc.in"
476     "${OpenAL_BINARY_DIR}/openal.pc"
477     @ONLY)
479 # Build a library
480 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
481 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
482                                             COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
483                                             VERSION ${LIB_VERSION}.0
484                                             SOVERSION ${LIB_MAJOR_VERSION})
485 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
486     SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
487 ENDIF()
489 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
491 # Add an install target here
492 INSTALL(TARGETS ${LIBNAME}
493         RUNTIME DESTINATION bin
494         LIBRARY DESTINATION "lib${LIB_SUFFIX}"
495         ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
497 INSTALL(FILES include/AL/al.h
498               include/AL/alc.h
499               include/AL/alext.h
500               include/AL/efx.h
501               include/AL/efx-creative.h
502         DESTINATION include/AL
504 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
505         DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
508 MESSAGE(STATUS "")
509 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
510 MESSAGE(STATUS "    ${BACKENDS}")
511 MESSAGE(STATUS "")
513 IF(WIN32)
514     IF(NOT HAVE_DSOUND)
515         MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
516         MESSAGE(STATUS "         This is probably NOT what you want!")
517         MESSAGE(STATUS "")
518     ENDIF()
519 ENDIF()
521 # Install alsoft.conf configuration file
522 IF(ALSOFT_CONFIG)
523     INSTALL(FILES alsoftrc.sample
524             DESTINATION /etc/openal
525             RENAME alsoft.conf
526     )
527     MESSAGE(STATUS "Installing sample alsoft.conf")
528     MESSAGE(STATUS "")
529 ENDIF()
531 IF(UTILS)
532     ADD_EXECUTABLE(openal-info utils/openal-info.c)
533     TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
534     INSTALL(TARGETS openal-info
535             RUNTIME DESTINATION bin
536             LIBRARY DESTINATION "lib${LIB_SUFFIX}"
537             ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
538     )
539     MESSAGE(STATUS "Building utility programs")
540     MESSAGE(STATUS "")
541 ENDIF()