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)
9 INCLUDE(CheckCCompilerFlag)
10 INCLUDE(CheckFunctionExists)
11 INCLUDE(CheckIncludeFile)
12 INCLUDE(CheckIncludeFiles)
13 INCLUDE(CheckLibraryExists)
14 INCLUDE(FindPkgConfig)
25 SET(LIB_MAJOR_VERSION "0")
26 SET(LIB_MINOR_VERSION "0")
27 SET(LIB_BUILD_VERSION "0")
28 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_BUILD_VERSION}")
29 IF(NOT DEFINED LIB_INSTALL_DIR)
30 SET(LIB_INSTALL_DIR "lib")
31 ENDIF(NOT DEFINED LIB_INSTALL_DIR)
34 INCLUDE_DIRECTORIES(include "${ALURE_BINARY_DIR}")
37 OPTION(NO_SHARED "Build a static library instead of shared" OFF)
39 IF(NOT CMAKE_BUILD_TYPE)
40 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
41 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
43 ENDIF(NOT CMAKE_BUILD_TYPE)
44 IF(NOT CMAKE_DEBUG_POSTFIX)
45 SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
46 "Library postfix for debug builds. Normally left blank."
48 ENDIF(NOT CMAKE_DEBUG_POSTFIX)
51 ADD_DEFINITIONS(-DALURE_BUILD_LIBRARY -DHAVE_CONFIG_H)
57 CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_GCC_VISIBILITY)
58 IF(HAVE_GCC_VISIBILITY)
59 ADD_DEFINITIONS(-fvisibility=hidden)
60 ENDIF(HAVE_GCC_VISIBILITY)
63 CHECK_C_COMPILER_FLAG(-Wextra HAVE_WEXTRA)
65 ADD_DEFINITIONS(-Wextra)
67 ADD_DEFINITIONS(-Wall)
71 OPTION(DYNLOAD "Enable dynamic run-time loading of libraries" ON)
73 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0500)
74 IF(NOT HAVE_WINDOWS_H)
75 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
76 IF(NOT HAVE_NANOSLEEP)
77 MESSAGE(FATAL_ERROR "No sleep function found!")
78 ENDIF(NOT HAVE_NANOSLEEP)
81 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
83 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
86 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
90 ELSE(NOT HAVE_WINDOWS_H)
92 SET(HAS_LOADLIBRARY 1)
94 ENDIF(NOT HAVE_WINDOWS_H)
97 OPTION(SNDFILE "SoundFile support (for Wave, FLAC, and various others)" ON)
98 OPTION(VORBIS "VorbisFile support (for Ogg Vorbis)" ON)
99 OPTION(MPG123 "MPG123 support (for MP3, MP2, and MP1)" ON)
101 OPTION(LARGEFILES "Large (>4GB) file support" ON)
104 ADD_DEFINITIONS(-D_WIN32)
106 IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
109 ELSE(CMAKE_SIZEOF_VOID_P MATCHES "8")
112 ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
114 SET(OPENAL_SEARCH_PATHS
117 "C:/Program Files/OpenAL 1.1 SDK"
118 "C:/Program Files (x86)/OpenAL 1.1 SDK"
119 "E:/Programs/Dev/OpenAL"
120 "E:/Program Files (x86)/OpenAL 1.1 SDK" )
122 FIND_PATH(OPENAL_INCLUDE_DIR al.h
123 PATHS ${OPENAL_SEARCH_PATHS}
124 PATH_SUFFIXES include include/AL )
125 IF(OPENAL_INCLUDE_DIR)
126 INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR})
127 FIND_LIBRARY(OPENAL_LIBRARIES OpenAL32
128 PATHS ${OPENAL_SEARCH_PATHS}
129 PATH_SUFFIXES lib libs/${WIN_TYPE} )
130 ENDIF(OPENAL_INCLUDE_DIR)
132 IF(NOT OPENAL_LIBRARIES)
133 MESSAGE(FATAL_ERROR "OpenAL not found!\nPlease try setting the ALSDK_DIR environment variable and try again.")
134 ENDIF(NOT OPENAL_LIBRARIES)
136 MESSAGE(STATUS "OpenAL include: ${OPENAL_INCLUDE_DIR}")
137 MESSAGE(STATUS "OpenAL lib: ${OPENAL_LIBRARIES}")
139 PKG_CHECK_MODULES(OPENAL openal)
142 CHECK_INCLUDE_FILE(OpenAL/al.h HAVE_OPENAL_AL_H)
144 SET(OPENAL_LIBRARIES "-framework OpenAL")
146 ENDIF(HAVE_OPENAL_AL_H)
148 CHECK_INCLUDE_FILE(AL/al.h HAVE_AL_AL_H)
150 CHECK_LIBRARY_EXISTS(openal alcOpenDevice "" HAS_OPENAL)
153 MESSAGE(FATAL_ERROR "OpenAL not found!")
154 ENDIF(NOT HAS_OPENAL)
155 SET(OPENAL_LIBRARIES openal)
157 ELSE(NOT OPENAL_FOUND)
158 INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIRS})
159 LINK_DIRECTORIES(${OPENAL_LIBRARY_DIRS})
160 ENDIF(NOT OPENAL_FOUND)
165 PKG_CHECK_MODULES(SNDFILE sndfile)
166 IF(NOT SNDFILE_FOUND)
167 CHECK_INCLUDE_FILE(sndfile.h HAVE_SNDFILE_H)
169 # Libraries will be loaded dynamicly at runtime if possible; don't
171 IF(HAS_DLOPEN OR HAS_LOADLIBRARY)
173 ELSE(HAS_DLOPEN OR HAS_LOADLIBRARY)
174 CHECK_LIBRARY_EXISTS(sndfile sf_open "" HAS_SNDFILE)
176 SET(SNDFILE_LIBRARIES "sndfile")
178 ENDIF(HAS_DLOPEN OR HAS_LOADLIBRARY)
179 ENDIF(HAVE_SNDFILE_H)
180 ELSE(NOT SNDFILE_FOUND)
182 INCLUDE_DIRECTORIES(${SNDFILE_INCLUDE_DIRS})
183 IF(HAS_DLOPEN OR HAS_LOADLIBRARY)
184 SET(SNDFILE_LIBRARIES "")
185 ELSE(HAS_DLOPEN OR HAS_LOADLIBRARY)
186 LINK_DIRECTORIES(${SNDFILE_LIBRARY_DIRS})
187 ENDIF(HAS_DLOPEN OR HAS_LOADLIBRARY)
188 ENDIF(NOT SNDFILE_FOUND)
190 SET(SNDFILE_LIBRARIES "")
195 PKG_CHECK_MODULES(VORBISFILE vorbisfile)
196 IF(NOT VORBISFILE_FOUND)
197 CHECK_INCLUDE_FILE(vorbis/vorbisfile.h HAVE_VORBIS_VORBISFILE_H)
198 IF(HAVE_VORBIS_VORBISFILE_H)
199 IF(HAS_DLOPEN OR HAS_LOADLIBRARY)
200 SET(HAS_VORBISFILE 1)
201 ELSE(HAS_DLOPEN OR HAS_LOADLIBRARY)
202 CHECK_LIBRARY_EXISTS(vorbisfile ov_open "" HAS_VORBISFILE)
204 SET(VORBISFILE_LIBRARIES "vorbisfile")
205 ENDIF(HAS_VORBISFILE)
206 ENDIF(HAS_DLOPEN OR HAS_LOADLIBRARY)
207 ENDIF(HAVE_VORBIS_VORBISFILE_H)
208 ELSE(NOT VORBISFILE_FOUND)
209 SET(HAS_VORBISFILE 1)
210 INCLUDE_DIRECTORIES(${VORBISFILE_INCLUDE_DIRS})
211 IF(HAS_DLOPEN OR HAS_LOADLIBRARY)
212 SET(VORBISFILE_LIBRARIES "")
213 ELSE(HAS_DLOPEN OR HAS_LOADLIBRARY)
214 LINK_DIRECTORIES(${VORBISFILE_LIBRARY_DIRS})
215 ENDIF(HAS_DLOPEN OR HAS_LOADLIBRARY)
216 ENDIF(NOT VORBISFILE_FOUND)
218 SET(VORBISFILE_LIBRARIES "")
223 PKG_CHECK_MODULES(MPG123 libmpg123)
225 CHECK_INCLUDE_FILE(mpg123.h HAVE_MPG123_H)
227 IF(HAS_DLOPEN OR HAS_LOADLIBRARY)
229 ELSE(HAS_DLOPEN OR HAS_LOADLIBRARY)
230 CHECK_LIBRARY_EXISTS(mpg123 mpg123_init "" HAS_MPG123)
232 SET(MPG123_LIBRARIES "mpg123")
234 ENDIF(HAS_DLOPEN OR HAS_LOADLIBRARY)
236 ELSE(NOT MPG123_FOUND)
238 INCLUDE_DIRECTORIES(${MPG123_INCLUDE_DIRS})
239 IF(HAS_DLOPEN OR HAS_LOADLIBRARY)
240 SET(MPG123_LIBRARIES "")
241 ELSE(HAS_DLOPEN OR HAS_LOADLIBRARY)
242 LINK_DIRECTORIES(${MPG123_LIBRARY_DIRS})
243 ENDIF(HAS_DLOPEN OR HAS_LOADLIBRARY)
244 ENDIF(NOT MPG123_FOUND)
246 SET(MPG123_LIBRARIES "")
251 ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64)
256 SET(prefix ${CMAKE_INSTALL_PREFIX})
257 SET(exec_prefix "\${prefix}")
258 SET(libdir "\${exec_prefix}/${LIB_INSTALL_DIR}")
259 SET(bindir "\${exec_prefix}/bin")
260 SET(includedir "\${prefix}/include")
261 SET(PKG_CONFIG_REQUIRES openal)
262 SET(PACKAGE_VERSION "${LIB_VERSION}")
266 "${ALURE_SOURCE_DIR}/config.h.in"
267 "${ALURE_BINARY_DIR}/config.h")
269 "${ALURE_SOURCE_DIR}/alure.pc.in"
270 "${ALURE_BINARY_DIR}/alure.pc"
274 SET(ALURE_OBJS src/alure.cpp
280 #build a shared library
281 ADD_LIBRARY(${LIBNAME} SHARED ${ALURE_OBJS})
282 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES VERSION ${LIB_VERSION}
283 SOVERSION ${LIB_MAJOR_VERSION})
284 TARGET_LINK_LIBRARIES(${LIBNAME} ${OPENAL_LIBRARIES} ${SNDFILE_LIBRARIES} ${VORBISFILE_LIBRARIES} ${MPG123_LIBRARIES} ${EXTRA_LIBS})
286 #build a static library
287 ADD_LIBRARY(${LIBNAME} STATIC ${ALURE_OBJS})
288 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES VERSION ${LIB_VERSION})
292 ADD_EXECUTABLE(alureplay examples/alureplay.c)
293 TARGET_LINK_LIBRARIES(alureplay ${LIBNAME} ${OPENAL_LIBRARIES} stdc++)
295 ADD_EXECUTABLE(alurestream examples/alurestream.c)
296 TARGET_LINK_LIBRARIES(alurestream ${LIBNAME} ${OPENAL_LIBRARIES} stdc++)
299 FIND_PROGRAM(NATDOCS_BIN NaturalDocs)
301 ADD_CUSTOM_TARGET(docs
302 "${NATDOCS_BIN}" -i "${ALURE_SOURCE_DIR}/src" -o HTML "${ALURE_SOURCE_DIR}/docs/html" -p "${ALURE_SOURCE_DIR}/docs/naturaldocs"
303 COMMENT "Building NaturalDocs documentation..." VERBATIM)
305 MESSAGE(STATUS "\nNaturalDocs not found; building documentation is disabled")
309 #add an install target here
316 INSTALL(DIRECTORY "${ALURE_SOURCE_DIR}/docs/html"
317 DESTINATION share/doc/alure
319 INSTALL(TARGETS ${LIBNAME}
320 RUNTIME DESTINATION bin
321 LIBRARY DESTINATION ${LIB_INSTALL_DIR}
322 ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
324 INSTALL(FILES include/AL/alure.h
325 DESTINATION "include/${INCPATH}"
327 INSTALL(FILES "${ALURE_BINARY_DIR}/alure.pc"
328 DESTINATION lib/pkgconfig
332 MESSAGE(STATUS "\n********************** Configured options **********************")
334 MESSAGE(STATUS "Building static library")
336 MESSAGE(STATUS "Building shared library")
339 IF(HAS_DLOPEN OR HAS_LOADLIBRARY)
340 MESSAGE(STATUS "Dynamic loading of support libs: enabled")
341 ELSE(HAS_DLOPEN OR HAS_LOADLIBRARY)
342 MESSAGE(STATUS "Dynamic loading of support libs: disabled")
343 ENDIF(HAS_DLOPEN OR HAS_LOADLIBRARY)
346 MESSAGE(STATUS "SndFile support: enabled")
348 MESSAGE(STATUS "SndFile support: disabled")
351 MESSAGE(STATUS "VorbisFile support: enabled")
353 MESSAGE(STATUS "VorbisFile support: disabled")
354 ENDIF(HAS_VORBISFILE)
356 MESSAGE(STATUS "MPG123 support: enabled")
358 MESSAGE(STATUS "MPG123 support: disabled")