summaryrefslogtreecommitdiffstats
path: root/cmake/FindG729.cmake
blob: 1fbfeeba59bd051750739304c3a87bc8e7ff467c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
INCLUDE(CMakePushCheckState)
INCLUDE(CheckCSourceCompiles)

FIND_PATH(G729_INCLUDE_DIR bcg729/decoder.h)
FIND_LIBRARY(G729_LIBRARY NAMES bcg729)

IF(G729_INCLUDE_DIR AND G729_LIBRARY)
	SET(G729_FOUND TRUE)

	# The bcg729 API was changed in 1.0.2 to add support for G.729 Annex B.
	# This checks whether we are dealing with the old or new API.
	CMAKE_PUSH_CHECK_STATE()
	SET(CMAKE_REQUIRED_INCLUDES "${INCLUDE_DIRECTORIES}" "${G729_INCLUDE_DIR}")
	SET(CMAKE_REQUIRED_LIBRARIES "${G729_LIBRARY}")
	SET(CMAKE_REQUIRED_QUIET TRUE)
	# Try to compile something using the old (pre-1.0.2) API.
	#
	# We cannot do it the other way around, as initBcg729EncoderChannel()
	# did not have a prototype before 1.0.2, thus compilation would not fail
	# when passing it an extra argument.
	CHECK_C_SOURCE_COMPILES("
		#include <bcg729/encoder.h>

		int main() {
			/* This function requires an argument since 1.0.2 */
			initBcg729EncoderChannel();
			return 0;
		}
	" G729_OLD_API)
	CMAKE_POP_CHECK_STATE()

	IF (G729_OLD_API)
		SET(G729_ANNEX_B FALSE)
	ELSE (G729_OLD_API)
		SET(G729_ANNEX_B TRUE)
	ENDIF (G729_OLD_API)
ENDIF(G729_INCLUDE_DIR AND G729_LIBRARY)

IF(G729_FOUND)
	IF (NOT G729_FIND_QUIETLY)
		MESSAGE(STATUS "Found bcg729 includes:	${G729_INCLUDE_DIR}/bcg729/decoder.h")
		MESSAGE(STATUS "Found bcg729 library: ${G729_LIBRARY}")
		IF (G729_ANNEX_B)
			MESSAGE(STATUS "bcg729 supports Annex B; using the new (1.0.2) API")
		ELSE (G729_ANNEX_B)
			MESSAGE(STATUS "bcg729 does not support Annex B; using the old (pre-1.0.2) API")
		ENDIF (G729_ANNEX_B)
	ENDIF (NOT G729_FIND_QUIETLY)
ELSE(G729_FOUND)
	IF (G729_FIND_REQUIRED)
		MESSAGE(FATAL_ERROR "Could NOT find bcg729 development files")
	ENDIF (G729_FIND_REQUIRED)
ENDIF(G729_FOUND)