acinclude.m4 10.7 KB
Newer Older
aymeric's avatar
aymeric committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
dnl -*- autoconf -*-
AC_DEFUN([MS_CHECK_DEP],[
	dnl $1=dependency description
	dnl $2=dependency short name, will be suffixed with _CFLAGS and _LIBS
	dnl $3=headers's place
	dnl $4=lib's place
	dnl $5=header to check
	dnl $6=lib to check
	dnl $7=function to check in library
	
	dep_name=$2
	dep_headersdir=$3
	dep_libsdir=$4
	dep_header=$5
	dep_lib=$6
	dep_funclib=$7
	other_libs=$8	
	
	CPPFLAGS_save=$CPPFLAGS
	LDFLAGS_save=$LDFLAGS
smorlat's avatar
smorlat committed
21
	LIBS_save=$LIBS
smorlat's avatar
smorlat committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

	case "$target_os" in
		*mingw*)
			ms_check_dep_mingw_found=yes
		;;
	esac
	if test "$ms_check_dep_mingw_found" != "yes" ; then
		CPPFLAGS=`echo "-I$dep_headersdir"|sed -e "s:-I/usr/include[\ ]*$::"`
		LDFLAGS=`echo "-L$dep_libsdir"|sed -e "s:-L/usr/lib\(64\)*[\ ]*::"`
	else
		CPPFLAGS="-I$dep_headersdir"	
		LDFLAGS="-L$dep_libsdir"
	fi


aymeric's avatar
aymeric committed
37
	LIBS="-l$dep_lib"
smorlat's avatar
smorlat committed
38

aymeric's avatar
aymeric committed
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
	
	$2_CFLAGS="$CPPFLAGS"
	$2_LIBS="$LDFLAGS $LIBS"

	AC_CHECK_HEADERS([$dep_header],[AC_CHECK_LIB([$dep_lib],[$dep_funclib],found=yes,found=no, [$other_libs])
	],found=no)
	
	if test "$found" = "yes" ; then
		eval $2_found=yes
	else
		eval $2_found=no
		eval $2_CFLAGS=
		eval $2_LIBS=
	fi
	AC_SUBST($2_CFLAGS)
	AC_SUBST($2_LIBS)
	CPPFLAGS=$CPPFLAGS_save
	LDFLAGS=$LDFLAGS_save
smorlat's avatar
smorlat committed
57
	LIBS=$LIBS_save
aymeric's avatar
aymeric committed
58 59 60 61 62 63 64
])


AC_DEFUN([MS_CHECK_VIDEO],[

	dnl conditionnal build of video support
	AC_ARG_ENABLE(video,
65
		  [AS_HELP_STRING([--enable-video], [Turn on video support compiling (default=yes])],
aymeric's avatar
aymeric committed
66 67 68 69 70
		  [case "${enableval}" in
			yes) video=true ;;
			no)  video=false ;;
			*) AC_MSG_ERROR(bad value ${enableval} for --enable-video) ;;
		  esac],[video=true])
71 72

	AC_ARG_ENABLE(ffmpeg,
73
		  [AS_HELP_STRING([--disable-ffmpeg], [Disable ffmpeg support])],
74 75 76 77 78
		  [case "${enableval}" in
			yes) ffmpeg=true ;;
			no)  ffmpeg=false ;;
			*) AC_MSG_ERROR(bad value ${enableval} for --disable-ffmpeg) ;;
		  esac],[ffmpeg=true])
aymeric's avatar
aymeric committed
79 80 81
	
	if test "$video" = "true"; then
		
82 83 84 85 86 87 88 89 90 91 92 93 94 95
		if test "$macosx_found" = "yes" ; then
			dnl we use quartz+opengl directly on mac os for video display.
			enable_sdl_default=false
			enable_x11_default=false
			enable_glx_default=false
			LIBS="$LIBS -framework QTKit -framework CoreVideo "
			dnl the following check is necessary but due to automake bug it forces every platform to have an objC compiler !
			dnl AC_LANG_PUSH([Objective C])
			dnl AC_CHECK_HEADERS([QTKit/QTKit.h],[],[AC_MSG_ERROR([QTKit framework not found, required for video support])])
			dnl AC_LANG_POP([Objective C])
		elif test "$ios_found" = "yes" ; then
			enable_sdl_default=false
			enable_x11_default=false
			enable_glx_default=false
96
			LIBS="$LIBS -lstdc++"
97 98 99 100 101 102 103 104 105 106
		elif test "$ms_check_dep_mingw_found" = "yes" ; then
			enable_sdl_default=false
			enable_x11_default=false
			enable_glx_default=false
		else
			enable_sdl_default=false
			enable_x11_default=true
			enable_glx_default=true
		fi

