Skip to content

Commit 5145e7a

Browse files
committed
Remove duplicated CMake code for backend setup
1 parent 1164c38 commit 5145e7a

File tree

1 file changed

+74
-197
lines changed

1 file changed

+74
-197
lines changed

CMakeLists.txt

Lines changed: 74 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,45 @@ if(DEFINED LIB_SUFFIX)
6262
endif()
6363

6464

65+
# Adds configuration options for a backend with the given _NAME.
66+
#
67+
# Requires the following parameters:
68+
#
69+
# _NAME - The name of the backend module. This is used to create and select
70+
# output variable and to print option documentation and status
71+
# messages.
72+
# _MODULE - The name of the CMake search module used.
73+
# _SRC - Source file to implement the backend.
74+
#
75+
# Defines or modifies the following options and variables:
76+
#
77+
# ALSOFT_REQUIRE_${_NAME} - A user configuration to require the backend.
78+
# ${_NAME}_FOUND - True if the backend was found.
79+
# ALSOFT_BACKEND_${_NAME} - A user configuration to enable a found backend.
80+
# HAVE_${_NAME} - 1 if the backend was found.
81+
# ALC_OBJS - Backend source files are appended to this.
82+
# BACKENDS - Status messages are appended to this.
83+
MACRO(ADD_BACKEND _NAME _MODULE _SRC)
84+
OPTION(ALSOFT_REQUIRE_${_NAME} "Require ${_NAME} backend" OFF)
85+
FIND_PACKAGE(${_MODULE})
86+
STRING(TOUPPER "${_MODULE}" _MODULE_U)
87+
IF(${_MODULE_U}_FOUND)
88+
OPTION(ALSOFT_BACKEND_${_NAME} "Enable ${_NAME} backend" ON)
89+
IF(ALSOFT_BACKEND_${_NAME})
90+
SET(HAVE_${_NAME} 1)
91+
SET(BACKENDS "${BACKENDS} ${_NAME}${IS_LINKED},")
92+
SET(ALC_OBJS ${ALC_OBJS} ${_SRC})
93+
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
94+
INCLUDE_DIRECTORIES(${${_MODULE_U}_INCLUDE_DIRS})
95+
ENDIF()
96+
ENDIF()
97+
ENDIF()
98+
IF(ALSOFT_REQUIRE_${_NAME} AND NOT HAVE_${_NAME})
99+
MESSAGE(FATAL_ERROR "Failed to enabled required ${_NAME} backend")
100+
ENDIF()
101+
ENDMACRO()
102+
103+
65104
IF(WIN32)
66105
ADD_DEFINITIONS("-D_WIN32 -D_WIN32_WINNT=0x0502")
67106

@@ -867,209 +906,60 @@ SET(ALC_OBJS ${ALC_OBJS}
867906
)
868907

869908
# Check ALSA backend
870-
OPTION(ALSOFT_REQUIRE_ALSA "Require ALSA backend" OFF)
871-
FIND_PACKAGE(ALSA)
872-
IF(ALSA_FOUND)
873-
OPTION(ALSOFT_BACKEND_ALSA "Enable ALSA backend" ON)
874-
IF(ALSOFT_BACKEND_ALSA)
875-
SET(HAVE_ALSA 1)
876-
SET(BACKENDS "${BACKENDS} ALSA${IS_LINKED},")
877-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/alsa.c)
878-
ADD_BACKEND_LIBS(${ALSA_LIBRARIES})
879-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
880-
INCLUDE_DIRECTORIES(${ALSA_INCLUDE_DIRS})
881-
ENDIF()
882-
ENDIF()
883-
ENDIF()
884-
IF(ALSOFT_REQUIRE_ALSA AND NOT HAVE_ALSA)
885-
MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
909+
ADD_BACKEND(ALSA ALSA Alc/backends/alsa.c)
910+
IF(ALSOFT_BACKEND_ALSA)
911+
ADD_BACKEND_LIBS(${ALSA_LIBRARIES})
886912
ENDIF()
887913

