Files
Konrad Beckmann 20d7fefaf9 Import mikmod
2021-08-02 02:19:41 +02:00

885 lines
26 KiB
CMake

# Copyright (c) 2012 Shlomi Fish
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# (This copyright notice applies only to this file)
PROJECT(libmikmod C)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
LIST(APPEND CMAKE_MODULE_PATH "${libmikmod_SOURCE_DIR}/cmake")
SET(LIBMIKMOD_MAJOR_VERSION 3)
SET(LIBMIKMOD_MINOR_VERSION 3)
SET(LIBMIKMOD_MICRO_VERSION 12)
SET(VERSION "${LIBMIKMOD_MAJOR_VERSION}.${LIBMIKMOD_MINOR_VERSION}.${LIBMIKMOD_MICRO_VERSION}")
SET(LIBMIKMOD_VERSION "${LIBMIKMOD_MAJOR_VERSION}.${LIBMIKMOD_MINOR_VERSION}.${LIBMIKMOD_MICRO_VERSION}")
SET(CPACK_PACKAGE_VERSION_MAJOR ${LIBMIKMOD_MAJOR_VERSION})
SET(CPACK_PACKAGE_VERSION_MINOR ${LIBMIKMOD_MINOR_VERSION})
SET(CPACK_PACKAGE_VERSION_PATCH ${LIBMIKMOD_MICRO_VERSION})
# package generation (make package[_source])
SET(CPACK_PACKAGE_NAME "libmikmod")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "libmikmod - a module file playing and sound library")
SET(CPACK_PACKAGE_VENDOR "Shlomi Fish")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING.LESSER")
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_DESCRIPTION_SUMMARY} ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
SET(base_with_ver "libmikmod-[0-9]+\\\\.[0-9]+\\\\.[0-9]+")
SET(CPACK_SOURCE_IGNORE_FILES
"/_CPack_Packages/"
"/CMakeFiles/"
"/.deps/"
"^${base_with_ver}(-Source|-Linux)?/"
"${base_with_ver}.tar\\\\.(gz|bz2|Z|lzma|xz)$"
"\\\\.o$"
"~$"
"/libmikmod\\\\.(a|la)$"
"\\\\.so(\\\\.[0-9]+)*$"
"/\\\\.svn/"
"\\\\.(pdf|fo)$"
"/CMakeCache\\\\.txt$"
"/CTestTestfile\\\\.cmake$"
"/cmake_install\\\\.cmake$"
"/CPackConfig\\\\.cmake$"
"/CPackSourceConfig\\\\.cmake$"
"/tags$"
"/libmikmod-config$"
"^config\\\\.h$"
"/install_manifest\\\\.txt$"
"/t/"
"/Testing/"
"run-tests\\\\.pl"
"/_Inline/"
"/(B|build|BUILD)/"
"/autom4te.cache/"
)
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET (ENABLE_ALSA 1 CACHE BOOL "Include the ALSA driver")
ELSE()
SET (ENABLE_ALSA 0)
ENDIF()
IF(UNIX AND NOT APPLE)
SET (ENABLE_OSS 1 CACHE BOOL "Include the OSS driver")
SET (ENABLE_ESD 0 CACHE BOOL "Include the EsounD (Enlightened Sound Daemon) driver")
SET (ENABLE_PULSE 1 CACHE BOOL "Include the PulseAudio driver")
SET (ENABLE_NAS 0 CACHE BOOL "Include the Network Audio System driver")
SET (ENABLE_AF 0 CACHE BOOL "Include the DEC AudioFile server (AF) driver")
ELSE()
SET (ENABLE_AF 0)
SET (ENABLE_OSS 0)
SET (ENABLE_PULSE 0)
SET (ENABLE_ESD 0)
SET (ENABLE_NAS 0)
ENDIF()
IF(CMAKE_SYSTEM_NAME MATCHES "OpenBSD.*")
SET (ENABLE_SNDIO 1 CACHE BOOL "Include the OpenBSD sndio driver")
ELSE()
SET (ENABLE_SNDIO 0)
ENDIF()
IF(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*|kOpenBSD.*|OpenBSD.*|Solaris.*")
SET (ENABLE_SUNAUDIO 1 CACHE BOOL "Include the SunAudio (or compatibles) driver")
ELSE()
SET (ENABLE_SUNAUDIO 0)
ENDIF()
IF(CMAKE_SYSTEM_NAME MATCHES "AIX.*")
SET (ENABLE_AIX 1 CACHE BOOL "Include the AIX audio driver")
ELSE()
SET (ENABLE_AIX 0)
ENDIF()
IF(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*")
SET (ENABLE_HPUX 1 CACHE BOOL "Include the HP-UX audio driver")
ELSE()
SET (ENABLE_HPUX 0)
ENDIF()
IF(WIN32)
SET (ENABLE_DSOUND 1 CACHE BOOL "Include the DirectSound driver")
SET (ENABLE_MMSOUND 1 CACHE BOOL "Include the Windows MCI driver")
SET (ENABLE_XAUDIO2 0 CACHE BOOL "Include the XAudio2 driver")
SET (ENABLE_XAUDIO28 0 CACHE BOOL "Use XAudio2.8 for Windows8 instead of XAudio2.7")
ELSE()
SET (ENABLE_DSOUND 0)
SET (ENABLE_MMSOUND 0)
SET (ENABLE_XAUDIO2 0)
SET (ENABLE_XAUDIO28 0)
ENDIF()
IF(APPLE)
SET (ENABLE_COREAUDIO 1 CACHE BOOL "Include the CoreAudio driver")
ELSE()
SET (ENABLE_COREAUDIO 0)
ENDIF()
SET (ENABLE_OPENAL 0 CACHE BOOL "Include the OpenAL driver")
SET (ENABLE_SDL 0 CACHE BOOL "Include the SDL driver")
IF(UNIX)
SET (ENABLE_STDOUT 1 CACHE BOOL "Support for output to stdout")
SET (ENABLE_PIPE 1 CACHE BOOL "Support for output via a pipe to another command")
ELSE()
SET (ENABLE_STDOUT 0)
SET (ENABLE_PIPE 0)
ENDIF()
SET (ENABLE_AIFF 1 CACHE BOOL "Support for output to an .aiff file")
SET (ENABLE_WAV 1 CACHE BOOL "Support for output to a .wav file")
SET (ENABLE_RAW 1 CACHE BOOL "Support for output raw pcm data to a file")
IF(NOT WIN32)
SET (ENABLE_DL 0 CACHE BOOL "Load ALSA and EsounD drivers at runtime")
SET (ENABLE_THREADS 1 CACHE BOOL "build a thread-safe version of libmikmod") # only for pthreads.
ELSE()
SET (ENABLE_DL 0)
SET (ENABLE_THREADS 0) # windows builds have it using win32api already.
ENDIF()
SET (DISABLE_DEPACKERS 0 CACHE BOOL "Exclude support for module depackers")
SET (DISABLE_HQMIXER 0 CACHE BOOL "Exclude support for high quality mixer")
SET (ENABLE_SIMD 0 CACHE BOOL "Use SIMD (AltiVec or SSE2) optimizations (UNSTABLE!!!)")
SET (ENABLE_RPATH 1 CACHE BOOL "Whether to use an rpath when linking" )
SET (ENABLE_STATIC 1 CACHE BOOL "Whether to build the static library" )
### This is to set the RPATH correctly, so when installed
### under a prefix the executables will find the libraries.
### See: http://www.cmake.org/Wiki/CMake_RPATH_handling
IF (ENABLE_RPATH)
# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
# when building, don't use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
# the RPATH to be used when installing
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
ELSE(ENABLE_RPATH)
# SET (CMAKE_SKIP_RPATH YES)
ENDIF(ENABLE_RPATH)
INCLUDE(CPack)
include(CheckFunctionExists)
include(CheckSymbolExists)
INCLUDE(CheckCCompilerFlag)
INCLUDE(CheckCSourceCompiles)
include(FindPkgConfig)
include(TestBigEndian)
include(mik_macros)
ADD_SUBDIRECTORY ("dlapi")
ADD_SUBDIRECTORY ("docs")
ADD_SUBDIRECTORY ("drivers")
ADD_SUBDIRECTORY ("include")
ADD_SUBDIRECTORY ("loaders")
ADD_SUBDIRECTORY ("mmio")
ADD_SUBDIRECTORY ("depackers")
ADD_SUBDIRECTORY ("playercode")
ADD_SUBDIRECTORY ("posix")
IF (CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))
ADD_DEFINITIONS("-Wall" "-Wwrite-strings" "-Wshadow" "-Wundef" "-Wcast-qual")
ENDIF()
SET(COMPILER_FLAGS_TO_CHECK "-Werror=implicit-function-declaration")
#LIST(APPEND COMPILER_FLAGS_TO_CHECK "-ffast-math")
IF (APPLE)
LIST(APPEND COMPILER_FLAGS_TO_CHECK "-fno-common")
ENDIF()
IF (CPU_ARCH)
LIST(APPEND COMPILER_FLAGS_TO_CHECK "-march=${CPU_ARCH}")
ENDIF()
IF (ENABLE_SIMD)
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
LIST(APPEND COMPILER_FLAGS_TO_CHECK "-msse2")
# -faltivec is a useful Apple extension. it is not the same as -maltivec.
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)" AND (CMAKE_SYSTEM_NAME MATCHES "Darwin"))
LIST(APPEND COMPILER_FLAGS_TO_CHECK "-faltivec")
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" AND (CMAKE_SYSTEM_NAME MATCHES "Darwin"))
LIST(APPEND COMPILER_FLAGS_TO_CHECK "-faltivec")
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
LIST(APPEND COMPILER_FLAGS_TO_CHECK "-maltivec")
ENDIF()
ENDIF(ENABLE_SIMD)
SET (IDX 1)
FOREACH (CFLAG_TO_CHECK ${COMPILER_FLAGS_TO_CHECK})
SET (FLAG_EXISTS_VAR "FLAG_EXISTS_${IDX}")
MATH (EXPR IDX "${IDX} + 1")
CHECK_C_COMPILER_FLAG("${CFLAG_TO_CHECK}" ${FLAG_EXISTS_VAR})
IF (${FLAG_EXISTS_VAR})
ADD_DEFINITIONS(${CFLAG_TO_CHECK})
ENDIF()
ENDFOREACH()
# check inline keyword
CHECK_C_SOURCE_COMPILES("static inline int static_foo() {return 0;}
int main(void) {return 0;}" HAVE_C_INLINE)
CHECK_C_SOURCE_COMPILES("static __inline__ int static_foo() {return 0;}
int main(void) {return 0;}" HAVE_C___INLINE__)
CHECK_C_SOURCE_COMPILES("static __inline int static_foo() {return 0;}
int main(void) {return 0;}" HAVE_C___INLINE)
# check for symbol visibility attributes
IF(NOT WIN32 AND NOT CYGWIN)
SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Werror -fvisibility=hidden")
CHECK_C_SOURCE_COMPILES("__attribute__((visibility(\"default\"))) int foo(void);
__attribute__((visibility(\"hidden\"))) int bar(void);
int foo (void) { return 0; }
int bar (void) { return 1; }
int main(void) { return 0; }" HAVE_VISIBILITY)
IF(HAVE_VISIBILITY)
ADD_DEFINITIONS(-fvisibility=hidden)
ADD_DEFINITIONS("-DSYM_VISIBILITY")
ENDIF()
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
ENDIF()
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
# to find mikmod_internals.h:
INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR})
INCLUDE_DIRECTORIES(BEFORE "${CMAKE_SOURCE_DIR}/include")
# to find config.h:
INCLUDE_DIRECTORIES(BEFORE ${CMAKE_BINARY_DIR})
CHECK_MULTI_INCLUDE_FILES(
"dlfcn.h" "fcntl.h" "limits.h" "malloc.h" "memory.h" "sys/ioctl.h" "unistd.h" "windows.h"
)
IF(WIN32 AND NOT HAVE_WINDOWS_H)
MESSAGE(FATAL_ERROR "windows.h not found.")
ENDIF()
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
CHECK_MULTI_INCLUDE_FILES("alsa/asoundlib.h" "sys/sam9407.h")
ENDIF()
CHECK_MULTI_FUNCTIONS_EXISTS(
"posix_memalign" "setenv" "snprintf" "srandom"
)
CHECK_SYMBOL_EXISTS(RTLD_GLOBAL dlfcn.h HAVE_RTLD_GLOBAL)
CHECK_SYMBOL_EXISTS(srandom math.h SRANDOM_IN_MATH_H)
ADD_DEFINITIONS("-DHAVE_CONFIG_H")
# always define MIKMOD_BUILD when building libmikmod
ADD_DEFINITIONS("-DMIKMOD_BUILD")
SET (MIKMOD_LIB_MODULES
drivers/drv_AF.c
drivers/drv_aiff.c
drivers/drv_ahi.c
drivers/drv_aix.c
drivers/drv_alsa.c
drivers/drv_dart.c
drivers/drv_ds.c
drivers/drv_esd.c
drivers/drv_gp32.c
drivers/drv_hp.c
drivers/drv_mac.c
drivers/drv_n64.c
drivers/drv_nas.c
drivers/drv_nos.c
drivers/drv_openal.c
drivers/drv_osles.c
drivers/drv_oss.c
drivers/drv_osx.c
drivers/drv_pipe.c
drivers/drv_psp.c
drivers/drv_pulseaudio.c
drivers/drv_raw.c
drivers/drv_sam9407.c
drivers/drv_sdl.c
drivers/drv_sgi.c
drivers/drv_sndio.c
drivers/drv_stdout.c
drivers/drv_sun.c
drivers/drv_ultra.c
drivers/drv_wav.c
drivers/drv_win.c
drivers/drv_xaudio2.c
loaders/load_669.c
loaders/load_amf.c
loaders/load_asy.c
loaders/load_dsm.c
loaders/load_far.c
loaders/load_gdm.c
loaders/load_gt2.c
loaders/load_imf.c
loaders/load_it.c
loaders/load_m15.c
loaders/load_med.c
loaders/load_mod.c
loaders/load_mtm.c
loaders/load_okt.c
loaders/load_s3m.c
loaders/load_stm.c
loaders/load_stx.c
loaders/load_ult.c
loaders/load_umx.c
loaders/load_uni.c
loaders/load_xm.c
mmio/mmalloc.c
mmio/mmerror.c
mmio/mmio.c
depackers/mmcmp.c
depackers/pp20.c
depackers/s404.c
depackers/xpk.c
posix/strcasecmp.c
playercode/mdreg.c
playercode/mdriver.c
playercode/mdulaw.c
playercode/mloader.c
playercode/mlreg.c
playercode/mlutil.c
playercode/mplayer.c
playercode/munitrk.c
playercode/mwav.c
playercode/npertab.c
playercode/sloader.c
playercode/virtch.c
playercode/virtch2.c
playercode/virtch_common.c
)
REPLACE_FUNCTIONS_FROMDIR(MIKMOD_LIB_MODULES
posix
memcmp strstr)
SET (LIBMIKMOD_LIBS)
ADD_LIBRARY (mikmod
SHARED
${MIKMOD_LIB_MODULES}
)
LIST (APPEND LIBMIKMOD_LIBS "mikmod")
IF (ENABLE_STATIC)
ADD_LIBRARY (mikmod-static
STATIC
${MIKMOD_LIB_MODULES}
)
LIST (APPEND LIBMIKMOD_LIBS "mikmod-static")
SET_TARGET_PROPERTIES(
mikmod-static
PROPERTIES OUTPUT_NAME "mikmod"
)
SET_TARGET_PROPERTIES(
${LIBMIKMOD_LIBS}
PROPERTIES CLEAN_DIRECT_OUTPUT 1
)
ENDIF (ENABLE_STATIC)
SET_TARGET_PROPERTIES(mikmod
PROPERTIES VERSION 3.3.0 SOVERSION 3
)
IF(WIN32)
SET_TARGET_PROPERTIES(mikmod
PROPERTIES DEFINE_SYMBOL DLL_EXPORT
)
ENDIF(WIN32)
IF(DISABLE_HQMIXER)
SET(NO_HQMIXER 1)
ELSE()
SET(NO_HQMIXER)
ENDIF()
IF(DISABLE_DEPACKERS)
SET(NO_DEPACKERS 1)
ELSE()
SET(NO_DEPACKERS)
ENDIF()
IF(ENABLE_PIPE)
SET(DRV_PIPE 1)
ELSE()
SET(DRV_PIPE)
ENDIF()
IF(ENABLE_STDOUT)
SET(DRV_STDOUT 1)
ELSE()
SET(DRV_STDOUT)
ENDIF()
IF(ENABLE_AIFF)
SET(DRV_AIFF 1)
ELSE()
SET(DRV_AIFF)
ENDIF()
IF(ENABLE_WAV)
SET(DRV_WAV 1)
ELSE()
SET(DRV_WAV)
ENDIF()
IF(ENABLE_RAW)
SET(DRV_RAW 1)
ELSE()
SET(DRV_RAW)
ENDIF()
IF(ENABLE_SIMD)
SET(MIKMOD_SIMD 1)
ELSE()
SET(MIKMOD_SIMD)
ENDIF()
IF (ENABLE_DL)
SET(MIKMOD_DYNAMIC 1)
ELSE()
SET(MIKMOD_DYNAMIC)
ENDIF()
SET(EXTRA_LIBS )
SET(HAVE_PTHREAD)
IF (NOT WIN32)
INCLUDE(FindThreads)
IF (CMAKE_USE_PTHREADS_INIT)
IF (ENABLE_THREADS)
SET (HAVE_PTHREAD 1)
IF (CMAKE_THREAD_LIBS_INIT)
LIST (APPEND EXTRA_LIBS ${CMAKE_THREAD_LIBS_INIT})
ENDIF()
ENDIF()
ENDIF()
ENDIF()
IF (ENABLE_PULSE)
PKG_CHECK_MODULES(PKG_PULSESIMPLE "libpulse-simple")
IF(PKG_PULSESIMPLE_FOUND)
SET(DRV_PULSEAUDIO 1)
SET(PULSESIMPLE_LIBRARIES ${PKG_PULSESIMPLE_LDFLAGS})
ADD_DEFINITIONS (${PKG_PULSESIMPLE_CFLAGS})
ELSE()
find_path(PULSESIMPLE_INCLUDE_DIR "pulse/simple.h")
find_library(PULSESIMPLE_LIBRARIES "pulse-simple")
IF (PULSESIMPLE_LIBRARIES STREQUAL "PULSESIMPLE_LIBRARIES-NOTFOUND")
MESSAGE(STATUS "Could NOT find PulseAudio.")
SET(ENABLE_PULSE 0)
SET(DRV_PULSEAUDIO)
MESSAGE(WARNING "PulseAudio support is disabled.")
ELSE()
MESSAGE(STATUS "Found PulseAudio: ${PULSESIMPLE_LIBRARIES}")
SET(DRV_PULSEAUDIO 1)
INCLUDE_DIRECTORIES(${PULSESIMPLE_INCLUDE_DIR})
ENDIF()
ENDIF()
IF(ENABLE_PULSE)
LIST (APPEND EXTRA_LIBS ${PULSESIMPLE_LIBRARIES})
ENDIF()
ELSE()
SET(DRV_PULSEAUDIO)
ENDIF(ENABLE_PULSE)
IF (ENABLE_ESD)
PKG_CHECK_MODULES(PKG_ESD esound)
IF(PKG_ESD_FOUND)
SET(DRV_ESD 1)
SET(ESD_LIBRARIES ${PKG_ESD_LDFLAGS})
ADD_DEFINITIONS (${PKG_ESD_CFLAGS})
ELSE(PKG_ESD_FOUND)
find_path(ESD_INCLUDE_DIR esd.h)
find_library(ESD_LIBRARIES esd)
IF (ESD_LIBRARIES STREQUAL "ESD_LIBRARIES-NOTFOUND")
MESSAGE(STATUS "Could NOT find EsounD.")
SET(ENABLE_ESD 0)
SET(DRV_ESD)
MESSAGE(WARNING "EsounD support is disabled.")
ELSE()
MESSAGE(STATUS "Found EsounD: ${ESD_LIBRARIES}")
SET(DRV_ESD 1)
INCLUDE_DIRECTORIES(${ESD_INCLUDE_DIR})
ENDIF()
ENDIF(PKG_ESD_FOUND)
IF(ENABLE_ESD AND NOT ENABLE_DL)
LIST (APPEND EXTRA_LIBS ${ESD_LIBRARIES})
ENDIF()
ELSE()
SET(DRV_ESD)
ENDIF(ENABLE_ESD)
IF (ENABLE_NAS)
CHECK_INCLUDE_FILE("audio/audiolib.h" HAVE_AUDIO_AUDIOLIB_H)
find_library(NAS_LIBRARIES audio)
IF(NOT (NAS_LIBRARIES STREQUAL "NAS_LIBRARIES-NOTFOUND"))
SET(OLD_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
SET(CMAKE_REQUIRED_LIBRARIES "audio")
CHECK_FUNCTION_EXISTS(AuCreateFlow NAS_LIBS_OK)
SET(CMAKE_REQUIRED_LIBRARIES "${OLD_REQUIRED_LIBRARIES}")
ENDIF()
IF((NOT NAS_LIBS_OK) OR (NOT HAVE_AUDIO_AUDIOLIB_H))
MESSAGE(STATUS "Could not find NAS.")
SET(ENABLE_NAS 0)
SET(DRV_NAS)
MESSAGE(WARNING "NAS (Network Audio System) support is disabled.")
ELSE()
MESSAGE(STATUS "Found NAS: ${NAS_LIBRARIES}")
SET(DRV_NAS 1)
LIST (APPEND EXTRA_LIBS ${NAS_LIBRARIES})
ENDIF()
ELSE()
SET(DRV_NAS)
ENDIF(ENABLE_NAS)
IF (ENABLE_AF)
CHECK_INCLUDE_FILE("AF/AFlib.h" HAVE_AF_AFLIB_H)
find_library(AF_LIBRARIES AF)
IF(NOT (AF_LIBRARIES STREQUAL "AF_LIBRARIES-NOTFOUND"))
SET(OLD_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
SET(CMAKE_REQUIRED_LIBRARIES "AF")
CHECK_FUNCTION_EXISTS(AFOpenAudioConn AF_LIBS_OK)
SET(CMAKE_REQUIRED_LIBRARIES "${OLD_REQUIRED_LIBRARIES}")
ENDIF()
IF((NOT AF_LIBS_OK) OR (NOT HAVE_AF_AFLIB_H))
MESSAGE(STATUS "Could not find DEC AudioFile server.")
SET(ENABLE_AF 0)
SET(DRV_AF)
MESSAGE(WARNING "DEC AudioFile server support is disabled.")
ELSE()
MESSAGE(STATUS "Found DEC AudioFile server: ${AF_LIBRARIES}")
SET(DRV_AF 1)
LIST (APPEND EXTRA_LIBS ${AF_LIBRARIES})
ENDIF()
ELSE()
SET(DRV_AF)
ENDIF(ENABLE_AF)
IF (ENABLE_OSS)
CHECK_MULTI_INCLUDE_FILES("sys/soundcard.h" "machine/soundcard.h" "soundcard.h")
# NetBSD and OpenBSD uses ossaudio emulation layer,
# otherwise no link library is needed.
IF(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*|kOpenBSD.*|OpenBSD.*") # AND HAVE_SOUNDCARD_H ??
FIND_LIBRARY(OSSAUDIO_LIBRARIES "ossaudio")
IF(OSSAUDIO_LIBRARIES STREQUAL "OSSAUDIO_LIBRARIES-NOTFOUND")
SET(OSSAUDIO_LIBRARIES)
ELSE()
MESSAGE(STATUS "Found libossaudio: ${OSSAUDIO_LIBRARIES}")
ENDIF()
ELSE()
SET(OSSAUDIO_LIBRARIES)
ENDIF()
SET(OLD_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
IF(OSSAUDIO_LIBRARIES)
SET(CMAKE_REQUIRED_LIBRARIES ${OSSAUDIO_LIBRARIES})
ENDIF()
IF(HAVE_SYS_SOUNDCARD_H)
CHECK_C_SOURCE_COMPILES("#include <sys/ioctl.h>
#include <sys/soundcard.h>
int main() {return SNDCTL_DSP_RESET;}" HAVE_OSS)
ELSEIF(HAVE_MACHINE_SOUNDCARD_H)
CHECK_C_SOURCE_COMPILES("#include <sys/ioctl.h>
#include <machine/soundcard.h>
int main() {return SNDCTL_DSP_RESET;}" HAVE_OSS)
ELSEIF(HAVE_SOUNDCARD_H)
CHECK_C_SOURCE_COMPILES("#include <sys/ioctl.h>
#include <soundcard.h>
int main() {return SNDCTL_DSP_RESET;}" HAVE_OSS)
ELSE()
SET (HAVE_OSS)
ENDIF()
SET(CMAKE_REQUIRED_LIBRARIES "${OLD_REQUIRED_LIBRARIES}")
IF(HAVE_OSS)
SET (DRV_OSS 1)
IF(OSSAUDIO_LIBRARIES)
LIST(APPEND EXTRA_LIBS ${OSSAUDIO_LIBRARIES})
ENDIF()
ELSE()
SET (ENABLE_OSS 0)
SET (DRV_OSS)
MESSAGE(WARNING "OSS support is disabled.")
ENDIF()
ELSE()
SET (DRV_OSS)
ENDIF (ENABLE_OSS)
IF (ENABLE_ALSA)
include(FindALSA)
IF (ALSA_FOUND)
SET (DRV_ALSA 1)
IF(NOT ENABLE_DL)
LIST (APPEND EXTRA_LIBS ${ALSA_LIBRARIES})
ENDIF()
ELSE()
SET (ENABLE_ALSA 0)
SET (DRV_ALSA)
MESSAGE(WARNING "ALSA support is disabled.")
ENDIF()
ELSE()
SET (DRV_ALSA)
ENDIF(ENABLE_ALSA)
IF (ENABLE_SNDIO)
CHECK_INCLUDE_FILE("sndio.h" HAVE_SNDIO_H)
find_library(SNDIO_LIBRARIES sndio)
IF(NOT (SNDIO_LIBRARIES STREQUAL "SNDIO_LIBRARIES-NOTFOUND"))
SET(OLD_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
SET(CMAKE_REQUIRED_LIBRARIES "sndio")
CHECK_FUNCTION_EXISTS(sio_open SNDIO_LIBS_OK)
SET(CMAKE_REQUIRED_LIBRARIES "${OLD_REQUIRED_LIBRARIES}")
ENDIF()
IF((NOT SNDIO_LIBS_OK) OR (NOT HAVE_SNDIO_H))
SET (ENABLE_SNDIO 0)
SET (DRV_SNDIO)
MESSAGE(WARNING "OpenBSD sndio support is disabled.")
ELSE()
SET (DRV_SNDIO 1)
ENDIF()
ELSE()
SET (DRV_SNDIO)
ENDIF (ENABLE_SNDIO)
IF (ENABLE_SUNAUDIO)
CHECK_MULTI_INCLUDE_FILES("sys/audioio.h" "sun/audioio.h")
IF ("${HAVE_SYS_AUDIOIO_H}" OR "${HAVE_SUN_AUDIOIO_H}")
SET (DRV_SUN 1)
ELSE()
SET (ENABLE_SUNAUDIO 0)
SET (DRV_SUN)
MESSAGE(WARNING "SunAudio driver support is disabled.")
ENDIF()
ELSE()
SET (DRV_SUN)
ENDIF (ENABLE_SUNAUDIO)
IF (ENABLE_AIX)
CHECK_MULTI_INCLUDE_FILES("sys/audio.h" "sys/acpa.h")
IF ("${HAVE_SYS_AUDIO_H}" AND "${HAVE_SYS_ACPA_H}")
SET (DRV_AIX 1)
ELSE()
SET (ENABLE_AIX 0)
SET (DRV_AIX)
MESSAGE(WARNING "AIX audio driver support is disabled.")
ENDIF()
ELSE()
SET (DRV_AIX)
ENDIF (ENABLE_AIX)
IF (ENABLE_HPUX)
CHECK_INCLUDE_FILE("sys/audio.h" HAVE_SYS_AUDIO_H)
IF ("${HAVE_SYS_AUDIO_H}")
SET (DRV_HPUX 1)
ELSE()
SET (ENABLE_HPUX 0)
SET (DRV_HPUX)
MESSAGE(WARNING "HP-UX audio driver support is disabled.")
ENDIF()
ELSE()
SET (DRV_HPUX)
ENDIF (ENABLE_HPUX)
IF (ENABLE_COREAUDIO)
find_library(COREAUDIO_LIBS CoreAudio)
IF (COREAUDIO_LIBS STREQUAL "COREAUDIO_LIBS-NOTFOUND")
MESSAGE(STATUS "Could NOT find CoreAudio.")
SET (ENABLE_COREAUDIO 0)
SET (DRV_OSX)
MESSAGE(WARNING "CoreAudio driver support is disabled.")
ELSE()
MESSAGE(STATUS "Found CoreAudio libs: ${COREAUDIO_LIBS}")
SET (DRV_OSX 1)
LIST (APPEND EXTRA_LIBS ${COREAUDIO_LIBS})
ENDIF()
ELSE()
SET (DRV_OSX)
ENDIF(ENABLE_COREAUDIO)
IF (ENABLE_MMSOUND)
SET (DRV_WIN 1)
LIST (APPEND EXTRA_LIBS "winmm")
ELSE()
SET (DRV_WIN)
ENDIF(ENABLE_MMSOUND)
IF (ENABLE_DSOUND)
CHECK_INCLUDE_FILE("dsound.h" HAVE_DSOUND_H)
IF (HAVE_DSOUND_H)
SET (DRV_DS 1)
LIST (APPEND EXTRA_LIBS "dsound")
ELSE()
SET (ENABLE_DSOUND 0)
SET (DRV_DS)
MESSAGE(WARNING "DirectSound support is disabled.")
ENDIF()
ELSE()
SET (DRV_DS)
ENDIF(ENABLE_DSOUND)
IF (ENABLE_XAUDIO2)
SET(OLD_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
IF (ENABLE_XAUDIO28)
SET(CMAKE_REQUIRED_DEFINITIONS "-D_WIN32_WINNT=0x0602")
ENDIF()
CHECK_INCLUDE_FILE("xaudio2.h" HAVE_XAUDIO2_H)
SET(CMAKE_REQUIRED_DEFINITIONS "${OLD_REQUIRED_DEFINITIONS}")
IF(HAVE_XAUDIO2_H)
CHECK_SYMBOL_EXISTS(XAUDIO2_VOICE_NOSAMPLESPLAYED xaudio2.h XAUDIO2_7_HEADER)
IF (XAUDIO2_7_HEADER AND ENABLE_XAUDIO28)
MESSAGE(WARNING "xaudio2.h <= 2.7 and xaudio2.8 enabled - build will likely fail.")
ELSEIF((NOT XAUDIO2_7_HEADER) AND (NOT ENABLE_XAUDIO28))
MESSAGE(WARNING "xaudio2.h >= 2.8 and xaudio2.8 disabled - build will likely fail.")
ENDIF()
SET (DRV_XAUDIO2 1)
LIST (APPEND EXTRA_LIBS "ole32")
IF (ENABLE_XAUDIO28)
ADD_DEFINITIONS("-D_WIN32_WINNT=0x0602")
SET (DRV_XAUDIO28 1)
LIST (APPEND EXTRA_LIBS "xaudio2_8")
ELSE()
SET (DRV_XAUDIO28)
ENDIF()
ELSE()
SET (ENABLE_XAUDIO2 0)
SET (ENABLE_XAUDIO28 0)
SET (DRV_XAUDIO2)
SET (DRV_XAUDIO28)
MESSAGE(WARNING "XAudio2 support is disabled.")
ENDIF()
ELSE()
SET (ENABLE_XAUDIO28 0)
SET (DRV_XAUDIO2)
SET (DRV_XAUDIO28)
ENDIF(ENABLE_XAUDIO2)
IF (ENABLE_SDL)
SET (SDL_BUILDING_LIBRARY TRUE)
include(FindSDL)
IF (SDL_FOUND)
SET (DRV_SDL 1)
LIST (APPEND EXTRA_LIBS ${SDL_LIBRARY})
ELSE()
SET (ENABLE_SDL 0)
SET (DRV_SDL)
MESSAGE(WARNING "SDL support is disabled.")
ENDIF()
ELSE()
SET (DRV_SDL)
ENDIF(ENABLE_SDL)
IF (ENABLE_OPENAL)
include(FindOpenAL)
IF (OPENAL_FOUND)
SET (DRV_OPENAL 1)
CHECK_MULTI_INCLUDE_FILES("AL/al.h" "AL/alc.h")
IF (HAVE_AL_AL_H)
# alext.h depends on al.h and alc.h, therefore
# a plain CHECK_INCLUDE_FILE() doesn't work.
CHECK_C_SOURCE_COMPILES("#include <AL/al.h>
#include <AL/alc.h>
#include <AL/alext.h>
int main() {return 0;}" HAVE_AL_ALEXT_H)
ENDIF()
LIST (APPEND EXTRA_LIBS ${OPENAL_LIBRARY})
ELSE()
SET (ENABLE_OPENAL 0)
SET (DRV_OPENAL)
MESSAGE(WARNING "OpenAL support is disabled.")
ENDIF()
ELSE()
SET (DRV_OPENAL)
ENDIF(ENABLE_OPENAL)
IF (ENABLE_DL)
# add -ldl but only if a driver using dlopen() is active
IF(DRV_ALSA OR DRV_ESD)
LIST (APPEND EXTRA_LIBS ${CMAKE_DL_LIBS})
ENDIF()
ENDIF(ENABLE_DL)
IF(UNIX AND NOT APPLE)
FIND_LIBRARY(MATH_LIB m)
IF(MATH_LIB)
LIST(APPEND EXTRA_LIBS ${MATH_LIB})
ENDIF()
ENDIF()
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/config.h.cmake" "${CMAKE_BINARY_DIR}/config.h")
SET(prefix ${CMAKE_INSTALL_PREFIX})
SET(exec_prefix "\${prefix}")
SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
SET(includedir "\${prefix}/include")
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/libmikmod-config.in" "${CMAKE_BINARY_DIR}/libmikmod-config" @ONLY)
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/libmikmod.pc.in" "${CMAKE_BINARY_DIR}/libmikmod.pc" @ONLY)
FOREACH (TGT ${LIBMIKMOD_LIBS})
TARGET_LINK_LIBRARIES ("${TGT}"
${EXTRA_LIBS})
INCLUDE_DIRECTORIES(AFTER ${ALSA_INCLUDE_DIRS} ${OPENAL_INCLUDE_DIR} ${SDL_INCLUDE_DIR})
ENDFOREACH (TGT)
INSTALL(
TARGETS ${LIBMIKMOD_LIBS}
LIBRARY DESTINATION "lib${LIB_SUFFIX}"
ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
)
INSTALL(
FILES "${CMAKE_BINARY_DIR}/libmikmod-config"
PERMISSIONS GROUP_EXECUTE GROUP_READ OWNER_EXECUTE OWNER_READ OWNER_WRITE WORLD_EXECUTE WORLD_READ
DESTINATION "bin"
)
INSTALL(
FILES
"${CMAKE_SOURCE_DIR}/include/mikmod.h"
DESTINATION
"include"
)
INSTALL(
FILES
"${CMAKE_BINARY_DIR}/libmikmod.pc"
DESTINATION
"lib${LIB_SUFFIX}/pkgconfig"
)