107 108
		if test "$ffmpeg" = "true"; then
			dnl test for ffmpeg presence
109 110 111 112 113
			PKG_CHECK_MODULES(FFMPEG, [libavcodec >= 51.0.0 ],avcodec_found=yes , avcodec_found=no)
			if test x$avcodec_found = xno ; then
			   AC_MSG_WARN([Could not find libavcodec (from ffmpeg) headers and library.])
			else
			   FFMPEG_LIBS="$FFMPEG_LIBS -lavutil"
114
			fi
Simon Morlat's avatar
Simon Morlat committed
115 116
			
			
117 118 119 120 121 122 123
			PKG_CHECK_MODULES(SWSCALE, [libswscale >= 0.7.0 ],swscale_found=yes , swscale_found=no)
			if test x$swscale_found = xno ; then
			   AC_MSG_ERROR([Could not find libswscale (from ffmpeg) headers and library. This is mandatory for video support])
			fi

			dnl check for new/old ffmpeg header file layout
			CPPFLAGS_save=$CPPFLAGS
124
			CPPFLAGS="$FFMPEG_CFLAGS $CPPFLAGS -Wno-error"
125
			AC_CHECK_HEADERS(libavcodec/avcodec.h)
126 127 128
			AC_CHECK_HEADER(libavcodec/old_codec_ids.h,[ old_codec_ids_found=yes
                                                                     AC_DEFINE(HAVE_AVCODEC_OLD_CODEC_IDS,1,[for compatibility purpose with old ffmpeg])]
                                                                     ,[old_codec_ids_found=no],[#include "libavcodec/avcodec.h"])
129 130
			AC_MSG_CHECKING([AV_CODEC_ID_SNOW])
			AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libavcodec/avcodec.h>]],
131 132 133 134 135
                                        		[[enum AVCodecID toto=AV_CODEC_ID_SNOW;if(toto){}]])]
                                           ,[if test x$old_codec_ids_found = xno ; then
						AC_DEFINE(CODEC_ID_SNOW,AV_CODEC_ID_SNOW,[for compatibility purpose with old ffmpeg])
					     fi
                                            AC_DEFINE(HAVE_AVCODEC_SNOW,1,[for compatibility purpose with old ffmpeg])
136 137 138 139
                                            AC_MSG_RESULT([found])]
                                           ,[AC_MSG_RESULT([not found])])
			AC_MSG_CHECKING([CODEC_ID_SNOW])
			AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libavcodec/avcodec.h>]],
140 141
                                        		[[enum CodecID toto=CODEC_ID_SNOW;if (toto){}]])]
                                           ,[AC_DEFINE(HAVE_AVCODEC_SNOW,1,[for compatibility purpose with old ffmpeg])
142 143
                                           AC_MSG_RESULT([found])]
                                           ,[AC_MSG_RESULT([not found])])
144 145
			CPPFLAGS=$CPPFLAGS_save

146
			LIBS_save=$LIBS
147 148 149 150 151
			dnl to workaround a bug on debian and ubuntu, check if libavcodec needs -lvorbisenc to compile	
			AC_CHECK_LIB(avcodec,avcodec_register_all, novorbis=yes , [
				LIBS="$LIBS -lvorbisenc"
				], $FFMPEG_LIBS )

152
			LIBS=$LIBS_save
153 154 155 156 157 158 159 160 161 162
			dnl when swscale feature is not provided by
			dnl libswscale, its features are swallowed by
			dnl libavcodec, but without swscale.h and without any
			dnl declaration into avcodec.h (this is to be
			dnl considered as an ffmpeg bug).
			dnl 
			dnl #if defined(HAVE_LIBAVCODEC_AVCODEC_H) && !defined(HAVE_LIBSWSCALE_SWSCALE_H)
			dnl # include "swscale.h" // private linhone swscale.h
			dnl #endif
			CPPFLAGS_save=$CPPFLAGS
163
			CPPFLAGS="$SWSCALE_CFLAGS $CPPFLAGS -Wno-error"
164 165 166
			AC_CHECK_HEADERS(libswscale/swscale.h)
			CPPFLAGS=$CPPFLAGS_save