888914
# Check OSS backend
889-
OPTION(ALSOFT_REQUIRE_OSS "Require OSS backend" OFF)
890-
FIND_PACKAGE(OSS)
891-
IF(OSS_FOUND)
892-
OPTION(ALSOFT_BACKEND_OSS "Enable OSS backend" ON)
893-
IF(ALSOFT_BACKEND_OSS)
894-
SET(HAVE_OSS 1)
895-
SET(BACKENDS "${BACKENDS} OSS,")
896-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/oss.c)
897-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
898-
INCLUDE_DIRECTORIES(${OSS_INCLUDE_DIRS})
899-
ENDIF()
900-
ENDIF()
901-
ENDIF()
902-
IF(ALSOFT_REQUIRE_OSS AND NOT HAVE_OSS)
903-
MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
904-
ENDIF()
915+
ADD_BACKEND(OSS OSS Alc/backends/oss.c)
905916

906917
# Check Solaris backend
907-
OPTION(ALSOFT_REQUIRE_SOLARIS "Require Solaris backend" OFF)
908-
FIND_PACKAGE(AudioIO)
909-
IF(AUDIOIO_FOUND)
910-
OPTION(ALSOFT_BACKEND_SOLARIS "Enable Solaris backend" ON)
911-
IF(ALSOFT_BACKEND_SOLARIS)
912-
SET(HAVE_SOLARIS 1)
913-
SET(BACKENDS "${BACKENDS} Solaris,")
914-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/solaris.c)
915-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
916-
INCLUDE_DIRECTORIES(${AUDIOIO_INCLUDE_DIRS})
917-
ENDIF()
918-
ENDIF()
919-
ENDIF()
920-
IF(ALSOFT_REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
921-
MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
922-
ENDIF()
918+
ADD_BACKEND(SOLARIS AudioIO Alc/backends/solaris.c)
923919

924920
# Check SndIO backend
925-
OPTION(ALSOFT_REQUIRE_SNDIO "Require SndIO backend" OFF)
926-
FIND_PACKAGE(SoundIO)
927-
IF(SOUNDIO_FOUND)
928-
OPTION(ALSOFT_BACKEND_SNDIO "Enable SndIO backend" ON)
929-
IF(ALSOFT_BACKEND_SNDIO)
930-
SET(HAVE_SNDIO 1)
931-
SET(BACKENDS "${BACKENDS} SndIO (linked),")
932-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/sndio.c)
933-
SET(EXTRA_LIBS ${SOUNDIO_LIBRARIES} ${EXTRA_LIBS})
934-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
935-
INCLUDE_DIRECTORIES(${SOUNDIO_INCLUDE_DIRS})
936-
ENDIF()
937-
ENDIF()
938-
ENDIF()
939-
IF(ALSOFT_REQUIRE_SNDIO AND NOT HAVE_SNDIO)
940-
MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
921+
ADD_BACKEND(SNDIO SoundIO Alc/backends/sndio.c)
922+
IF(ALSOFT_BACKEND_SNDIO)
923+
SET(EXTRA_LIBS ${SOUNDIO_LIBRARIES} ${EXTRA_LIBS})
941924
ENDIF()
942925

