1MACRO(PRINT_LIBRARY_INFO libraryName libraryDetected compilerFlags linkerFlags)
2	IF (${libraryDetected})
3		MESSAGE(STATUS "Found ${libraryName}")
4
5		IF (VERBOSE)
6			SET(_compilerFlags "")
7			APPEND_FLAGS(_compilerFlags ${compilerFlags})
8
9			SET(_linkerFlags "")
10			APPEND_FLAGS(_linkerFlags ${linkerFlags})
11
12			MESSAGE(STATUS "Compiler Flags:${_compilerFlags}")
13			MESSAGE(STATUS "Linker Flags  :${_linkerFlags}")
14		ENDIF (VERBOSE)
15	ELSE (${libraryDetected})
16		MESSAGE(STATUS ${ARGV4} "Could not find ${libraryName}")
17	ENDIF (${libraryDetected})
18ENDMACRO(PRINT_LIBRARY_INFO)
19
20
21MACRO(SDLify _source)
22	IF (SDL2_FOUND)
23		SET_SOURCE_FILES_PROPERTIES(${_source} PROPERTIES COMPILE_FLAGS "-I${SDL2_INCLUDE_DIR} ${SDL2_CFLAGS}")
24	ENDIF (SDL2_FOUND)
25ENDMACRO(SDLify)
26
27
28# ARGV2 = library to check
29# ARGV3 = function to check
30# ARVG4 = extra required libs
31MACRO(FIND_HEADER_AND_LIB prefix headerFile)
32	IF (NOT DEFINED ${prefix}_FOUND)
33		SET(${prefix}_FOUND 0 CACHE INTERNAL "")
34		SET(_proceed 1)
35
36		IF (NOT ${headerFile} STREQUAL "")
37			FIND_PATH(${prefix}_INCLUDE_DIR ${headerFile}
38					PATHS /usr/include/x86_64-linux-gnu) # Needed for 64 bits linux
39			MARK_AS_ADVANCED(${prefix}_INCLUDE_DIR)
40
41			IF (${prefix}_INCLUDE_DIR)
42				MESSAGE(STATUS "Found ${headerFile}")
43			ELSE (${prefix}_INCLUDE_DIR)
44				SET(_proceed 0)
45				MESSAGE(STATUS "Could not find ${headerFile}")
46			ENDIF (${prefix}_INCLUDE_DIR)
47		ENDIF (NOT ${headerFile} STREQUAL "")
48
49		IF (_proceed AND NOT ${ARGV2} STREQUAL "")
50                        # On Mac, search firts in port libs, else we might use an older lib coming from the system (e.g. iconv)
51                        IF(APPLE)
52                                FIND_LIBRARY(${prefix}_LIBRARY_DIR ${ARGV2} PATHS /opt/local/lib NO_DEFAULT_PATH) # needed for port stuff
53                        ENDIF(APPLE)
54			FIND_LIBRARY(${prefix}_LIBRARY_DIR ${ARGV2})
55			MARK_AS_ADVANCED(${prefix}_LIBRARY_DIR)
56
57			IF (${prefix}_LIBRARY_DIR)
58				MESSAGE(STATUS "Found ${ARGV2} library")
59
60				IF (NOT ${ARGV3} STREQUAL "")
61					ADM_CHECK_FUNCTION_EXISTS(${ARGV3} "${${prefix}_LIBRARY_DIR}" ${prefix}_FUNCTION_FOUND "${ARGV4}")
62
63					IF (${prefix}_FUNCTION_FOUND)
64						SET(${prefix}_FOUND 1 CACHE INTERNAL "")
65					ENDIF (${prefix}_FUNCTION_FOUND)
66				ELSE (NOT ${ARGV3} STREQUAL "")
67					SET(${prefix}_FOUND 1 CACHE INTERNAL "")
68				ENDIF (NOT ${ARGV3} STREQUAL "")
69			ELSE (${prefix}_LIBRARY_DIR)
70				MESSAGE(STATUS "Cound not find ${ARGV2} library")
71			ENDIF (${prefix}_LIBRARY_DIR)
72		ELSE (_proceed AND NOT ${ARGV2} STREQUAL "")
73			SET(${prefix}_FOUND ${_proceed} CACHE INTERNAL "")
74		ENDIF (_proceed AND NOT ${ARGV2} STREQUAL "")
75	ENDIF (NOT DEFINED ${prefix}_FOUND)
76ENDMACRO(FIND_HEADER_AND_LIB)
77
78
79MACRO (ADM_COMPILE _file _def _include _lib _varToSet _output)
80        #MESSAGE(STATUS " ADM_compile <${_file}>")
81	IF(AVIDEMUX_THIS_IS_CORE)
82		  SET(src ${AVIDEMUX_TOP_SOURCE_DIR}/cmake/cmake_compile_check/${_file})
83        ELSE()
84		  SET(src ${ADM_CMAKE_DIR}/cmake_compile_check/${_file})
85        ENDIF()
86        #MESSAGE(STATUS " Compiling <${src}>")
87	IF (NOT DEFINED ${_varToSet}_COMPILED)
88	        SET(${_varToSet}_COMPILED 1 CACHE INTERNAL "")
89                TRY_COMPILE(${_varToSet}
90		  ${CMAKE_BINARY_DIR}
91		  ${src}
92		  CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${_include}" "-DLINK_LIBRARIES:STRING=${_lib}"
93		  COMPILE_DEFINITIONS ${_def}
94		  OUTPUT_VARIABLE ${_output})
95                #MESSAGE(STATUS "output=${output}")
96	ENDIF (NOT DEFINED ${_varToSet}_COMPILED)
97ENDMACRO (ADM_COMPILE)
98
99
100#ARGV3 = extra libraries
101#ARGV4 = extra compile flags
102MACRO (ADM_CHECK_FUNCTION_EXISTS _function _lib _varToSet)
103	SET(CHECK_FUNCTION_DEFINE "-DCHECK_FUNCTION_EXISTS=${_function}" ${ARGV4})
104	SET(CHECK_FUNCTION_LIB ${_lib} ${ARGV3})
105
106	ADM_COMPILE(CheckFunctionExists.c "${CHECK_FUNCTION_DEFINE}" "" "${CHECK_FUNCTION_LIB}" ${_varToSet} OUTPUT)
107
108	IF (${_varToSet})
109		MESSAGE(STATUS "Found ${_function} in ${_lib}")
110	ELSE (${_varToSet})
111		MESSAGE(STATUS "Could not find ${_function} in ${_lib}")
112
113		IF (VERBOSE)
114			MESSAGE(STATUS ${OUTPUT})
115		ENDIF (VERBOSE)
116	ENDIF (${_varToSet})
117ENDMACRO (ADM_CHECK_FUNCTION_EXISTS)
118
119
120MACRO (CHECK_CFLAGS_REQUIRED _file _cflags _include _lib _varToSet)
121	IF (NOT DEFINED ${_varToSet}_CFLAGS_CHECKED)
122		SET(${_varToSet}_CFLAGS_CHECKED 1 CACHE INTERNAL "")
123
124		ADM_COMPILE(${_file} ${_cflags} ${_include} ${_lib} ${_varToSet}_COMPILE_WITH logwith)
125		ADM_COMPILE(${_file} "" ${_include} ${_lib} ${_varToSet}_COMPILE_WITHOUT logwithout)
126
127		IF (${_varToSet}_COMPILE_WITH AND NOT ${_varToSet}_COMPILE_WITHOUT)
128			SET(${_varToSet} 1 CACHE INTERNAL "")
129
130			IF (VERBOSE)
131				MESSAGE(STATUS "(${_cflags}) required")
132			ENDIF (VERBOSE)
133		ELSE (${_varToSet}_COMPILE_WITH AND NOT ${_varToSet}_COMPILE_WITHOUT)
134			IF (NOT ${_varToSet}_COMPILE_WITH AND ${_varToSet}_COMPILE_WITHOUT)
135				IF (VERBOSE)
136					MESSAGE (STATUS "(${_cflags}) not required")
137				ENDIF (VERBOSE)
138			ELSE (NOT ${_varToSet}_COMPILE_WITH AND ${_varToSet}_COMPILE_WITHOUT)
139				MESSAGE(STATUS "Inconsistent compiler output with: ${${_varToSet}_COMPILE_WITH}, without: ${${_varToSet}_COMPILE_WITHOUT}")
140				MESSAGE(STATUS "${logwith}")
141				MESSAGE(STATUS "")
142				MESSAGE(STATUS "${logwithout}")
143			endif(NOT ${_varToSet}_COMPILE_WITH AND ${_varToSet}_COMPILE_WITHOUT)
144		ENDIF (${_varToSet}_COMPILE_WITH AND NOT ${_varToSet}_COMPILE_WITHOUT)
145	ENDIF (NOT DEFINED ${_varToSet}_CFLAGS_CHECKED)
146ENDMACRO (CHECK_CFLAGS_REQUIRED)
147
148
149MACRO (APPEND_FLAGS _flags)
150	IF (NOT ${_flags})
151		SET(${_flags} "")
152	ENDIF (NOT ${_flags})
153
154	FOREACH (_flag ${ARGN})
155		SET(${_flags} "${${_flags}} ${_flag}")
156	ENDFOREACH (_flag ${ARGN})
157
158	IF (${firstChar} AND ${firstChar} STREQUAL " ")
159		STRING(LENGTH "${${_flags}}" stringLength)
160		MATH(EXPR stringLength "${stringLength} - 1")
161		STRING(SUBSTRING "${${_flags}}" 1 ${stringLength} ${_flags})
162	ENDIF (${firstChar} AND ${firstChar} STREQUAL " ")
163ENDMACRO (APPEND_FLAGS)
164
165
166#ARGV1 = flags
167MACRO (ADD_SOURCE_CFLAGS _target)
168	GET_SOURCE_FILE_PROPERTY(_flags ${_target} COMPILE_FLAGS)
169	APPEND_FLAGS(_flags ${ARGN})
170	SET_SOURCE_FILES_PROPERTIES(${_target} PROPERTIES COMPILE_FLAGS "${_flags}")
171ENDMACRO (ADD_SOURCE_CFLAGS)
172
173
174MACRO (ADD_TARGET_CFLAGS _target)
175	GET_TARGET_PROPERTY(_flags ${_target} COMPILE_FLAGS)
176	APPEND_FLAGS(_flags ${ARGN})
177	SET_TARGET_PROPERTIES(${_target} PROPERTIES COMPILE_FLAGS "${_flags}")
178ENDMACRO (ADD_TARGET_CFLAGS)
179
180
181MACRO (ADD_TARGET_DEFINITIONS _target)
182	SET(newflag)
183	GET_TARGET_PROPERTY(_flags ${_target} COMPILE_FLAGS)
184
185	FOREACH (_def ${ARGN})
186		IF (${_def})
187			APPEND_FLAGS(_flags "-D${_def}")
188			SET(newflag 1)
189		ENDIF (${_def})
190	ENDFOREACH (_def ${ARGN})
191
192	IF (newflag)
193		SET_TARGET_PROPERTIES(${_target} PROPERTIES COMPILE_FLAGS "${_flags}")
194	ENDIF (newflag)
195ENDMACRO (ADD_TARGET_DEFINITIONS)
196
197MACRO(DUMP_ALL_VARS)
198     get_cmake_property(_variableNames VARIABLES)
199    list (SORT _variableNames)
200    foreach (_variableName ${_variableNames})
201        message(STATUS "${_variableName}=${${_variableName}}")
202    endforeach()
203ENDMACRO(DUMP_ALL_VARS)
204
205