167 168 169 170 171
			LIBS_save=$LIBS
			dnl check if we need to emulate newer functions	
			AC_CHECK_LIB(avcodec,avcodec_get_context_defaults3,  [AC_DEFINE([HAVE_FUN_avcodec_get_context_defaults3], [], [Have ffmpeg function])] ,	 , $FFMPEG_LIBS )
			AC_CHECK_LIB(avcodec,avcodec_open2, [AC_DEFINE([HAVE_FUN_avcodec_open2], [], [Have ffmpeg function])] , , $FFMPEG_LIBS )
			AC_CHECK_LIB(avcodec,avcodec_encode_video2, [AC_DEFINE([HAVE_FUN_avcodec_encode_video2], [], [Have ffmpeg function])] , , $FFMPEG_LIBS )
172 173 174
			AC_CHECK_LIB(avutil,av_frame_alloc, [AC_DEFINE([HAVE_FUN_av_frame_alloc], [], [Have ffmpeg function])] , , $FFMPEG_LIBS )
			AC_CHECK_LIB(avutil,av_frame_free, [AC_DEFINE([HAVE_FUN_av_frame_free], [], [Have ffmpeg function])] , , $FFMPEG_LIBS )
			AC_CHECK_LIB(avutil,av_frame_unref, [AC_DEFINE([HAVE_FUN_av_frame_unref], [], [Have ffmpeg function])] , , $FFMPEG_LIBS )
175 176 177
			LIBS=$LIBS_save


178
			AC_ARG_ENABLE(sdl,
179
			  [AS_HELP_STRING([--disable-sdl], [Disable SDL support (default: disabled except on macos)])],
180 181 182 183
			  	  [case "${enableval}" in
				  yes) enable_sdl=true ;;
				  no)  enable_sdl=false ;;
			  *) AC_MSG_ERROR(bad value ${enableval} for --disable-sdl) ;;
184
		  	  esac],[enable_sdl=$enable_sdl_default])
185

186
			sdl_found="false"
187
			if test "$enable_sdl" = "true"; then
188
				   PKG_CHECK_MODULES(SDL, [sdl >= 1.2.0 ],sdl_found=true,[AC_MSG_ERROR([No SDL library found])])
189 190
			fi

191

192
			AC_ARG_ENABLE(x11,
193
			  [AS_HELP_STRING([--disable-x11], [Disable X11 support])],
194 195 196 197
		 	  [case "${enableval}" in
			  yes) enable_x11=true ;;
			  no)  enable_x11=false ;;
			  *) AC_MSG_ERROR(bad value ${enableval} for --disable-x11) ;;
Simon Morlat's avatar
Simon Morlat committed
198
			  esac],[enable_x11=$enable_x11_default])
199 200

			if test "$enable_x11" = "true"; then
Simon Morlat's avatar
Simon Morlat committed
201 202
				AC_CHECK_HEADERS(X11/Xlib.h)
			else
Simon Morlat's avatar
Simon Morlat committed
203 204
				enable_xv=no
				enable_glx=no
205 206 207
			fi

			AC_ARG_ENABLE(xv,
208
			  [AS_HELP_STRING([--enable-xv], [Enable xv support])],
209 210 211 212
			  [case "${enableval}" in
			  yes) enable_xv=true ;;
			  no)  enable_xv=false ;;
			  *) AC_MSG_ERROR(bad value ${enableval} for --enable-xv) ;;
Simon Morlat's avatar
Simon Morlat committed
213
			  esac],[enable_xv=$enable_x11_default])
214 215

			if test "$enable_xv" = "true"; then
216 217 218 219
				AC_CHECK_HEADERS(X11/extensions/Xv.h,[] ,[enable_xv=false])
				AC_CHECK_HEADERS(X11/extensions/Xvlib.h,[] ,[enable_xv=false],[
					#include <X11/Xlib.h>
				])
220 221 222 223
				AC_CHECK_LIB(Xv,XvCreateImage,[LIBS="$LIBS -lXv"],[enable_xv=false])
				if test "$enable_xv" = "false" ; then
					AC_MSG_ERROR([No X video output API found. Please install X11+Xv headers.])
				fi
Simon Morlat's avatar
Simon Morlat committed
224
			fi
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
		fi

		AC_ARG_ENABLE(glx,
		  [AS_HELP_STRING([--enable-glx], [Enable X11+OpenGL rendering support (requires glx and glew)])],
		  [case "${enableval}" in
		  yes) enable_glx=true ;;
		  no)  enable_glx=false ;;
		  *) AC_MSG_ERROR(bad value ${enableval} for --enable-glx) ;;
		  esac],[enable_glx=$enable_glx_default])

		if test "$enable_glx" = "true"; then
			AC_CHECK_HEADERS(GL/gl.h,[] ,[enable_glx=false])
			AC_CHECK_HEADERS(GL/glx.h,[] ,[enable_glx=false],[
				#include <GL/glx.h>
			])
			if test "$enable_glx" = "false" ; then
				AC_MSG_ERROR([No GL/GLX API found. Please install GL and GLX headers.])