943926
# Check QSA backend
944-
OPTION(ALSOFT_REQUIRE_QSA "Require QSA backend" OFF)
945-
FIND_PACKAGE(QSA)
946-
IF(QSA_FOUND)
947-
OPTION(ALSOFT_BACKEND_QSA "Enable QSA backend" ON)
948-
IF(ALSOFT_BACKEND_QSA)
949-
SET(HAVE_QSA 1)
950-
SET(BACKENDS "${BACKENDS} QSA (linked),")
951-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/qsa.c)
952-
SET(EXTRA_LIBS ${QSA_LIBRARIES} ${EXTRA_LIBS})
953-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
954-
INCLUDE_DIRECTORIES(${QSA_INCLUDE_DIRS})
955-
ENDIF()
956-
ENDIF()
927+
ADD_BACKEND(QSA QSA Alc/backends/qsa.c)
928+
IF(ALSOFT_BACKEND_QSA)
929+
SET(EXTRA_LIBS ${QSA_LIBRARIES} ${EXTRA_LIBS})
957930
ENDIF()
958-
IF(ALSOFT_REQUIRE_QSA AND NOT HAVE_QSA)
959-
MESSAGE(FATAL_ERROR "Failed to enabled required QSA backend")
960-
ENDIF()
961-
962-
# Check Windows-only backends
963-
OPTION(ALSOFT_REQUIRE_WINMM "Require Windows Multimedia backend" OFF)
964-
OPTION(ALSOFT_REQUIRE_DSOUND "Require DirectSound backend" OFF)
965-
OPTION(ALSOFT_REQUIRE_MMDEVAPI "Require MMDevApi backend" OFF)
966-
IF(HAVE_WINDOWS_H)
967-
# Check MMSystem backend
968-
CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0502)
969-
IF(HAVE_MMSYSTEM_H)
970-
CHECK_SHARED_FUNCTION_EXISTS(waveOutOpen "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
971-
IF(HAVE_LIBWINMM)
972-
OPTION(ALSOFT_BACKEND_WINMM "Enable Windows Multimedia backend" ON)
973-
IF(ALSOFT_BACKEND_WINMM)
974-
SET(HAVE_WINMM 1)
975-
SET(BACKENDS "${BACKENDS} WinMM,")
976-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/winmm.c)
977-
SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
978-
ENDIF()
979-
ENDIF()
980-
ENDIF()
981-
982-
# Check DSound backend
983-
FIND_PACKAGE(DSound)
984-
IF(DSOUND_FOUND)
985-
OPTION(ALSOFT_BACKEND_DSOUND "Enable DirectSound backend" ON)
986-
IF(ALSOFT_BACKEND_DSOUND)
987-
SET(HAVE_DSOUND 1)
988-
SET(BACKENDS "${BACKENDS} DirectSound${IS_LINKED},")
989-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/dsound.c)
990-
ADD_BACKEND_LIBS(${DSOUND_LIBRARIES})
991-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
992-
INCLUDE_DIRECTORIES(${DSOUND_INCLUDE_DIRS})
993-
ENDIF()
994-
ENDIF()
995-
ENDIF()
996931

