Allow unknown block alignments, and multiples of known block alignments
[alure.git] / CMakeLists.txt
blob9371d1dc616528d388f743c97482d906e21d04d2
1 # CMakeLists.txt for ALURE
2 CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
4 IF(COMMAND CMAKE_POLICY)
5     CMAKE_POLICY(SET CMP0003 NEW)
6 ENDIF(COMMAND CMAKE_POLICY)
8 SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
10 INCLUDE(CheckCCompilerFlag)
11 INCLUDE(CheckCSourceCompiles)
12 INCLUDE(CheckFunctionExists)
13 INCLUDE(CheckIncludeFile)
14 INCLUDE(CheckIncludeFiles)
15 INCLUDE(CheckLibraryExists)
16 INCLUDE(CheckSharedLibraryExists)
17 INCLUDE(FindPkgConfig)
18 INCLUDE(UsePkgConfig)
19 INCLUDE(CheckFileOffsetBits)
21 PROJECT(ALURE)
23 IF(WIN32)
24     SET(LIBNAME ALURE32)
25 ELSE(WIN32)
26     SET(LIBNAME alure)
27 ENDIF(WIN32)
29 SET(LIB_MAJOR_VERSION "1")
30 SET(LIB_MINOR_VERSION "0")
31 SET(LIB_BUILD_VERSION "72")
32 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_BUILD_VERSION}")
35 INCLUDE_DIRECTORIES(include "${ALURE_BINARY_DIR}")
38 OPTION(BUILD_SHARED "Build the shared version of the library" ON)
39 OPTION(BUILD_STATIC "Build the static version of the library" ON)
41 IF(NOT BUILD_SHARED AND NOT BUILD_STATIC)
42     MESSAGE(FATAL_ERROR "No libtype being built!")
43 ENDIF(NOT BUILD_SHARED AND NOT BUILD_STATIC)
45 IF(NOT CMAKE_BUILD_TYPE)
46     SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
47         "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
48         FORCE)
49 ENDIF(NOT CMAKE_BUILD_TYPE)
50 IF(NOT DEFINED CMAKE_DEBUG_POSTFIX)
51     SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
52         "Library postfix for debug builds. Normally left blank."
53         FORCE)
54 ENDIF(NOT DEFINED CMAKE_DEBUG_POSTFIX)
57 CHECK_SHARED_LIBRARY_EXISTS(stdc++ memset "" HAS_STDCXX)
58 IF(HAS_STDCXX)
59     SET(EXTRA_LIBS stdc++ ${EXTRA_LIBS})
60 ENDIF(HAS_STDCXX)
62 CHECK_SHARED_LIBRARY_EXISTS(m pow "" HAS_LIBM)
63 IF(HAS_LIBM)
64     SET(EXTRA_LIBS m ${EXTRA_LIBS})
65 ENDIF(HAS_LIBM)
67 CHECK_FILE_OFFSET_BITS()
68 IF(_FILE_OFFSET_BITS)
69     ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=${_FILE_OFFSET_BITS})
70     SET(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_FILE_OFFSET_BITS=${_FILE_OFFSET_BITS})
71 ENDIF(_FILE_OFFSET_BITS)
73 CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO)
75 IF(MSVC)
76     # ???
77 ELSE(MSVC)
78     IF(NOT WIN32)
79         CHECK_C_SOURCE_COMPILES("int foo() __attribute__((constructor));
80                                  int main() {return 0;}" HAVE_GCC_CONSTRUCTOR)
82         CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_GCC_VISIBILITY)
83         IF(HAVE_GCC_VISIBILITY)
84             ADD_DEFINITIONS(-fvisibility=hidden)
85         ENDIF(HAVE_GCC_VISIBILITY)
86     ENDIF(NOT WIN32)
88     CHECK_C_COMPILER_FLAG(-Wextra HAVE_WEXTRA)
89     IF(HAVE_WEXTRA)
90         ADD_DEFINITIONS(-Wextra)
91     ENDIF(HAVE_WEXTRA)
92     ADD_DEFINITIONS(-Wall)
94     CHECK_C_COMPILER_FLAG(-funswitch-loops HAVE_FUNSWITCH_LOOPS)
95     IF(HAVE_FUNSWITCH_LOOPS)
96         ADD_DEFINITIONS(-funswitch-loops)
97     ENDIF(HAVE_FUNSWITCH_LOOPS)
98 ENDIF(MSVC)
101 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0500)
102 IF(NOT HAVE_WINDOWS_H)
103     CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
104     IF(HAVE_PTHREAD)
105         ADD_DEFINITIONS(-pthread)
106         SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
107     ENDIF(HAVE_PTHREAD)
109     # We need pthreads outside of Windows
110     CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
111     IF(NOT HAVE_PTHREAD_H)
112         MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
113     ENDIF()
114     # Some systems need pthread_np.h to get recursive mutexes
115     CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
117     # _GNU_SOURCE is needed on some systems for extra attributes, and
118     # _REENTRANT is needed for libc thread-safety
119     ADD_DEFINITIONS(-D_GNU_SOURCE=1)
120     CHECK_FUNCTION_EXISTS(pthread_create HAS_PTHREAD_CREATE)
121     IF(NOT HAS_PTHREAD_CREATE)
122         CHECK_SHARED_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
123         IF(NOT HAVE_LIBPTHREAD)
124             MESSAGE(FATAL_ERROR "pthread_create not found on non-Windows target!")
125         ENDIF(NOT HAVE_LIBPTHREAD)
126         SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
127     ENDIF(NOT HAS_PTHREAD_CREATE)
129     CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
130     IF(NOT HAVE_NANOSLEEP)
131         MESSAGE(FATAL_ERROR "No sleep function found!")
132     ENDIF(NOT HAVE_NANOSLEEP)
133 ENDIF(NOT HAVE_WINDOWS_H)
135 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
136 CHECK_INCLUDE_FILE(sys/wait.h HAVE_SYS_WAIT_H)
137 CHECK_INCLUDE_FILE(signal.h HAVE_SIGNAL_H)
138 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
140 IF(HAVE_DLFCN_H)
141     CHECK_SHARED_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
142     IF(HAVE_LIBDL)
143         SET(EXTRA_LIBS dl ${EXTRA_LIBS})
144     ENDIF(HAVE_LIBDL)
145 ENDIF(HAVE_DLFCN_H)
147 OPTION(DYNLOAD    "Dynamically load support libs at run-time" ON)
148 OPTION(SNDFILE    "SoundFile support (for various formats)" ON)
149 OPTION(VORBIS     "VorbisFile support (for Ogg Vorbis)"  ON)
150 OPTION(FLAC       "FLAC support (for FLAC and Ogg FLAC)" ON)
151 OPTION(MPG123     "MPG123 support (for MP1/MP2/MP3)" ON)
152 OPTION(DUMB       "DUMB support (for IT/XM/S3M/MOD)" ON)
153 OPTION(MODPLUG    "ModPlug support (for IT/XM/S3M/MOD)" OFF)
154 OPTION(FLUIDSYNTH "FluidSynth support (for MID)" ON)
156 IF(WIN32)
157     ADD_DEFINITIONS(-D_WIN32)
159     IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
160         SET(WIN_TYPE Win64)
161         SET(XBITS x64)
162     ELSE(CMAKE_SIZEOF_VOID_P MATCHES "8")
163         SET(WIN_TYPE Win32)
164         SET(XBITS x86)
165     ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
167     SET(OPENAL_SEARCH_PATHS
168         ENV ALSDK_DIR
169         ENV MINGDIR
170         "C:/Program Files/OpenAL 1.1 SDK"
171         "C:/Program Files (x86)/OpenAL 1.1 SDK"
172         "E:/Programs/Dev/OpenAL"
173         "E:/Program Files (x86)/OpenAL 1.1 SDK" )
175     FIND_PATH(OPENAL_INCLUDE_DIR al.h
176               PATHS ${OPENAL_SEARCH_PATHS}
177               PATH_SUFFIXES include include/AL )
178     IF(OPENAL_INCLUDE_DIR)
179         INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR})
180         FIND_LIBRARY(OPENAL_LIBRARIES OpenAL32
181                      PATHS ${OPENAL_SEARCH_PATHS}
182                      PATH_SUFFIXES lib libs/${WIN_TYPE} )
183     ENDIF(OPENAL_INCLUDE_DIR)
185     IF(NOT OPENAL_LIBRARIES)
186         MESSAGE(FATAL_ERROR "OpenAL not found!\nPlease try setting the ALSDK_DIR environment variable and try again.")
187     ENDIF(NOT OPENAL_LIBRARIES)
189     MESSAGE(STATUS "OpenAL include: ${OPENAL_INCLUDE_DIR}")
190     MESSAGE(STATUS "OpenAL lib: ${OPENAL_LIBRARIES}")
191 ELSE(WIN32)
192     IF(NOT HAVE_DLFCN_H OR NOT HAVE_LIBDL)
193         SET(DYNLOAD OFF)
194     ENDIF(NOT HAVE_DLFCN_H OR NOT HAVE_LIBDL)
196     PKG_CHECK_MODULES(OPENAL openal)
197     IF(NOT OPENAL_FOUND)
198         IF(APPLE)
199             CHECK_INCLUDE_FILE(OpenAL/al.h HAVE_OPENAL_AL_H)
200             IF(HAVE_OPENAL_AL_H)
201                 SET(OPENAL_LIBRARIES "-framework OpenAL")
202                 SET(HAS_OPENAL 1)
203             ENDIF(HAVE_OPENAL_AL_H)
204         ELSE(APPLE)
205             CHECK_INCLUDE_FILE(AL/al.h HAVE_AL_AL_H)
206             IF(HAVE_AL_AL_H)
207                 CHECK_SHARED_LIBRARY_EXISTS(openal alcOpenDevice "" HAS_OPENAL)
208                 IF(HAS_OPENAL)
209                     SET(OPENAL_LIBRARIES openal)
210                 ENDIF(HAS_OPENAL)
211             ENDIF(HAVE_AL_AL_H)
212         ENDIF(APPLE)
213         IF(NOT HAS_OPENAL)
214             MESSAGE(FATAL_ERROR "OpenAL not found!")
215         ENDIF(NOT HAS_OPENAL)
216     ELSE(NOT OPENAL_FOUND)
217         INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIRS})
218         LINK_DIRECTORIES(${OPENAL_LIBRARY_DIRS})
219     ENDIF(NOT OPENAL_FOUND)
220 ENDIF(WIN32)
222 # SndFile support
223 IF(SNDFILE)
224     PKG_CHECK_MODULES(SNDFILE sndfile)
225     IF(NOT SNDFILE_FOUND)
226         CHECK_INCLUDE_FILE(sndfile.h HAVE_SNDFILE_H)
227         IF(HAVE_SNDFILE_H)
228             CHECK_SHARED_LIBRARY_EXISTS(sndfile sf_open "" HAVE_LIBSNDFILE)
229             CHECK_SHARED_LIBRARY_EXISTS(libsndfile-1 sf_open "" HAVE_LIBSNDFILE1)
230             IF(DYNLOAD OR HAVE_LIBSNDFILE OR HAVE_LIBSNDFILE1)
231                 SET(HAS_SNDFILE 1)
232                 IF(HAVE_LIBSNDFILE)
233                     SET(SNDFILE_LIBRARIES "sndfile")
234                 ELSEIF(HAVE_LIBSNDFILE1)
235                     SET(SNDFILE_LIBRARIES "libsndfile-1")
236                 ENDIF(HAVE_LIBSNDFILE)
237             ENDIF(DYNLOAD OR HAVE_LIBSNDFILE OR HAVE_LIBSNDFILE1)
238         ENDIF(HAVE_SNDFILE_H)
239     ELSE(NOT SNDFILE_FOUND)
240         SET(HAS_SNDFILE 1)
241         INCLUDE_DIRECTORIES(${SNDFILE_INCLUDE_DIRS})
242         LINK_DIRECTORIES(${SNDFILE_LIBRARY_DIRS})
243     ENDIF(NOT SNDFILE_FOUND)
244 ELSE(SNDFILE)
245     SET(SNDFILE_LIBRARIES "")
246 ENDIF(SNDFILE)
248 # Vorbis support
249 IF(VORBIS)
250     PKG_CHECK_MODULES(VORBISFILE vorbisfile)
251     IF(NOT VORBISFILE_FOUND)
252         CHECK_INCLUDE_FILE(vorbis/vorbisfile.h HAVE_VORBIS_VORBISFILE_H)
253         IF(HAVE_VORBIS_VORBISFILE_H)
254             CHECK_SHARED_LIBRARY_EXISTS(vorbisfile ov_open "" HAVE_LIBVORBISFILE)
255             IF(DYNLOAD OR HAVE_LIBVORBISFILE)
256                 SET(HAS_VORBISFILE 1)
257                 IF(HAVE_LIBVORBISFILE)
258                     SET(VORBISFILE_LIBRARIES "vorbisfile")
259                 ENDIF(HAVE_LIBVORBISFILE)
260             ENDIF(DYNLOAD OR HAVE_LIBVORBISFILE)
261         ENDIF(HAVE_VORBIS_VORBISFILE_H)
262     ELSE(NOT VORBISFILE_FOUND)
263         SET(HAS_VORBISFILE 1)
264         INCLUDE_DIRECTORIES(${VORBISFILE_INCLUDE_DIRS})
265         LINK_DIRECTORIES(${VORBISFILE_LIBRARY_DIRS})
266     ENDIF(NOT VORBISFILE_FOUND)
267 ELSE(VORBIS)
268     SET(VORBISFILE_LIBRARIES "")
269 ENDIF(VORBIS)
271 # FLAC support
272 IF(FLAC)
273     #PKG_CHECK_MODULES(LIBFLAC flac)
274     #IF(NOT LIBFLAC_FOUND)
275         CHECK_INCLUDE_FILE(FLAC/all.h HAVE_FLAC_ALL_H)
276         IF(HAVE_FLAC_ALL_H)
277             CHECK_SHARED_LIBRARY_EXISTS(FLAC FLAC__stream_decoder_new "" HAVE_LIBFLAC)
278             IF(DYNLOAD OR HAVE_LIBFLAC)
279                 SET(HAS_FLAC 1)
280                 IF(HAVE_LIBFLAC)
281                     SET(LIBFLAC_LIBRARIES "FLAC")
282                 ENDIF(HAVE_LIBFLAC)
283             ENDIF(DYNLOAD OR HAVE_LIBFLAC)
284         ENDIF(HAVE_FLAC_ALL_H)
285     #ELSE(NOT LIBFLAC)
286     #    SET(HAS_FLAC 1)
287     #    INCLUDE_DIRECTORIES(${LIBFLAC_INCLUDE_DIRS})
288     #    LINK_DIRECTORIES(${LIBFLAC_LIBRARY_DIRS})
289     #ENDIF(NOT LIBFLAC_FOUND)
290 ELSE(FLAC)
291     SET(LIBFLAC_LIBRARIES "")
292 ENDIF(FLAC)
294 # MPG123 support
295 IF(MPG123)
296     PKG_CHECK_MODULES(MPG123 libmpg123)
297     IF(NOT MPG123_FOUND)
298         CHECK_INCLUDE_FILE(mpg123.h HAVE_MPG123_H)
299         IF(HAVE_MPG123_H)
300             CHECK_SHARED_LIBRARY_EXISTS(mpg123 mpg123_init "" HAVE_LIBMPG123)
301             IF(DYNLOAD OR HAVE_LIBMPG123)
302                 SET(HAS_MPG123 1)
303                 IF(HAVE_LIBMPG123)
304                     SET(MPG123_LIBRARIES "mpg123")
305                 ENDIF(HAVE_LIBMPG123)
306             ENDIF(DYNLOAD OR HAVE_LIBMPG123)
307         ENDIF(HAVE_MPG123_H)
308     ELSE(NOT MPG123_FOUND)
309         SET(HAS_MPG123 1)
310         INCLUDE_DIRECTORIES(${MPG123_INCLUDE_DIRS})
311         LINK_DIRECTORIES(${MPG123_LIBRARY_DIRS})
312     ENDIF(NOT MPG123_FOUND)
313 ELSE(MPG123)
314     SET(MPG123_LIBRARIES "")
315 ENDIF(MPG123)
317 # DUMB support
318 IF(DUMB)
319     CHECK_INCLUDE_FILE(dumb.h HAVE_DUMB_H)
320     IF(HAVE_DUMB_H)
321         IF(HAS_LIBM)
322             CHECK_LIBRARY_EXISTS("dumb;m" dumbfile_open_ex "" HAVE_LIBDUMB)
323         ELSE(HAS_LIBM)
324             CHECK_LIBRARY_EXISTS(dumb dumbfile_open_ex "" HAVE_LIBDUMB)
325         ENDIF(HAS_LIBM)
326         IF(DYNLOAD OR HAVE_LIBDUMB)
327             SET(HAS_DUMB 1)
328             IF(HAVE_LIBDUMB)
329                 SET(DUMB_LIBRARIES dumb)
330             ENDIF(HAVE_LIBDUMB)
331         ENDIF(DYNLOAD OR HAVE_LIBDUMB)
332     ENDIF(HAVE_DUMB_H)
333 ELSE(DUMB)
334     SET(DUMB_LIBRARIES "")
335 ENDIF(DUMB)
337 # ModPlug support
338 IF(MODPLUG)
339     PKG_CHECK_MODULES(MODPLUG libmodplug)
340     IF(NOT MODPLUG_FOUND)
341         CHECK_INCLUDE_FILE(modplug.h HAVE_MODPLUG_H)
342         IF(HAVE_MODPLUG_H)
343             CHECK_SHARED_LIBRARY_EXISTS(modplug ModPlug_Load "" HAVE_LIBMODPLUG)
344             IF(DYNLOAD OR HAVE_LIBMODPLUG)
345                 SET(HAS_MODPLUG 1)
346                 IF(HAVE_LIBMODPLUG)
347                     SET(MODPLUG_LIBRARIES "modplug")
348                 ENDIF(HAVE_LIBMODPLUG)
349             ENDIF(DYNLOAD OR HAVE_LIBMODPLUG)
350         ENDIF(HAVE_MODPLUG_H)
351     ELSE(NOT MODPLUG_FOUND)
352         SET(HAS_MODPLUG 1)
353         INCLUDE_DIRECTORIES(${MODPLUG_INCLUDE_DIRS})
354         LINK_DIRECTORIES(${MODPLUG_LIBRARY_DIRS})
355     ENDIF(NOT MODPLUG_FOUND)
356 ELSE(MODPLUG)
357     SET(MODPLUG_LIBRARIES "")
358 ENDIF(MODPLUG)
360 # FluidSynth support
361 IF(FLUIDSYNTH)
362     PKG_CHECK_MODULES(FLUIDSYNTH fluidsynth>=1.1.1)
363     IF(NOT FLUIDSYNTH_FOUND)
364         CHECK_INCLUDE_FILE(fluidsynth.h HAVE_FLUIDSYNTH_H)
365         IF(HAVE_FLUIDSYNTH_H)
366             CHECK_SHARED_LIBRARY_EXISTS(fluidsynth new_fluid_synth "" HAVE_LIBFLUIDSYNTH)
367             IF(DYNLOAD OR HAVE_LIBFLUIDSYNTH)
368                 SET(HAS_FLUIDSYNTH 1)
369                 IF(HAVE_LIBFLUIDSYNTH)
370                     SET(FLUIDSYNTH_LIBRARIES "fluidsynth")
371                 ENDIF(HAVE_LIBFLUIDSYNTH)
372             ENDIF(DYNLOAD OR HAVE_LIBFLUIDSYNTH)
373         ENDIF(HAVE_FLUIDSYNTH_H)
374     ELSE(NOT FLUIDSYNTH_FOUND)
375         SET(HAS_FLUIDSYNTH 1)
376         INCLUDE_DIRECTORIES(${FLUIDSYNTH_INCLUDE_DIRS})
377         LINK_DIRECTORIES(${FLUIDSYNTH_LIBRARY_DIRS})
378     ENDIF(NOT FLUIDSYNTH_FOUND)
379 ELSE(FLUIDSYNTH)
380     SET(FLUIDSYNTH_LIBRARIES "")
381 ENDIF(FLUIDSYNTH)
384 IF(NOT DYNLOAD)
385     SET(EXTRA_LIBS ${SNDFILE_LIBRARIES} ${VORBISFILE_LIBRARIES} ${LIBFLAC_LIBRARIES} ${MPG123_LIBRARIES} ${DUMB_LIBRARIES} ${MODPLUG_LIBRARIES} ${FLUIDSYNTH_LIBRARIES} ${EXTRA_LIBS})
386 ELSE(NOT DYNLOAD)
387     ADD_DEFINITIONS(-DDYNLOAD=1)
388 ENDIF(NOT DYNLOAD)
390 # For alure.pc.in
391 SET(prefix ${CMAKE_INSTALL_PREFIX})
392 SET(exec_prefix "\${prefix}")
393 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
394 SET(bindir "\${exec_prefix}/bin")
395 SET(includedir "\${prefix}/include")
396 SET(PKG_CONFIG_REQUIRES openal)
397 SET(PACKAGE_VERSION "${LIB_VERSION}")
399 # End configuration
400 CONFIGURE_FILE(
401     "${ALURE_SOURCE_DIR}/config.h.in"
402     "${ALURE_BINARY_DIR}/config.h")
403 IF(BUILD_SHARED)
404     CONFIGURE_FILE(
405         "${ALURE_SOURCE_DIR}/alure.pc.in"
406         "${ALURE_BINARY_DIR}/alure.pc"
407         @ONLY)
408 ENDIF(BUILD_SHARED)
409 IF(BUILD_STATIC)
410     CONFIGURE_FILE(
411         "${ALURE_SOURCE_DIR}/alure-static.pc.in"
412         "${ALURE_BINARY_DIR}/alure-static.pc"
413         @ONLY)
414 ENDIF(BUILD_STATIC)
416 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
419 SET(ALURE_OBJS  src/alure.cpp
420                 src/buffer.cpp
421                 src/istream.cpp
422                 src/stream.cpp
423                 src/streamdec.cpp
424                 src/streamplay.cpp
425                 src/codec_wav.cpp
426                 src/codec_aiff.cpp
428 IF(HAS_VORBISFILE)
429     SET(ALURE_OBJS ${ALURE_OBJS} src/codec_vorbisfile.cpp)
430 ENDIF(HAS_VORBISFILE)
431 IF(HAS_FLAC)
432     SET(ALURE_OBJS ${ALURE_OBJS} src/codec_flac.cpp)
433 ENDIF(HAS_FLAC)
434 IF(HAS_SNDFILE)
435     SET(ALURE_OBJS ${ALURE_OBJS} src/codec_sndfile.cpp)
436 ENDIF(HAS_SNDFILE)
437 IF(HAS_FLUIDSYNTH)
438     SET(ALURE_OBJS ${ALURE_OBJS} src/codec_fluidsynth.cpp)
439 ENDIF(HAS_FLUIDSYNTH)
440 IF(HAS_DUMB)
441     SET(ALURE_OBJS ${ALURE_OBJS} src/codec_dumb.cpp)
442 ENDIF(HAS_DUMB)
443 IF(HAS_MODPLUG)
444     SET(ALURE_OBJS ${ALURE_OBJS} src/codec_modplug.cpp)
445 ENDIF(HAS_MODPLUG)
446 IF(HAS_MPG123)
447     SET(ALURE_OBJS ${ALURE_OBJS} src/codec_mpg123.cpp)
448 ENDIF(HAS_MPG123)
450 IF(BUILD_SHARED)
451     #build a shared library
452     ADD_LIBRARY(${LIBNAME} SHARED ${ALURE_OBJS})
453     SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL ALURE_BUILD_LIBRARY
454                                                 VERSION ${LIB_VERSION}
455                                                 SOVERSION ${LIB_MAJOR_VERSION})
456     IF(WIN32)
457         SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
458     ENDIF(WIN32)
459     TARGET_LINK_LIBRARIES(${LIBNAME} ${OPENAL_LIBRARIES} ${EXTRA_LIBS})
461     INSTALL(TARGETS ${LIBNAME}
462             RUNTIME DESTINATION bin
463             LIBRARY DESTINATION lib${LIB_SUFFIX}
464             ARCHIVE DESTINATION lib${LIB_SUFFIX}
466 ENDIF(BUILD_SHARED)
467 IF(BUILD_STATIC)
468     #build a static library
469     ADD_LIBRARY(${LIBNAME}-static STATIC ${ALURE_OBJS})
470     SET_TARGET_PROPERTIES(${LIBNAME}-static PROPERTIES DEFINE_SYMBOL ALURE_BUILD_LIBRARY
471                                                        COMPILE_FLAGS -DALURE_STATIC_LIBRARY
472                                                        VERSION ${LIB_VERSION})
473     INSTALL(TARGETS ${LIBNAME}-static
474             RUNTIME DESTINATION bin
475             LIBRARY DESTINATION lib${LIB_SUFFIX}
476             ARCHIVE DESTINATION lib${LIB_SUFFIX}
478 ENDIF(BUILD_STATIC)
481 ADD_EXECUTABLE(alureplay examples/alureplay.c)
482 ADD_EXECUTABLE(alurestream examples/alurestream.c)
483 IF(BUILD_SHARED)
484     TARGET_LINK_LIBRARIES(alureplay ${LIBNAME} ${OPENAL_LIBRARIES} ${EXTRA_LIBS})
485     TARGET_LINK_LIBRARIES(alurestream ${LIBNAME} ${OPENAL_LIBRARIES} ${EXTRA_LIBS})
486 ELSE(BUILD_SHARED)
487     SET_TARGET_PROPERTIES(alureplay PROPERTIES COMPILE_FLAGS -DALURE_STATIC_LIBRARY)
488     SET_TARGET_PROPERTIES(alurestream PROPERTIES COMPILE_FLAGS -DALURE_STATIC_LIBRARY)
489     TARGET_LINK_LIBRARIES(alureplay ${LIBNAME}-static ${OPENAL_LIBRARIES} ${EXTRA_LIBS})
490     TARGET_LINK_LIBRARIES(alurestream ${LIBNAME}-static ${OPENAL_LIBRARIES} ${EXTRA_LIBS})
491 ENDIF(BUILD_SHARED)
494 FIND_PROGRAM(NATDOCS_BIN NaturalDocs)
495 IF(NATDOCS_BIN)
496     ADD_CUSTOM_TARGET(docs
497                       "${NATDOCS_BIN}" -i "${ALURE_SOURCE_DIR}/src" -o HTML "${ALURE_SOURCE_DIR}/docs/html" -p "${ALURE_SOURCE_DIR}/docs/naturaldocs" -s Default CustomStyle
498                       COMMENT "Building NaturalDocs documentation..." VERBATIM)
499 ELSE(NATDOCS_BIN)
500     MESSAGE(STATUS "\nNaturalDocs not found; building documentation is disabled")
501 ENDIF(NATDOCS_BIN)
504 #add an install target here
505 IF(APPLE)
506     SET(INCPATH OpenAL)
507 ELSE(APPLE)
508     SET(INCPATH AL)
509 ENDIF(APPLE)
511 INSTALL(DIRECTORY "${ALURE_SOURCE_DIR}/docs/html"
512         DESTINATION share/doc/alure
514 INSTALL(FILES include/AL/alure.h
515         DESTINATION "include/${INCPATH}"
517 IF(BUILD_SHARED)
518     INSTALL(FILES "${ALURE_BINARY_DIR}/alure.pc"
519             DESTINATION "lib${LIB_SUFFIX}/pkgconfig"
520     )
521 ENDIF(BUILD_SHARED)
522 IF(BUILD_STATIC)
523     INSTALL(FILES "${ALURE_BINARY_DIR}/alure-static.pc"
524             DESTINATION "lib${LIB_SUFFIX}/pkgconfig"
525     )
526 ENDIF(BUILD_STATIC)
529 MESSAGE(STATUS "\n********************** Configured options **********************")
530 IF(BUILD_SHARED AND BUILD_STATIC)
531     MESSAGE(STATUS "Building shared, static library")
532 ELSEIF(BUILD_SHARED)
533     MESSAGE(STATUS "Building shared library")
534 ELSE(BUILD_SHARED AND BUILD_STATIC)
535     MESSAGE(STATUS "Building static library")
536 ENDIF(BUILD_SHARED AND BUILD_STATIC)
537 MESSAGE(STATUS "")
538 IF(HAS_SNDFILE)
539     MESSAGE(STATUS "SndFile support: enabled")
540 ELSE(HAS_SNDFILE)
541     MESSAGE(STATUS "SndFile support: disabled")
542 ENDIF(HAS_SNDFILE)
543 IF(HAS_VORBISFILE)
544     MESSAGE(STATUS "VorbisFile support: enabled")
545 ELSE(HAS_VORBISFILE)
546     MESSAGE(STATUS "VorbisFile support: disabled")
547 ENDIF(HAS_VORBISFILE)
548 IF(HAS_FLAC)
549     MESSAGE(STATUS "FLAC support: enabled")
550 ELSE(HAS_FLAC)
551     MESSAGE(STATUS "FLAC support: disabled")
552 ENDIF(HAS_FLAC)
553 IF(HAS_MPG123)
554     MESSAGE(STATUS "MPG123 support: enabled")
555 ELSE(HAS_MPG123)
556     MESSAGE(STATUS "MPG123 support: disabled")
557 ENDIF(HAS_MPG123)
558 IF(HAS_DUMB)
559     MESSAGE(STATUS "DUMB support: enabled")
560 ELSE(HAS_DUMB)
561     MESSAGE(STATUS "DUMB support: disabled")
562 ENDIF(HAS_DUMB)
563 IF(HAS_MODPLUG)
564     MESSAGE(STATUS "ModPlug support: enabled")
565 ELSE(HAS_MODPLUG)
566     MESSAGE(STATUS "ModPlug support: disabled")
567 ENDIF(HAS_MODPLUG)
568 IF(HAS_FLUIDSYNTH)
569     MESSAGE(STATUS "FluidSynth support: enabled")
570 ELSE(HAS_FLUIDSYNTH)
571     MESSAGE(STATUS "FluidSynth support: disabled")
572 ENDIF(HAS_FLUIDSYNTH)
573 MESSAGE(STATUS "")