242
			fi
243 244
			PKG_CHECK_MODULES(GLEW,[glew >= 1.5])
			AC_CHECK_HEADERS(X11/Xlib.h)
245
			AC_DEFINE(HAVE_GLX, 1, [defined if GLX is available])
aymeric's avatar
aymeric committed
246
		fi
247
		
smorlat's avatar
smorlat committed
248
		AC_ARG_ENABLE(theora,
249
		  [AS_HELP_STRING([--disable-theora], [Disable theora support])],
smorlat's avatar
smorlat committed
250 251 252 253 254 255 256
		  [case "${enableval}" in
			yes) theora=true ;;
			no)  theora=false ;;
			*) AC_MSG_ERROR(bad value ${enableval} for --disable-theora) ;;
		  esac],[theora=true])

		if test x$theora = xtrue; then
aymeric's avatar
aymeric committed
257 258
		PKG_CHECK_MODULES(THEORA, [theora >= 1.0alpha7 ], [have_theora=yes],
					[have_theora=no])
smorlat's avatar
smorlat committed
259
		fi
260
		
261
		AC_ARG_ENABLE(vp8,
262
		  [AS_HELP_STRING([--disable-vp8], [Disable vp8 support])],
263 264 265 266 267 268
		  [case "${enableval}" in
			yes) vp8=true ;;
			no)  vp8=false ;;
			*) AC_MSG_ERROR(bad value ${enableval} for --disable-vp8) ;;
		  esac],[vp8=true])

269
		vp8dir=/usr
270
		if test x$vp8 = xtrue; then
Simon Morlat's avatar
Simon Morlat committed
271
			PKG_CHECK_MODULES(VP8, [vpx >= 0.9.6 ], [have_vp8=yes],
272
					[have_vp8=no])
Simon Morlat's avatar
Simon Morlat committed
273
			if test "$have_vp8" = "no" ; then
274 275 276 277 278
				MS_CHECK_DEP([VP8 codec],[VP8],[${vp8dir}/include],
					[${vp8dir}/lib],[vpx/vpx_encoder.h],[vpx],[vpx_codec_encode])
				if test "$VP8_found" = "yes" ; then
					have_vp8=yes
				fi
Simon Morlat's avatar
Simon Morlat committed
279
			fi
280 281
		fi

282 283
		if test "$ffmpeg" = "false"; then
		   FFMPEG_CFLAGS=" $FFMPEG_CFLAGS -DNO_FFMPEG"
smorlat's avatar
smorlat committed
284
		fi
285

286 287 288
		VIDEO_CFLAGS=" $FFMPEG_CFLAGS -DVIDEO_ENABLED"
		VIDEO_LIBS=" $FFMPEG_LIBS $SWSCALE_LIBS"

Simon Morlat's avatar
Simon Morlat committed
289
		if test "$sdl_found" = "true" ; then
290 291 292
			VIDEO_CFLAGS="$VIDEO_CFLAGS $SDL_CFLAGS -DHAVE_SDL"
			VIDEO_LIBS="$VIDEO_LIBS $SDL_LIBS"
		fi
aymeric's avatar
aymeric committed
293 294 295 296

		if test "${ac_cv_header_X11_Xlib_h}" = "yes" ; then
			VIDEO_LIBS="$VIDEO_LIBS -lX11"
		fi
297 298

		if test "$mingw_found" = "yes" ; then
299
			VIDEO_LIBS="$VIDEO_LIBS -lvfw32 -lgdi32"
300
		fi
jehan's avatar
jehan committed
301 302 303
		if test "$ios_found" = "yes" ; then
			LIBS="$LIBS -framework AVFoundation -framework CoreVideo -framework CoreMedia"
		fi
304
		if test "$enable_glx" = "true"; then
305
			VIDEO_LIBS="$VIDEO_LIBS -lGL -lGLEW"
Simon Morlat's avatar
Simon Morlat committed
306
			VIDEO_CFLAGS="$VIDEO_CFLAGS -DHAVE_GL"
307 308
		fi
		if test "$enable_xv" = "true"; then
Simon Morlat's avatar
Simon Morlat committed
309
			VIDEO_CFLAGS="$VIDEO_CFLAGS -DHAVE_XV"
310
		fi
aymeric's avatar
aymeric committed
311
	fi
312

aymeric's avatar
aymeric committed
313 314 315
	AC_SUBST(VIDEO_CFLAGS)
	AC_SUBST(VIDEO_LIBS)
])