997-
# Check for MMDevApi backend
998-
CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
999-
IF(HAVE_MMDEVICEAPI_H)
1000-
OPTION(ALSOFT_BACKEND_MMDEVAPI "Enable MMDevApi backend" ON)
1001-
IF(ALSOFT_BACKEND_MMDEVAPI)
1002-
SET(HAVE_MMDEVAPI 1)
1003-
SET(BACKENDS "${BACKENDS} MMDevApi,")
1004-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/mmdevapi.c)
1005-
ENDIF()
1006-
ENDIF()
1007-
ENDIF()
1008-
IF(ALSOFT_REQUIRE_WINMM AND NOT HAVE_WINMM)
1009-
MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
932+
# Check WinMM (Windows) backend
933+
ADD_BACKEND(WINMM WinMM Alc/backends/winmm.c)
934+
IF(ALSOFT_BACKEND_WINMM)
935+
SET(EXTRA_LIBS ${WINMM_LIBRARIES} ${EXTRA_LIBS})
1010936
ENDIF()
1011-
IF(ALSOFT_REQUIRE_DSOUND AND NOT HAVE_DSOUND)
1012-
MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
1013-
ENDIF()
1014-
IF(ALSOFT_REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
1015-
MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
937+
938+
# Check DSound (Windows) backend
939+
ADD_BACKEND(DSOUND DSound Alc/backends/dsound.c)
940+
IF(ALSOFT_BACKEND_DSOUND)
941+
ADD_BACKEND_LIBS(${DSOUND_LIBRARIES})
1016942
ENDIF()
1017943

944+
# Check for MMDevApi (Windows) backend
945+
ADD_BACKEND(MMDEVAPI MMDevAPI Alc/backends/mmdevapi.c)
946+
1018947
# Check PortAudio backend
1019-
OPTION(ALSOFT_REQUIRE_PORTAUDIO "Require PortAudio backend" OFF)
1020-
FIND_PACKAGE(PortAudio)
1021-
IF(PORTAUDIO_FOUND)
1022-
OPTION(ALSOFT_BACKEND_PORTAUDIO "Enable PortAudio backend" ON)
1023-
IF(ALSOFT_BACKEND_PORTAUDIO)
1024-
SET(HAVE_PORTAUDIO 1)
1025-
SET(BACKENDS "${BACKENDS} PortAudio${IS_LINKED},")
1026-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/portaudio.c)
1027-
ADD_BACKEND_LIBS(${PORTAUDIO_LIBRARIES})
1028-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
1029-
INCLUDE_DIRECTORIES(${PORTAUDIO_INCLUDE_DIRS})
1030-
ENDIF()
1031-
ENDIF()
1032-
ENDIF()
1033-
IF(ALSOFT_REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
1034-
MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
948+
ADD_BACKEND(PORTAUDIO PortAudio Alc/backends/portaudio.c)
949+
IF(ALSOFT_BACKEND_PORTAUDIO)
950+
ADD_BACKEND_LIBS(${PORTAUDIO_LIBRARIES})
1035951
ENDIF()
1036952

1037953
# Check PulseAudio backend
1038-
OPTION(ALSOFT_REQUIRE_PULSEAUDIO "Require PulseAudio backend" OFF)
1039-
FIND_PACKAGE(PulseAudio)
1040-
IF(PULSEAUDIO_FOUND)
1041-
OPTION(ALSOFT_BACKEND_PULSEAUDIO "Enable PulseAudio backend" ON)
1042-
IF(ALSOFT_BACKEND_PULSEAUDIO)
1043-
SET(HAVE_PULSEAUDIO 1)
1044-
SET(BACKENDS "${BACKENDS} PulseAudio${IS_LINKED},")
1045-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/pulseaudio.c)
1046-
ADD_BACKEND_LIBS(${PULSEAUDIO_LIBRARIES})
1047-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
1048-
INCLUDE_DIRECTORIES(${PULSEAUDIO_INCLUDE_DIRS})
1049-
ENDIF()
1050-
ENDIF()
1051-
ENDIF()
1052-
IF(ALSOFT_REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
1053-
MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
954+
ADD_BACKEND(PULSEAUDIO PulseAudio Alc/backends/pulseaudio.c)
955+
IF(ALSOFT_BACKEND_PULSEAUDIO)
956+
ADD_BACKEND_LIBS(${PULSEAUDIO_LIBRARIES})
1054957
ENDIF()
1055958

1056959
# Check JACK backend
1057-
OPTION(ALSOFT_REQUIRE_JACK "Require JACK backend" OFF)
1058-
FIND_PACKAGE(JACK)
1059-
IF(JACK_FOUND)
1060-
OPTION(ALSOFT_BACKEND_JACK "Enable JACK backend" ON)
1061-
IF(ALSOFT_BACKEND_JACK)
1062-
SET(HAVE_JACK 1)
1063-
SET(BACKENDS "${BACKENDS} JACK${IS_LINKED},")
1064-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/jack.c)
1065-
ADD_BACKEND_LIBS(${JACK_LIBRARIES})
1066-
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
1067-
INCLUDE_DIRECTORIES(${JACK_INCLUDE_DIRS})
1068-
ENDIF()
1069-
ENDIF()
1070-
ENDIF()
1071-
IF(ALSOFT_REQUIRE_JACK AND NOT HAVE_JACK)
1072-
MESSAGE(FATAL_ERROR "Failed to enabled required JACK backend")
960+
ADD_BACKEND(JACK JACK Alc/backends/jack.c)
961+
IF(ALSOFT_BACKEND_JACK)
962+
ADD_BACKEND_LIBS(${JACK_LIBRARIES})
1073963
ENDIF()
1074964

1075965
# Check CoreAudio backend
@@ -1106,22 +996,9 @@ IF(ALSOFT_REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
1106996
ENDIF()
1107997

1108998
# Check for OpenSL (Android) backend
1109-
OPTION(ALSOFT_REQUIRE_OPENSL "Require OpenSL backend" OFF)
1110-
CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
1111-
IF(HAVE_SLES_OPENSLES_ANDROID_H)
1112-
CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
1113-
IF(HAVE_LIBOPENSLES)
1114-
OPTION(ALSOFT_BACKEND_OPENSL "Enable OpenSL backend" ON)
1115-
IF(ALSOFT_BACKEND_OPENSL)
1116-
SET(HAVE_OPENSL 1)
1117-
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/opensl.c)
1118-
SET(BACKENDS "${BACKENDS} OpenSL,")
1119-
SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
1120-
ENDIF()
1121-
ENDIF()
1122-
ENDIF()
1123-
IF(ALSOFT_REQUIRE_OPENSL AND NOT HAVE_OPENSL)
1124-
MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
999+
ADD_BACKEND(OPENSL OpenSLES Alc/backends/opensl.c)
1000+
IF(ALSOFT_BACKEND_OPENSL)
1001+
SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
11251002
ENDIF()
11261003

11271004
# Optionally enable the Wave Writer backend

0 commit comments

Comments
 (0)