dnl Process this file with autoconf to produce a configure script. AC_INIT([UltraGrid],[1.7],[ultragrid-dev@cesnet.cz]) configure_flags="$*" AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([1.10]) AC_PREREQ([2.61]) AC_CONFIG_SRCDIR([src/main.cpp]) AC_CONFIG_MACRO_DIR([m4]) PARENT=`echo $PWD | sed -e 's%/[[^/]]*$%%'` AC_DEFINE_UNQUOTED([CONFIG_FLAGS], ["$configure_flags"], [Flags passed to configure]) AC_CANONICAL_HOST AC_PROG_CC AC_PROG_CPP AC_PROG_CXX AC_PROG_CXXCPP AC_PROG_EGREP AC_PROG_INSTALL AC_C_CONST AC_TYPE_SIZE_T AC_C_BIGENDIAN AC_C_CHAR_UNSIGNED PKG_PROG_PKG_CONFIG # ------------------------------------------------------------------------------------------------- POST_COMPILE_MSG="" CFLAGS="$CFLAGS -I$srcdir" CPPFLAGS="$CPPFLAGS -I$srcdir" CXXFLAGS="$CXXFLAGS -I$srcdir -std=gnu++17" LIB_MODULES= AC_SUBST(INC) AC_SUBST(LIBS) AC_SUBST(OBJS) AC_SUBST(POST_COMPILE_MSG) AC_SUBST(COMMON_FLAGS) AC_CHECK_SIZEOF([int *]) AC_C_BIGENDIAN( AC_DEFINE([WORDS_BIGENDIAN], 1, [This is big endian system]), AC_DEFINE([WORDS_SMALLENDIAN], 1, [This is little endian system]) ) if test "$ac_cv_prog_cc_c99" = no then AC_MSG_ERROR([Your compiler does not accept C99.]) fi AC_CHECK_SIZEOF([size_t]) if test $ac_cv_sizeof_size_t -eq 8 then WORD_LEN=64 else WORD_LEN=32 fi AC_DEFUN([HM_VERSION_WARNING], [ AC_MSG_WARN([If you still want to try with unsupported version of dependency, you may want to try --disable-depends-version-check option. If you find out that some unsupported version is working, please let us know at ultragrid-dev@cesnet.cz. ]) ]) WARNINGS= # variant of AC_MSG_WARN that in addition stores the message for repost at the end m4_defun([UG_MSG_WARN], [ AC_MSG_WARN([$1]) WARNINGS="${WARNINGS}$1\n" ]) m4_defun([MY_CHECK_FRAMEWORK], [AC_CACHE_CHECK([if -framework ]$1[ works],[my_cv_framework_]$1, [save_LIBS="$LIBS" LIBS="$LIBS -framework ]$1[" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [my_cv_framework_]$1[=yes], [my_cv_framework_]$1[=no]) ]) LIBS="$save_LIBS" if test "$my_cv_framework_]$1["="yes"; then AC_DEFINE(AS_TR_CPP([HAVE_FRAMEWORK_]$1),1, [Define if you have the ] $1 [ framework]) AS_TR_CPP([FRAMEWORK_]$1)="-framework ]$1[" AC_SUBST([FRAMEWORK_]AS_TR_CPP($1)) fi]) AC_MSG_CHECKING([GIT presence]) if which git then AC_MSG_CHECKING([checking GIT branch ]) git_branch=`SRC=$(dirname "$0"); git -C "$SRC" name-rev --name-only HEAD` if test "$git_branch"; then AC_DEFINE_UNQUOTED([GIT_BRANCH], "$git_branch", [Current GIT branch]) AC_MSG_RESULT($git_branch); else AC_MSG_RESULT(no); fi AC_MSG_CHECKING([checking GIT revision ]) git_rev=`SRC=$(dirname "$0"); git -C "$SRC" rev-parse --short HEAD` if test "$git_rev"; then AC_DEFINE_UNQUOTED([GIT_REV], "$git_rev", [Current GIT revision]) AC_MSG_RESULT($git_rev); else AC_MSG_RESULT(no); fi fi AC_MSG_CHECKING([OS family]) if test "$host_vendor" = "apple"; then system=MacOSX AC_DEFINE([HAVE_MACOSX], [1], [This is Mac X OS]) APPEXT=.app elif expr "$host_os" : ".*mingw32.*" > /dev/null || expr "$host_os" : ".*msys.*" > /dev/null; then system=Windows APPEXT=.exe AC_DEFINE([WIN32], [1], [This is an Windows OS]) else system=Linux AC_DEFINE([HAVE_LINUX], [1], [This is Linux]) fi AC_MSG_RESULT($system); AC_SUBST(system) if test $build != $host; then cross_compile=yes # don't confuse with autoconf's $cross_compiling - ours is more correct # because $cross_compiling=no if we are cross-compiling but are able to # execute the compiled binary (eg. using wine-binfmt) else cross_compile=no fi AC_MSG_CHECKING([OS kernel version (major)]) os_version_major=`uname -r |cut -d . -f 1` AC_MSG_RESULT($os_version_major); AC_MSG_CHECKING([OS kernel version (minor)]) os_version_minor=`uname -r |cut -d . -f 2` AC_MSG_RESULT($os_version_minor); if test $system = Linux; then LDFLAGS="$LDFLAGS -Wl,--dynamic-list-data" fi if test $system = MacOSX; then if test $os_version_major -lt 18; then # Darwin 18.0.0 is macOS 10.14 MIN_MACOS_VER=10.7 else MIN_MACOS_VER=10.14 fi COMMON_OSX_FLAGS="-iframework data/redists -mmacosx-version-min=$MIN_MACOS_VER -stdlib=libc++" CFLAGS="$CFLAGS $COMMON_OSX_FLAGS" CPPFLAGS="$CPPFLAGS $COMMON_OSX_FLAGS" CXXFLAGS="$CXXFLAGS $COMMON_OSX_FLAGS" if test $WORD_LEN = 32; then CUDA_FLAGS="$CUDA_FLAGS -Xcompiler -Wno-error=unused-command-line-argument-hard-error-in-future" fi LDFLAGS="$LDFLAGS $COMMON_OSX_FLAGS -headerpad_max_install_names" OBJS="$OBJS src/utils/autorelease_pool.o" fi if test $system = Windows; then NET_LIBS="-lsetupapi -lws2_32 -liphlpapi -loleaut32" LIBS="$LIBS $NET_LIBS" AC_CHECK_FUNCS(SetThreadDescription) fi AC_SUBST(NET_LIBS) LINKER=$CXX AC_SUBST(LINKER) AC_SUBST(LDFLAGS) AC_SUBST(CXXFLAGS) AC_ARG_ENABLE(depends-version-check, AS_HELP_STRING([--disable-depends-version-check], [Disable libraries version check]), [version_check=$enableval], [version_check=yes] ) build_default=auto AC_ARG_ENABLE(all, AS_HELP_STRING([--enable-all], [Enable or disable all features (default is auto)]), [build_default=$enableval], [build_default=auto] ) if test $system = MacOSX -a \( $os_version_major -lt 11 \) -a $version_check = yes then AC_MSG_WARN([*** Only OS X versions 10.7 and higher are supported.]) HM_VERSION_WARNING AC_MSG_ERROR([Exiting due to unsatisfied dependency.]) fi if test $system = MacOSX -o $system = Linux then CFLAGS="$CFLAGS -fPIC" CXXFLAGS="$CXXFLAGS -fPIC" CUDA_FLAGS="$CUDA_FLAGS -Xcompiler -fPIC" CU_OBJ_SUFFIX="o" else # Windows if test $WORD_LEN = 32; then CUDA_FLAGS="-m32" fi CU_OBJ_SUFFIX="lib" fi AC_SUBST(CUDA_FLAGS) AC_ARG_VAR([ARCH], [Architecture to build for]) if test $target_cpu = x86_64 -o $target_cpu = i686 then test -z "$ARCH" && ARCH="-msse4.1" fi CFLAGS="$CFLAGS $ARCH" CXXFLAGS="$CXXFLAGS $ARCH" LDFLAGS="$LDFLAGS $ARCH" if expr "$CFLAGS" : '.*-O' >/dev/null; then OFAST="" else OFAST="-Ofast" fi AC_SUBST(OFAST) AC_CHECK_HEADERS([termios.h]) # Adds the module to UltraGrid build system. # @param $1 name of the module, should be in format _ unless # sure that the modular build won't take place # @param $2 object files # @param $3 libraries AC_DEFUN([ADD_MODULE], [ TARGET="lib/ultragrid/ultragrid_"$1".so" LIB_OBJS=$LIB_OBJS" "$2 LIB_MODULES=$LIB_MODULES" "$3 AM_CONDITIONAL([IS_TARGET], [test x$1 != x]) AM_COND_IF([IS_TARGET], [ MODULES="$MODULES $TARGET" TARGETS="$TARGETS $TARGET: "$2" \$(MKDIR_P) lib/ultragrid \$(LINKER) \$(LDFLAGS) -shared -Wl,-soname,ultragrid_"$1.so" "$2" -o lib/ultragrid/ultragrid_"$1".so "$3" " ]) ]) # --------------------------------------------------------------------- # Dylib bundler # --------------------------------------------------------------------- if test $system = MacOSX; then AC_PATH_PROGS(DYLIBBUNDLER, dylibbundler, [true]) if test "$DYLIBBUNDLER" = true; then UG_MSG_WARN([Cannot find dylibbundler. We cannot put libraries into a bundle so it probably will not be portable.]) else AC_MSG_CHECKING([dylibbundler version]) dyl_ver=$($DYLIBBUNDLER -V >/dev/null 2>&1 && dylibbundler -V | cut -d\ -f2 || echo unknown) AC_MSG_RESULT($dyl_ver); if test $dyl_ver = unknown || expr "$dyl_ver" \<= 2 >/dev/null; then UG_MSG_WARN([Original dylib bundler detected, recommending v2 instead (https://github.com/SCG82/macdylibbundler)]) fi fi fi AC_SUBST(DYLIBBUNDLER) # ------------------------------------------------------------------------------------------------- # Additional macros # ------------------------------------------------------------------------------------------------- AC_DEFUN([CUDA_MESSAGE], [ if test -z "$cuda_msg_defined" -a $system != Windows; then POST_COMPILE_MSG="$POST_COMPILE_MSG\n***\nYou have compiled in sort of CUDA code.\nIn order to use use it compression and \ decompression, you will need to have CUDA libraries visible to your OS.\n\ If not done so, you can accomplish this by adding line:\n\ export LD_LIBRARY_PATH=$CUDA_LIB_PATH:\\\$\$LD_LIBRARY_PATH\n\ to your .bashrc file (in home directory). To take effect immediatelly, you will need to enter:\n\ exec bash\n***\n" cuda_msg_defined=yes fi ]) AC_DEFUN([DEFINE_CUDA], [ if test -z "$cuda_var_defined"; then AC_DEFINE([HAVE_CUDA], [1], [CUDA is present on the system]) if test $system = Windows; then # It is twice by intent - as an object to force dependency # (== build the object), as a lib to be at the end of the # link list (it is a library) in MSW. TODO: make it prettier # somehow. The same applies also for other CUDA objs/libs. CUDA_COMMON_OBJ=src/cuda_wrapper.$CU_OBJ_SUFFIX CUDA_COMMON_LIB=src/cuda_wrapper.$CU_OBJ_SUFFIX DLL_LIBS="$DLL_LIBS src/cuda_wrapper.dll" else CUDA_COMMON_OBJ=src/cuda_wrapper.$CU_OBJ_SUFFIX CUDA_COMMON_LIB= fi cuda_var_defined=yes fi ]) AC_SUBST(DLL_LIBS) if test $system = Windows then AC_MSG_CHECKING([if_nametoindex]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include ]], [[ if_nametoindex("eth");]] )], HAVE_IF_NAMETOINDEX=yes, HAVE_IF_NAMETOINDEX=no) AC_MSG_RESULT([$HAVE_IF_NAMETOINDEX]) if test $HAVE_IF_NAMETOINDEX = yes; then AC_DEFINE([HAVE_IF_TONAMEINDEX], 1, [Function if_nametoindex is present.]) fi else AC_CHECK_FUNCS(if_nametoindex) fi AC_CHECK_FUNCS(usleep) AC_CHECK_FUNCS(strtok_r) AC_CHECK_FUNCS(drand48) if test $ac_cv_func_drand48 = no then AC_DEFINE([NEED_DRAND48], 1, [We need custom implementation of drand48.]) fi # --------------------------------------------------------------------- # Common shell utility functions # --------------------------------------------------------------------- # Be careful about [] m4 processing - either use quadrigraphs or enclose macro with additional [] # remove redundant spaces from argument (multiplied, leading, trailing) [compact_spaces_pipe() { sed -e 's/ */ /g' -e 's/^ //' -e 's/ $//' ;}] [compact_spaces() { echo "$1" | compact_spaces_pipe ;}] # remove "-mwindows" from lib flags obtained with pkg-config # because it causes output to be scratched by cmd/pwsh (but # not MSYS2 terminal) remove_mwindows() { echo "$1" | sed 's/-mwindows//' | compact_spaces_pipe } # ------------------------------------------------------------------------------------------------- # GCC-specific warning flags if test "$GCC" = yes then CFLAGS="$CFLAGS -pipe -W -Wcast-qual -Wcast-align -Wbad-function-cast -Wmissing-prototypes -Wmissing-declarations" CXXFLAGS="$CXXFLAGS -pipe -W -Wcast-qual -Wcast-align -Wmissing-declarations" fi # ------------------------------------------------------------------------------------------------ # Dynamic libraries stuff # build_libraries=no AC_ARG_ENABLE(plugins, AS_HELP_STRING([--enable-plugins], [build modules as libraries (default is off)]), [build_libraries=$enableval]) if test "$build_libraries" = yes then if test "$system" = "Linux" then LIBS="$LIBS -ldl" LDFLAGS="$LDFLAGS -rdynamic" else UG_MSG_WARN([Building libraries is not supported with other system than Linux]) build_libraries=no fi AC_DEFINE([BUILD_LIBRARIES], [1], [Build drivers as a standalone libraries]) fi # ------------------------------------------------------------------------------------------------- # Check for libraries AC_SEARCH_LIBS(socket, socket) AC_SEARCH_LIBS(inet_addr, nsl) AC_CHECK_LIB(rt, timer_create) AC_CHECK_FUNC(sin, MATHLIBS="", MATHLIBS="-lm") AC_SUBST(MATHLIBS) # ------------------------------------------------------------------------------------------------- # See if this system supports sched_setscheduler() use_rt=no AC_ARG_ENABLE(rt, AS_HELP_STRING([--enable-rt], [enable RT priority]), [use_rt=$enableval]) if test "$use_rt" = "yes"; then AC_CHECK_FUNCS(sched_setscheduler) AC_DEFINE([USE_RT], [1], [We use RT priority]) fi # ------------------------------------------------------------------------------------------------- # Try to find the pthread library... case "$host" in *-*-freebsd4*) CFLAGS="$CFLAGS -pthread" ;; *) AC_CHECK_LIB(pthread, pthread_create, LIBS="$LIBS -lpthread", AC_MSG_ERROR([Require POSIX thread])) ;; esac # ------------------------------------------------------------------------------------------------- debug_output=no profile=no ipv6=yes AC_ARG_ENABLE(profile, [ --enable-profile enable profiling], [if test $enableval = yes then if test "$GCC" = yes then CFLAGS="$CFLAGS -pg" profile=yes else AC_MSG_ERROR([Do not know how to enable profiling for $CC]) fi fi]) AC_ARG_ENABLE(debug, [ --enable-debug enable debug messages and code], [if test $enableval = yes then AC_DEFINE([DEBUG], [1], [We build with debug messages]) debug_output=yes fi]) AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--disable-ipv6], [disable ipv6]), [if test $enableval = no then ipv6=no fi]) if test "$ipv6" != no then AC_DEFINE([HAVE_IPv6], [1], [Enable IPv6 support]) fi if command -v realpath > /dev/null; then srcdir_abs=`realpath $srcdir` else srcdir_abs=`python -c 'import os; print(os.path.realpath("'$srcdir'"))'` fi AC_SUBST(srcdir_abs) # ---------------------------------------------------------------------- # environment variables # ---------------------------------------------------------------------- AC_ARG_VAR([AJA_DIRECTORY], [Directory to AJA NTV2 SDK.]) AC_ARG_VAR([BLUE_LATEST_SDK], [Placement of Bluefish444 SDK.]) AC_ARG_VAR([CINEFORM_DIRECTORY], [Directory to Cineform SDK.]) AC_ARG_VAR([CUDA_PATH], [Directory of your Nvidia toolkit instalation.]) AC_ARG_VAR([DELTACAST_DIRECTORY], [Placement of VideoMasterHD directory (Deltacast).]) AC_ARG_VAR([DVS_DIRECTORY], [Path to DVS installation.]) AC_ARG_VAR([GENICAM_GENTL64_PATH], [XIMEA SDK library path]) AC_ARG_VAR([NTV2_ROOT], [Directory to AJA NTV2 SDK (ends with ntv2projects).]) AC_ARG_VAR([SAGE_DIRECTORY], [Directory of your SAGE installation.]) # ------------------------------------------------------------------------------------------------- # GL common # ------------------------------------------------------------------------------------------------- AC_ARG_ENABLE(gl, [ --disable-gl disable all OpenGL stuff (default is auto)] [ Requires: glew gl (Linux + Win), none (macOS)], [gl_req=$enableval], [gl_req=$build_default] ) OPENGL=no SAVED_LIBS=$LIBS AC_CHECK_HEADER(GL/gl.h) AC_CHECK_HEADER(GL/glew.h) AC_CHECK_HEADER(GL/glx.h) AC_CHECK_LIB(GL, glBindTexture) AC_CHECK_LIB(GL, glXCreateNewContext) AC_CHECK_LIB(GLEW, glewInit) AC_CHECK_LIB(glew32, glewInit) AC_CHECK_LIB(X11, XCreateWindow) LIBS=$SAVED_LIBS GL_COMMON_OBJ="src/gl_context.o" if test "$ac_cv_header_GL_gl_h" = yes -a \ "$ac_cv_lib_GL_glBindTexture" = yes then HAVE_GL=yes fi if test "$ac_cv_header_GL_glew_h" = yes -a \ \( "$ac_cv_lib_GLEW_glewInit" = yes -o "$ac_cv_lib_glew32_glewInit" = yes \) then HAVE_GLEW=yes fi # Linux if test "$system" = Linux -a \ "$HAVE_GL" = yes -a \ "$HAVE_GLEW" = yes -a \ "$ac_cv_header_GL_glx_h" = yes -a \ "$ac_cv_lib_GL_glXCreateNewContext" = yes -a \ "$ac_cv_lib_X11_XCreateWindow" = yes then OPENGL=yes OPENGL_LIB="-lGLEW -lGL -lX11" GL_COMMON_OBJ="$GL_COMMON_OBJ src/glx_common.o src/x11_common.o" fi # Mac if test "$system" = MacOSX then OPENGL=yes OPENGL_LIB="-framework OpenGL -framework Cocoa" GL_COMMON_OBJ="$GL_COMMON_OBJ src/mac_gl_common.o" fi # Win32 if test "$system" = Windows -a "$HAVE_GLEW" = yes then OPENGL=yes GL_COMMON_OBJ="$GL_COMMON_OBJ src/win32_gl_common.o" OPENGL_LIB="-lopengl32 -lglew32 -lgdi32" fi if test $gl_req = no; then OPENGL=no GL_COMMON_OBJ= OPENGL_LIB= fi if test $gl_req = yes -a $OPENGL = no; then AC_MSG_ERROR([OpenGL stuff requested but dependencies were not found.]) fi # ------------------------------------------------------------------------------------------------- # Do we have FireWire/DV support? case "$host_os" in *freebsd*) AC_CHECK_HEADER(dev/firewire/firewire.h,[ AC_DEFINE([HAVE_FIREWIRE_DV_FREEBSD], [1], [We have Firewire DV]) ]) ;; esac # This should be conditional on finding libdv AC_DEFINE([HAVE_DV_CODEC], [1], [We have libdv]) # ------------------------------------------------------------------------------------------------- # Try to find the SDK for the DVS cards dvs=no dvs_req=$build_default AC_ARG_ENABLE(dvs, [ --disable-dvs disable DVS (default is auto)] [ Requires: DVS_SDK], [dvs_req=$enableval]) case "$system" in MacOSX) DVS_SDK_SUBDIR="universal" ;; Linux) DVS_SDK_SUBDIR="linux-x86_64" ;; Windows) DVS_SDK_SUBDIR="win32" ;; esac if test -n "$DVS_DIRECTORY" then DVS_HDR_PATH=$DVS_DIRECTORY/development/header DVS_LIB=$DVS_DIRECTORY/${DVS_SDK_SUBDIR}/lib else DVS_HDR_PATH=sdk4.0.1.17/development/header DVS_LIB=sdk4.0.1.17/${DVS_SDK_SUBDIR}/lib fi AC_ARG_WITH(dvs, [ --with-dvs=DIR specify location of DVS SDK], [DVS_HDR_PATH=$withval/development/header DVS_LIB=$withval/${DVS_SDK_SUBDIR}/lib], ) SAVED_CFLAGS=$CFLAGS SAVED_CPPFLAGS=$CPPFLAGS CFLAGS="$CFLAGS -I${DVS_HDR_PATH}" CPPFLAGS="$CPPFLAGS -I${DVS_HDR_PATH}" AC_CHECK_HEADER(dvs_clib.h, FOUND_DVS_H=yes, FOUND_DVS_H=no) CFLAGS=$SAVED_CFLAGS CPPFLAGS=$SAVED_CPPFLAGS SAVED_LIBS=$LIBS if test $system = MacOSX then LIBS="$LIBS -framework IOKit" fi AC_CHECK_LIB(dvsoem, sv_open, FOUND_DVS_L=yes, FOUND_DVS_L=no, -L${DVS_LIB}) LIBS=$SAVED_LIBS if test $dvs_req != no -a $FOUND_DVS_H = yes -a $FOUND_DVS_L = yes then DVS_INC=-I${DVS_HDR_PATH} DVS_LIB="-L${DVS_LIB} -ldvsoem" if test $system = Linux; then DVS_LIB="$DVS_LIB -ldl" fi DVS_CAP_OBJ="src/video_capture/dvs.o" DVS_DISP_OBJ="src/video_display/dvs.o" AC_DEFINE([HAVE_DVS], [1], [Build with DVS support]) DVS_LIB="$DVS_LIB" if test $system = MacOSX then DVS_LIB="$DVS_LIB -framework IOKit" fi ADD_MODULE("vidcap_dvs", "$DVS_CAP_OBJ", "$DVS_LIB") ADD_MODULE("display_dvs", "$DVS_DISP_OBJ", "$DVS_LIB") INC="$INC $DVS_INC" dvs=yes fi if test $dvs_req = yes -a $dvs = no; then AC_MSG_ERROR([DVS not found.]) fi # ------------------------------------------------------------------------------------------------- # Blackmagic stuff DECKLINK_OBJ= DECKLINK_INC= DECKLINK_LIB= DECKLINK_PATH= decklink=no decklink_req=$build_default AC_ARG_ENABLE(decklink, [ --disable-decklink disable DeckLink (default is auto)] [ Requires: DesktopVideo], [decklink_req=$enableval]) DECKLINK_INC=$srcdir/ext-deps/DeckLink case "$system" in MacOSX) DECKLINK_INC=$DECKLINK_INC/Mac OLD_LIBS=$LIBS LIBS="$LIBS -framework CoreFoundation" AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "$DECKLINK_INC/DeckLinkAPI.h" ]], [[IDeckLinkIterator *deckLinkIter = CreateDeckLinkIteratorInstance();]])],FOUND_DECKLINK=yes,FOUND_DECKLINK=no) LIBS=$OLD_LIBS if test $FOUND_DECKLINK = yes; then DECKLINK_LIB="$DECKLINK_LIB -framework CoreFoundation" fi AC_LANG_POP(C++) ;; Windows) DECKLINK_INC=$DECKLINK_INC/Windows SAVED_LIBS=$LIBS LIBS="$LIBS -lole32" AC_LANG_PUSH(C++) AC_MSG_CHECKING([DeckLink usability]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include "$DECKLINK_INC/DeckLinkAPI_h.h" #include "$DECKLINK_INC/DeckLinkAPIVersion.h" #include ]], [[IDeckLinkIterator *deckLinkIter; CoCreateInstance(CLSID_CDeckLinkIterator, NULL, CLSCTX_ALL, IID_IDeckLinkIterator, (void **) deckLinkIter);]])],FOUND_DECKLINK=yes,FOUND_DECKLINK=no) LIBS=$SAVED_LIBS if test $FOUND_DECKLINK = yes; then DECKLINK_LIB="$DECKLINK_LIB -lole32" fi AC_MSG_RESULT([$FOUND_DECKLINK]) AC_LANG_POP(C++) ;; *) DECKLINK_INC=$DECKLINK_INC/Linux AC_CHECK_FILE(${DECKLINK_INC}/DeckLinkAPI.h, FOUND_DECKLINK_H=yes, FOUND_DECKLINK_H=no) AC_CHECK_FILE(${DECKLINK_INC}/DeckLinkAPIDispatch.cpp, FOUND_DECKLINK_SRC=yes, FOUND_DECKLINK_SRC=no) AC_CHECK_LIB(DeckLinkAPI, main, FOUND_DECKLINK_L=yes, FOUND_DECKLINK_L=no) #if test $FOUND_DECKLINK_H = yes -a $FOUND_DECKLINK_SRC = yes -a $FOUND_DECKLINK_L = yes; then if test $FOUND_DECKLINK_H = yes -a $FOUND_DECKLINK_SRC = yes; then FOUND_DECKLINK=yes DECKLINK_LIB="$DECKLINK_LIB -ldl" else FOUND_DECKLINK=no fi ;; esac if test $decklink_req != no -a $FOUND_DECKLINK = yes then DECKLINK_PATH=${DECKLINK_INC} DECKLINK_INC=-I${DECKLINK_INC} DECKLINK_CAP_OBJ="src/blackmagic_common.o src/video_capture/decklink.o" DECKLINK_DISP_OBJ="src/blackmagic_common.o src/video_display/decklink.o" DECKLINK_SOUND_PLAY_OBJ="src/blackmagic_common.o src/audio/playback/decklink.o" if test $system = "Windows"; then OBJS="$OBJS src/video_capture/DeckLinkAPI_i.o" else OBJS="$OBJS src/video_capture/DeckLinkAPIDispatch.o" fi AC_DEFINE([HAVE_DECKLINK], [1], [Build with DeckLink support]) ADD_MODULE("vidcap_decklink", "$DECKLINK_CAP_OBJ", "$DECKLINK_LIB") ADD_MODULE("display_decklink", "$DECKLINK_DISP_OBJ", "$DECKLINK_LIB") ADD_MODULE("aplay_decklink", "$DECKLINK_SOUND_PLAY_OBJ", "$DECKLINK_LIB") decklink=yes INC="$INC $DECKLINK_INC" else DECKLINK_PATH= fi if test $decklink_req = yes -a $decklink = no; then AC_MSG_ERROR([DeckLink not found.]) fi AC_SUBST(DECKLINK_PATH) # ------------------------------------------------------------------------------------------------- # gpustitch stuff # ------------------------------------------------------------------------------------------------- GPUSTITCH_OBJ= GPUSTITCH_INC= GPUSTITCH_LIB= GPUSTITCH_PATH= gpustitch=no gpustitch_req=auto AC_ARG_ENABLE(gpustitch, [ --disable-gpustitch disable gpustitch (default is auto)] [ Requires: CUDA gpustitch], [gpustitch_req=$enableval]) PKG_CHECK_MODULES([LIBGPUSTITCH], [libgpustitch >= 0.0.1 ], [found_gpustitch=yes], [found_gpustitch=no]) SAVED_LIBS=$LIBS LIBS="$LIBS -lgpustitch" AC_CHECK_HEADER([libgpustitch/stitcher.hpp]) LIBS=$SAVED_LIBS if test "$ac_cv_header_libgpustitch_stitcher_hpp" != yes then found_gpustitch=no else if test "$found_gpustitch" != yes then GPUSTITCH_LIB="$GPUSTITCH_LIB -lgpustitch" found_gpustitch=yes fi fi if test "$gpustitch_req" != no -a \ "$found_gpustitch" = yes -a \ "$FOUND_CUDA" = yes then gpustitch=yes GPUSTITCH_INC="$GPUSTITCH_INC $LIBGPUSTITCH_CFLAGS" GPUSTITCH_LIB="$GPUSTITCH_LIB $LIBGPUSTITCH_LIBS" GPUSTITCH_OBJ="src/video_capture/gpustitch.o src/utils/cuda_pix_conv.$CU_OBJ_SUFFIX $CUDA_COMMON_OBJ" AC_DEFINE([HAVE_GPUSTITCH], [1], [Build with GPUSTITCH support]) ADD_MODULE("vidcap_gpustitch", "$GPUSTITCH_OBJ", "$GPUSTITCH_LIB") INC="$INC $GPUSTITCH_INC" CUDA_MESSAGE fi if test $gpustitch_req = yes -a $gpustitch = no; then AC_MSG_ERROR([GPUSTITCH not found]); fi # ------------------------------------------------------------------------------------------------- # Bluefish444 stuff # ------------------------------------------------------------------------------------------------- BLUEFISH444_PATH= BLUEFISH444_CAP_OBJ= BLUEFISH444_DISP_OBJ= BLUEFISH444_INC= BLUEFISH444_LIB= bluefish444=no blue_audio=no AC_ARG_ENABLE(bluefish444, [ --disable-bluefish444 disable Bluefish444 suppport (default is auto)] [ Requires: bluefish444_SDK], [bluefish444_req=$enableval], [bluefish444_req=$build_default] ) BLUEFISH444_PATH=$BLUE_LATEST_SDK AC_ARG_WITH(bluefish444, [ --with-bluefish444=DIR specify location of Bluefish444], [BLUEFISH444_PATH=$withval ]) SAVED_LIBS=$LIBS SAVED_CXXFLAGS=$CXXFLAGS SAVED_CPPFLAGS_SAVE=$CPPFLAGS if test -n "$BLUEFISH444_PATH"; then if test $system = Linux; then BLUEFISH444_INC="-I$BLUEFISH444_PATH/build/inc" BLUEFISH444_LIB="-L$BLUEFISH444_PATH/build/lib" elif test $system = Windows; then BLUEFISH444_INC="-I$BLUEFISH444_PATH/inc" BLUEFISH444_LIB="-L$BLUEFISH444_PATH/lib/win" fi fi if test $WORD_LEN -eq 64; then BLUEFISH444_LIB_NAME=BlueVelvetC64 else BLUEFISH444_LIB_NAME=BlueVelvetC fi AC_LANG_PUSH(C++) BLUE_L=no BLUE_H=no CPPFLAGS="$CPPFLAGS $BLUEFISH444_INC" CXXFLAGS="$CXXFLAGS $BLUEFISH444_INC" LIBS="$LIBS $BLUEFISH444_LIB" AC_CHECK_HEADERS([BlueVelvetC.h], [BLUE_H=yes], [BLUE_H=no]) AC_CHECK_LIB($BLUEFISH444_LIB_NAME, bfcFactory, [BLUE_L=yes], [BLUE_L=no]) if test $BLUE_H = yes -a $BLUE_L = yes -a $bluefish444_req != no then BLUEFISH444_LIB="$BLUEFISH444_LIB -l$BLUEFISH444_LIB_NAME" BLUEFISH444_CAP_OBJ="src/video_capture/bluefish444.o" BLUEFISH444_DISP_OBJ="src/video_display/bluefish444.o" AC_DEFINE([HAVE_BLUEFISH444], [1], [Build with Bluefish444 support]) ADD_MODULE("vidcap_bluefish444", "$BLUEFISH444_CAP_OBJ", "$BLUEFISH444_LIB") ADD_MODULE("display_bluefish444", "$BLUEFISH444_DISP_OBJ", "$BLUEFISH444_LIB") INC="$INC $BLUEFISH444_INC" bluefish444=yes fi AC_LANG_POP(C++) LIBS=$SAVED_LIBS CXXFLAGS=$SAVED_CXXFLAGS CPPFLAGS=$SAVED_CPPFLAGS_SAVE if test $bluefish444_req = yes -a $bluefish444 = no; then AC_MSG_ERROR([Bluefish444 not found]); fi # ------------------------------------------------------------------------------------------------- # AJA stuff # ------------------------------------------------------------------------------------------------- AJA_CXXFLAGS= AJA_INC= AJA_LIB= AJA_CAP_OBJ= AJA_PATH= aja=no AC_ARG_ENABLE(aja, [ --disable-aja disable AJA suppport (default is auto)] [ Requires: NTV2_SDK], [aja_req=$enableval], [aja_req=$build_default]) if test -n "$NTV2_ROOT"; then AJA_PATH=$NTV2_ROOT/.. fi if test -n "$AJA_DIRECTORY"; then AJA_PATH=$AJA_DIRECTORY fi AC_ARG_WITH(aja, [ --with-aja=DIR specify location of NTV2], [AJA_PATH=$withval ]) # In lines below, there is a compatibility check for NTV2 12.x (Linux only). # For macOS, only NTV2 13 is checked/supported. if test $system = Linux then if test -n "$AJA_PATH" then # NTV2 SDK 12.x AC_CHECK_FILES(${AJA_PATH}/lib/libaja.a ${AJA_PATH}/lib/libajastuff.a, FOUND_LIBAJA=yes, FOUND_LIBAJA=no) # NTV2 SDK 13.x if test "$FOUND_LIBAJA" = no; then AC_CHECK_FILES(${AJA_PATH}/lib/libajantv2.a, FOUND_LIBAJA=yes, FOUND_LIBAJA=no) NTV2_13=yes fi fi elif test $system = Windows then AC_CHECK_LIB(aja, display_aja_probe, [FOUND_LIBAJA=yes], [FOUND_LIBAJA=no]) else # MacOSX AC_CHECK_LIB(ajantv2, main, [FOUND_LIBAJA=yes], [FOUND_LIBAJA=no]) if test "$FOUND_LIBAJA" = yes; then AC_CHECK_FILE(${AJA_PATH}/ajalibraries/ajantv2/includes/ajatypes.h, FOUND_LIBAJA=yes, FOUND_LIBAJA=no) fi fi if test "$aja_req" != no -a "$FOUND_LIBAJA" = yes then aja=yes fi if test $aja = yes -a $system = Windows; then ADD_MODULE("aja", "src/aja_win32_stub.o", "-laja") elif test $aja = yes # Linux and macOS then if test $system = Linux -a "$NTV2_13" != yes then AJA_INC="$AJA_INC -I${AJA_PATH}/ntv2projects/classes -I${AJA_PATH}/ajaapi -I${AJA_PATH}/ntv2projects/includes -I${AJA_PATH}/ntv2projects/democlasses" AJA_LIB="${AJA_PATH}/lib/libaja.a ${AJA_PATH}/lib/libajastuff.a" else # ntv2 13.x AJA_INC="$AJA_INC -I${AJA_PATH}/ajalibraries/ajantv2/includes -I${AJA_PATH}/ajalibraries/ajantv2/src/mac -I${AJA_PATH}/ajaapps/crossplatform/demoapps -I${AJA_PATH}/ajalibraries -I${AJA_PATH}/ajaapps/crossplatform/demoapps/ntv2capture" fi if test $system = Linux then AJA_CXXFLAGS="-DAJALinux -DAJA_LINUX" if test "$NTV2_13" = yes then AJA_INC="$AJA_INC -I${AJA_PATH}/ajalibraries/ajantv2/src/lin" AJA_LIB="${AJA_PATH}/lib/libajantv2.a" fi else # mac AJA_CXXFLAGS="-DAJAMac -DAJA_MAC" AJA_LIB="-lajantv2" fi AJA_CAP_OBJ="src/video_capture/aja.o" AJA_DISP_OBJ="src/video_display/aja.o" AC_DEFINE([HAVE_AJA], [1], [Build with AJA support]) ADD_MODULE("aja", "src/aja_common.o $AJA_CAP_OBJ $AJA_DISP_OBJ", "$AJA_LIB") INC="$INC $AJA_INC" CXXFLAGS="$CXXFLAGS $AJA_CXXFLAGS" fi if test $aja_req = yes -a $aja = no; then AC_MSG_ERROR([AJA not found]); fi # ------------------------------------------------------------------------------------------------- # holepunch stuff LIBJUICE_PATH= LIBJUICE_INC= LIBJUICE_LIB= libjuice=no AC_ARG_ENABLE(holepunch, AS_HELP_STRING([--disable-holepunch], [disable holepunch suppport (default is auto)] [Requires: libjuice]), [libjuice_req=$enableval], [libjuice_req=$build_default]) AC_CHECK_LIB(juice, juice_create, FOUND_LIBJUICE=yes, FOUND_LIBJUICE=no) LIBJUICE_LIB="-ljuice" if test "$libjuice_req" != no -a "$FOUND_LIBJUICE" = yes then libjuice=yes ADD_MODULE("holepunch", "src/utils/udp_holepunch.o", "$LIBJUICE_LIB") INC="$INC $LIBJUICE_INC" COMMON_FLAGS="$COMMON_FLAGS -DHAVE_LIBJUICE" fi if test $libjuice_req = yes -a $libjuice = no; then AC_MSG_ERROR([LIBJUICE not found]); fi # ------------------------------------------------------------------------------------------------- # DELTACAST stuff DELTACAST_PATH= DELTACAST_CAP_OBJ= DELTACAST_DISP_OBJ= DELTACAST_INC= DELTACAST_LIB= deltacast=no deltacast_found=no AC_ARG_ENABLE(deltacast, [ --disable-deltacast disable DELTACAST suppport (default is auto)] [ Requires: VideoMasterHD_SDK], [deltacast_req=$enableval], [deltacast_req=$build_default] ) DELTACAST_PATH=$DELTACAST_DIRECTORY AC_ARG_WITH(deltacast, [ --with-deltacast=DIR specify location of DELTACAST], [DELTACAST_PATH=$withval ]) if test $system = Linux -o $system = Windows then AC_LANG_PUSH(C++) if test -n "$DELTACAST_PATH" then CXXFLAGS_SAVE=$CXXFLAGS CXXFLAGS="$CXXFLAGS -I$DELTACAST_PATH/Include" CPPFLAGS_SAVE=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$DELTACAST_PATH/Include" fi if test $system = Windows; then EXTRA_HEADERS="#include " else EXTRA_HEADERS= fi AC_CHECK_HEADERS([VideoMasterHD_Core.h VideoMasterHD_Sdi.h VideoMasterHD_Sdi_Audio.h], [], [], [[$EXTRA_HEADERS #ifdef HAVE_VIDEOMASTERHD_CORE_H # include #endif #ifdef HAVE_VIDEOMASTERHD_SDI_H # include #endif ]]) SAVED_LIBS=$LIBS DELTACAST_LIB="-lvideomasterhd_audio -lvideomasterhd" if test -n "$DELTACAST_PATH"; then if test $ac_cv_sizeof_int_p -eq 8 -a $system = Linux then DELTACAST_LIB="$DELTACAST_LIB -L$DELTACAST_PATH/Library/x64" else DELTACAST_LIB="$DELTACAST_LIB -L$DELTACAST_PATH/Library/x86" fi fi LIBS="$LIBS $DELTACAST_LIB" AC_MSG_CHECKING([DELTACAST library presence]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[$EXTRA_HEADERS # include # include # include ]], [[ VHD_OpenBoardHandle(0, (void **) 0, (void *) 0, 0); VHD_SlotExtractAudio(0, 0); VHD_LockSlotHandle(0, 0); ]])],FOUND_VHD_L=yes,FOUND_VHD_L=no) #AC_CHECK_LIB(videomasterhd_audio, VHD_GetNbSamples, [], [], [-lvideomasterhd]) LIBS=$SAVED_LIBS if test -n "$DELTACAST_PATH" then CXXFLAGS=$CXXFLAGS_SAVE CPPFLAGS=$CPPFLAGS_SAVE fi AC_MSG_RESULT([$FOUND_VHD_L]) AC_LANG_POP(C++) if test "$ac_cv_header_VideoMasterHD_Core_h" = yes -a "$ac_cv_header_VideoMasterHD_Sdi_h" = yes -a "$ac_cv_header_VideoMasterHD_Sdi_Audio_h" = yes \ -a "$FOUND_VHD_L" = yes; then deltacast_found=yes fi else # OS X MY_CHECK_FRAMEWORK([VideoMasterHD]) MY_CHECK_FRAMEWORK([VideoMasterHD_Audio]) AC_CHECK_HEADERS([VideoMasterHD/VideoMasterHD_Core.h]) if test "$ac_cv_header_VideoMasterHD_VideoMasterHD_Core_h" = yes -a $my_cv_framework_VideoMasterHD = yes -a $my_cv_framework_VideoMasterHD = yes; then deltacast_found=yes DELTACAST_LIB="$FRAMEWORK_VIDEOMASTERHD $FRAMEWORK_VIDEOMASTERHD_AUDIO" BIN_DEPS="${BIN_DEPS:+$BIN_DEPS }Frameworks/VideoMasterHD_Audio.framework Frameworks/VideoMasterHD.framework" fi fi if test $deltacast_req != no -a $deltacast_found = yes then if test -n "$DELTACAST_PATH" then DELTACAST_INC="-I$DELTACAST_PATH/Include" fi DELTACAST_CAP_OBJ="src/video_capture/deltacast.o src/video_capture/deltacast_dvi.o" DELTACAST_DISP_OBJ="src/video_display/deltacast.o" AC_DEFINE([HAVE_DELTACAST], [1], [Build with DELTACAST support]) ADD_MODULE("vidcap_deltacast", "$DELTACAST_CAP_OBJ", "$DELTACAST_LIB") ADD_MODULE("display_deltacast", "$DELTACAST_DISP_OBJ", "$DELTACAST_LIB") INC="$INC $DELTACAST_INC" deltacast=yes fi if test $deltacast_req = yes -a $deltacast = no; then AC_MSG_ERROR([Deltacast not found]); fi #---------------------------------------------------------------------- # XIMEA # --------------------------------------------------------------------- AC_ARG_ENABLE(ximea, [ --disable-ximea disable XIMEA suppport (default is auto)] [ Requires: XIMEA SDK], [ximea_req=$enableval], [ximea_req=$build_default] ) AC_ARG_ENABLE(ximea-runtime-linking, [ --disable-ximea-runtime-linking disable XIMEA suppport (default is enable), disabling may result in non-portable build], [ximea_link_runtime=$enableval], [ximea_link_runtime=yes] ) ximea=no if test $system = MacOSX; then MY_CHECK_FRAMEWORK([m3api]) if test $my_cv_framework_m3api = yes; then if test $ximea_link_runtime = no; then XIMEA_LIBS=$FRAMEWORK_M3API fi ximea=yes fi if test -z "$GENICAM_GENTL64_PATH"; then GENICAM_GENTL64_PATH="/Library/Frameworks/m3api.framework" fi XI_LIB_NAME="m3api" else if test $system = Linux; then XIAPI_PATH=${GENICAM_GENTL64_PATH:-/opt/XIMEA/lib} XI_LIB_EXT=".so" XI_LIB_NAME="m3api" XI_LIB_PREF="lib" XIMEA_CFLAGS="-I$XIAPI_PATH/../include" else if test -d "$GENICAM_GENTL64_PATH/../../API/xiAPI"; then # the env var contains actually something like "C:\XIMEA\GenTL Producer\64bit" XIAPI_PATH=$(realpath "$GENICAM_GENTL64_PATH/../../API/xiAPI") else XIAPI_PATH="C:/XIMEA/API/xiAPI" fi XI_LIB_EXT=".dll" XI_LIB_NAME="xiapi64" XIMEA_CFLAGS="-I$XIAPI_PATH" fi SAVED_CFLAGS=$CFLAGS SAVED_CPPFLAGS=$CPPFLAGS CFLAGS="$CFLAGS $XIMEA_CFLAGS" CPPFLAGS="$CPPFLAGS $XIMEA_CFLAGS" AC_CHECK_HEADERS([xiApi.h]) CFLAGS=$SAVED_CFLAGS if test $ximea_link_runtime = no; then XIMEA_LIBS="-L$XIAPI_PATH" SAVED_LIBS=$LIBS LIBS="$LIBS $XIMEA_LIBS" CPPFLAGS=$SAVED_CPPFLAGS AC_CHECK_LIB($XI_LIB_NAME, xiGetImage, HAVE_XI_L=yes, HAVE_XI_L=no) XIMEA_LIBS="-l$XI_LIB_NAME -L$XIAPI_PATH" LIBS=$SAVED_LIBS else HAVE_XI_L=yes fi if test $ximea_req != no -a $HAVE_XI_L = yes -a $ac_cv_header_xiApi_h = yes; then ximea=yes fi fi if test $ximea = yes -a $ximea_link_runtime = yes; then AC_DEFINE([XIMEA_RUNTIME_LINKING], [1], [Dynamically open XIMEA lib on runtime]) AC_DEFINE_UNQUOTED([XIMEA_LIBRARY_NAME], ["$XI_LIB_PREF$XI_LIB_NAME$XI_LIB_EXT"], [Name of the dynamic libarary]) AC_DEFINE_UNQUOTED([XIMEA_LIBRARY_PATH], ["$GENICAM_GENTL64_PATH"], [Path to the XI dynamic libarary]) fi if test $ximea = yes; then CFLAGS="$CFLAGS $XIMEA_CFLAGS" ADD_MODULE("vidcap_ximea", "src/video_capture/ximea.o", "$XIMEA_LIBS") fi if test $ximea_req = yes -a $ximea = no; then AC_MSG_ERROR([XIMEA SDK not found]); fi # ------------------------------------------------------------------------------------------------- # AV Foundation capture # ------------------------------------------------------------------------------------------------- avfoundation=no AC_ARG_ENABLE(avfoundation, AS_HELP_STRING([--disable-avfoundation], [enable AVFoundation support (default is enable on macOS)]), [avfoundation_req=$enableval], [avfoundation_req=auto] ) if test $system = MacOSX -a $avfoundation_req != no then AVFOUNDATION_LIB="-framework AppKit -framework AVFoundation -framework CoreMedia -framework CoreVideo" AC_DEFINE([HAVE_AVFOUNDATION], [1], [Build with AV Foundation support]) AVFOUNDATION_OBJ="src/video_capture/avfoundation.o" ADD_MODULE("", "$AVFOUNDATION_OBJ", "$AVFOUNDATION_LIB") avfoundation=yes fi # ------------------------------------------------------------------------------ # SDL1/2 Stuff # ------------------------------------------------------------------------------ sdl=no sdl_version=1 AC_ARG_ENABLE(sdl, AS_HELP_STRING([--enable-sdl], [enable SDL (any version; default is auto)]), [sdl_req=$enableval], [sdl_req=$build_default] ) AC_ARG_ENABLE(sdl1, [ --enable-sdl1 enable SDL1 (default is auto)] [ Requires: sdl >= 1.2.14 ], [sdl1_req=$enableval], [sdl1_req=$build_default] ) AC_ARG_ENABLE(sdl2, [ --enable-sdl2 enable SDL2 (disabled if SDL1 is enabled, auto otherwise)] [ Requires: sdl2 ], [sdl2_req=$enableval], [sdl2_req=$build_default] ) if test $sdl1_req = yes -a $sdl2_req = yes; then AC_MSG_ERROR([Only one version of SDL (either 1 or 2) can be selected]); fi # if either of SDL versions was required, disable the other if test $sdl1_req = yes; then sdl2_req=no fi if test $sdl2_req = yes; then sdl1_req=no fi PKG_CHECK_MODULES([SDL1], [sdl], [found_sdl1=yes], [found_sdl1=no]) PKG_CHECK_MODULES([SDL2], [sdl2], [found_sdl2=yes], [found_sdl2=no]) if test $sdl1_req = yes -a $found_sdl1 = no; then AC_MSG_ERROR([SDL1 not found]); fi if test $sdl2_req = yes -a $found_sdl2 = no; then AC_MSG_ERROR([SDL2 not found]); fi # prefer SDL2 if test $sdl2_req != no -a $found_sdl2 = yes then SDL2_OBJ="src/video_display/sdl2.o" AC_DEFINE([HAVE_SDL2], [1], [Build with SDL2 support]) # on Win override libs from pkg-config because those contain # "-mwindows" which causes output to be scratched by cmd.exe # (but not MSYS2!) SDL2_LIBS=$(remove_mwindows "$SDL2_LIBS") ADD_MODULE("display_sdl2", "$SDL2_OBJ", "$SDL2_LIBS") SDL_LIB=$SDL2_LIBS INC="$INC $($PKG_CONFIG --cflags-only-I sdl2)" sdl_version=2 sdl=yes elif test $sdl1_req != no -a $found_sdl1 = yes then SDL1_OBJ="src/video_display/sdl.o src/x11_common.o" AC_DEFINE([HAVE_SDL], [1], [Build with SDL support]) ADD_MODULE("display_sdl", "$SDL1_OBJ", "$SDL1_LIBS") SDL_LIB="$SDL1_LIBS -lX11" # X11 for x11_common.o INC="$INC $($PKG_CONFIG --cflags-only-I sdl)" sdl_version=1 sdl=yes fi if test $sdl_req = yes -a $sdl = no; then AC_MSG_ERROR([SDL requested but found any version]); fi # ------------------------------------------------------------------------------ # GLM (OpenGL math library) # ------------------------------------------------------------------------------ GLM_INC= GLM_DIR=$srcdir/glm glm=no PKG_CHECK_MODULES([GLM], [glm], [FOUND_GLM=yes], [FOUND_GLM=no]) if test $FOUND_GLM = yes; then GLM_INC=$GLM_CFLAGS glm=yes elif test $cross_compile = no; then AC_CHECK_FILE([$GLM_DIR/glm/glm.hpp], [found_glm_hpp=yes], [found_glm_hpp=no]) if test $found_glm_hpp = yes; then glm=yes GLM_INC=-I$GLM_DIR fi fi # ------------------------------------------------------------------------------ # Panorama gl display # ------------------------------------------------------------------------------ panogl_disp=no AC_ARG_ENABLE(panogl_disp, [ --disable-panogl_disp disable gl panorama display (default is auto] [ Requires: sdl2 gl], [panogl_disp_req=$enableval], [panogl_disp_req=$build_default] ) if test $panogl_disp_req = yes; then if test $sdl = no -o $sdl_version != 2; then AC_MSG_ERROR([SDL2 not found]); fi if test $glm = no; then AC_MSG_ERROR([GLM not found]); fi fi if test $panogl_disp_req != no -a $sdl = yes -a $sdl_version = 2 -a $glm = yes then PANOGL_OBJ="src/video_display/pano_gl.o src/video_display/opengl_utils.o src/video_display/sdl_window.o" AC_DEFINE([HAVE_PANOGL_DISP], [1], [Build with 360 panorama disp support]) PANOGL_LIBS=$SDL_LIB ADD_MODULE("display_panogl", "$PANOGL_OBJ", "$PANOGL_LIBS") INC="$INC $GLM_INC" panogl_disp=yes fi # ------------------------------------------------------------------------------ # OpenXR VR gl display # ------------------------------------------------------------------------------ xrgl_disp=no AC_ARG_ENABLE(xrgl_disp, [ --disable-xrgl_disp disable OpenXR VR display (default is auto] [ Requires: sdl2 gl openxr], [xrgl_disp_req=$enableval], [xrgl_disp_req=$build_default] ) define(xrgl_deps, [openxr]) PKG_CHECK_MODULES([XRGLDISP], [xrgl_deps], [FOUND_XRGL_DEPS=yes], [FOUND_XRGL_DEPS=no]) if test $sdl = no -o $sdl_version != 2 -o $glm = no; then FOUND_XRGL_DEPS=no fi if test $xrgl_disp_req = yes -a $FOUND_XRGL_DEPS = no; then AC_MSG_ERROR([XRGL deps not found]); fi if test $xrgl_disp_req != no -a $FOUND_XRGL_DEPS = yes then XRGLDISP_OBJ="src/video_display/openxr_gl.o src/video_display/opengl_utils.o src/video_display/sdl_window.o" AC_DEFINE([HAVE_XRGL_DISP], [1], [Build with OpenXR VR disp support]) XRGLDISP_LIBS="$XRGLDISP_LIBS $SDL_LIB" ADD_MODULE("display_xrgl", "$XRGLDISP_OBJ", "$XRGLDISP_LIBS") INC="$INC $GLM_INC" xrgl_disp=yes fi # ------------------------------------------------------------------------------------------------- # OpenCV version detection # ------------------------------------------------------------------------------------------------- [remove_all_libs_but_opencv_core() { echo "$1" | sed -e 's/-lopencv_[a-z0-9_]*//g' -e 's/$/ -lopencv_core/' | compact_spaces_pipe ; } ] AC_ARG_ENABLE(opencv, AS_HELP_STRING([--disable-opencv], [disable all OpenCV code]), [opencv_req=$enableval], [opencv_req=$build_default]) PKG_CHECK_MODULES([OPENCV_4], [opencv4], [ AC_DEFINE([HAVE_OPENCV_4], [1], [Use OpenCV version 4]) OPENCV_MAJOR=4 OPENCV_LIBS=$OPENCV_4_LIBS OPENCV_CFLAGS=$OPENCV_4_CFLAGS ], [OPENCV_MAJOR=]) if test -z "$OPENCV_MAJOR"; then PKG_CHECK_MODULES([OPENCV_3], [opencv > 3.0], [ AC_DEFINE([HAVE_OPENCV_3], [1], [Use OpenCV version 3]) OPENCV_MAJOR=3 OPENCV_LIBS=$OPENCV_3_LIBS OPENCV_CFLAGS=$OPENCV_3_CFLAGS ], [OPENCV_MAJOR=]) fi if test -z "$OPENCV_MAJOR"; then PKG_CHECK_MODULES([OPENCV_2], [opencv > 2.3], [ AC_DEFINE([HAVE_OPENCV_2], [1], [Use OpenCV version 2]) OPENCV_MAJOR=2 OPENCV_LIBS=$OPENCV_2_LIBS OPENCV_CFLAGS=$OPENCV_2_CFLAGS ], [OPENCV_MAJOR=]) fi if test -n "$OPENCV_MAJOR" -a $opencv_req != "no"; then OPENCV_LIBS=$(remove_all_libs_but_opencv_core $OPENCV_LIBS) HAVE_OPENCV=yes opencv="yes" opencv_version=" (version: $OPENCV_MAJOR)" # opencv_imgproc is commonly needed so make the check here SAVED_LIBS=$LIBS LIBS="$LIBS $OPENCV_LIBS" AC_CHECK_LIB(opencv_imgproc, cvAcc) FOUND_OPENCV_IMGPROC=$ac_cv_lib_opencv_imgproc_cvAcc LIBS=$SAVED_LIBS else HAVE_OPENCV=no opencv="no" opencv_version= fi # ------------------------------------------------------------------------------------------------- # RTSP capture stuff # ------------------------------------------------------------------------------------------------- RTSP_INC= RTSP_LIBS= RTSP_OBJ= rtsp=no define(rtsp_deps, [glib-2.0 >= 2.24.1 libcurl]) AC_ARG_ENABLE(rtsp, [ --disable-rtsp disable RTSP support (default is auto)] [ Requires: rtsp_deps], [rtsp_req=$enableval], [rtsp_req=$build_default] ) PKG_CHECK_MODULES([RTSP], [rtsp_deps], FOUND_RTSP_DEPS=yes, FOUND_RTSP_DEPS=no) if test $rtsp_req != no -a $FOUND_RTSP_DEPS = yes then AC_DEFINE([HAVE_RTSP], [1], [RTSP capture build with curl ang glib support]) SAVED_CFLAGS=$CFLAGS CFLAGS="$CFLAGS ${RTSP_CFLAGS}" SAVED_CXXFLAGS=$CXXFLAGS CXXFLAGS="$CXXFLAGS ${RTSP_CFLAGS}" RTSP_INC= RTSP_OBJ="src/utils/h264_stream.o src/video_capture/rtsp.o src/rtp/rtpdec_h264.o" ADD_MODULE("vidcap_rtsp", "$RTSP_OBJ", "$RTSP_LIBS") INC="$INC $RTSP_INC" rtsp=yes fi if test $rtsp_req = yes -a $rtsp = no; then AC_MSG_ERROR([rtsp not found, check curl or glib dependencies...]); fi # ------------------------------------------------------------------------------------------------- # ------------------------------------------------------------------------------------------------- # RTSP server stuff # TODO: create pkg-config search path for liblivemedia-dev (create live555.pc file) # ------------------------------------------------------------------------------------------------- RTSP_SERVER_INC= RTSP_SERVER_OBJ= rtsp_server=no livemedia=no livemedia_prefix=/usr AC_ARG_ENABLE(rtsp_server, [ --enable-rtsp-server enables RTSP server support (default is auto)] [ Requires: live555 (<= 2015)], [rtsp_server_req=$enableval], [rtsp_server_req=$build_default] ) AC_ARG_WITH(live555, [ --with-live555=DIR specify location of live555], [livemedia_prefix=$withval ]) AC_LANG_PUSH(C++) RTSP_SERVER_FLAGS="-I$livemedia_prefix/include/groupsock -I$livemedia_prefix/include/liveMedia -I$livemedia_prefix/include/BasicUsageEnvironment -I$livemedia_prefix/include/UsageEnvironment" SAVED_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $RTSP_SERVER_FLAGS" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include ]], [[ #if LIVEMEDIA_LIBRARY_VERSION_INT > 1438905600 #error "Unsuppored live555 version (too new)" #endif ]] )], FOUND_LIVE_H=yes, [echo "liveMedia (live555 library) headers not found or wrong version (< 2015 needed)"; FOUND_LIVE_H=no]) CPPFLAGS=$SAVED_CPPFLAGS AC_LANG_POP(C++) if test $rtsp_server_req != no -a $FOUND_LIVE_H = yes then AC_DEFINE([HAVE_RTSP_SERVER], [1], [RTSP server build with live555 support]) CFLAGS="$CFLAGS $RTSP_SERVER_FLAGS" CXXFLAGS="$CXXFLAGS $RTSP_SERVER_FLAGS" RTSP_SERVER_LIBS="-lliveMedia -lBasicUsageEnvironment -lUsageEnvironment -lgroupsock" RTSP_SERVER_OBJ="src/rtsp/c_basicRTSPOnlyServer.o src/rtsp/BasicRTSPOnlyServer.o src/rtsp/BasicRTSPOnlySubsession.o src/video_rxtx/h264_rtp.o" ADD_MODULE("video_rxtx_h264", "$RTSP_SERVER_OBJ", "$RTSP_SERVER_LIBS") rtsp_server=yes livemedia=yes fi if test $rtsp_server_req = yes -a $rtsp_server = no; then AC_MSG_ERROR([rtsp server not found, check live555 -livemedia lib- dependencies...]); fi # ---------------------------------------------------------------------- # SDP over HTTP # ---------------------------------------------------------------------- AC_ARG_ENABLE(sdp-http, [ --enable-sdp-http enables SDP/HTTP transport (default is auto)], [sdp_http_req=$enableval], [sdp_http_req=$build_default] ) sdp_http=no AC_CHECK_HEADERS([EmbeddableWebServer.h]) if test $sdp_http_req != no && test $ac_cv_header_EmbeddableWebServer_h = yes then AC_DEFINE([SDP_HTTP], 1, [Add support for SDP over HTTP]) sdp_http=yes fi if test $sdp_http_req = yes -a $sdp_http = no; then AC_MSG_ERROR([SDP over HTTP is currently not supported under MSW]); fi # ------------------------------------------------------------------------------------------------- # Resize stuff # ------------------------------------------------------------------------------------------------- RESIZE_LIBS= RESIZE_OBJ= resize=no AC_ARG_ENABLE(resize, [ --disable-resize disable resize capture filter (default is auto)] [ Requires: opencv], [resize_req=$enableval], [resize_req=$build_default] ) if test $resize_req != no && test "$HAVE_OPENCV" = yes && test "$FOUND_OPENCV_IMGPROC" = yes then CFLAGS="$CFLAGS ${OPENCV_CFLAGS}" CXXFLAGS="$CXXFLAGS ${OPENCV_CFLAGS}" RESIZE_OBJ="src/capture_filter/resize.o src/capture_filter/resize_utils.o" ADD_MODULE("vcapfilter_resize", "$RESIZE_OBJ", "$OPENCV_LIBS -lopencv_imgproc") resize=yes fi if test $resize_req = yes -a $resize = no; then AC_MSG_ERROR([OpenCV not found, may install OpenCV...?]); fi # ------------------------------------------------------------------------------------------------- # Blank stuff # ------------------------------------------------------------------------------------------------- BLANK_LIBS= BLANK_OBJ= blank=no define(blank_dep, libswscale) AC_ARG_ENABLE(blank, [ --disable-blank disable blank capture filter (default is auto)] [ Requires: blank_dep], [blank_req=$enableval], [blank_req=$build_default] ) PKG_CHECK_MODULES([BLANK], [blank_dep], FOUND_BLANK_DEP=yes, FOUND_BLANK_DEP=no) if test $FOUND_BLANK_DEP = no; then AC_CHECK_HEADERS([libswscale/swscale.h], AC_CHECK_LIB(swscale, sws_scale, FOUND_BLANK_DEP=yes)) if test $FOUND_BLANK_DEP = yes; then BLANK_LIBS='-lswscale' fi fi if test $blank_req != no -a $FOUND_BLANK_DEP = yes then CFLAGS="$CFLAGS ${BLANK_CFLAGS}" CXXFLAGS="$CXXFLAGS ${BLANK_CFLAGS}" BLANK_OBJ="src/capture_filter/blank.o" BLANK_OBJ="$BLANK_OBJ src/libavcodec_common.o" # get_ug_to_av_pixfmt() ADD_MODULE("vcapfilter_blank", "$BLANK_OBJ", "$BLANK_LIBS") blank=yes fi if test $blank_req = yes -a $blank = no; then AC_MSG_ERROR([Blank dep not found (libswscale)]); fi # ------------------------------------------------------------------------------------------------- # Testcard stuff # ------------------------------------------------------------------------------------------------- AC_ARG_ENABLE(testcard-extras, AS_HELP_STRING([--enable-testcard-extras[=mixer|ttf|all]], [enable testcard addons - audio and testcard2 (default is auto)] [This includes testcard2 (optionally with TTF) and sound support (mixer) for normal testcard.] [Requires: SDL(2)_mixer (optional) SDL(2)_ttf (optional)]), [testcard_extras_req=$enableval], [testcard_extras_req=$build_default] ) TESTCARD_OBJ="src/video_capture/testcard.o" TESTCARD_LIB= TESTCARD2_OBJ= TESTCARD2_LIB= testcard2_req=auto testcard_sdl_mixer_req=auto testcard_sdl_ttf_req=auto testcard2=no testcard_sdl_mixer=no testcard_sdl_ttf=no if test $testcard_extras_req = "no"; then testcard2_req=no testcard_sdl2_mixer_req=no testcard_sdl2_ttf_req=no fi if test $testcard_extras_req = "yes"; then testcard2_req=yes fi if expr $testcard_extras_req : '.*all' >/dev/null; then testcard_sdl_mixer_req=yes testcard_sdl_ttf_req=yes fi if expr $testcard_extras_req : '.*mixer' >/dev/null; then testcard_sdl_mixer_req=yes fi if expr $testcard_extras_req : '.*ttf' >/dev/null; then testcard_sdl_ttf_req=yes fi if test $testcard_sdl_mixer_req != no then if test $sdl_version -eq 1; then PKG_CHECK_MODULES([SDL_MIXER], [SDL_mixer], [FOUND_SDL_MIXER=yes], [FOUND_SDL_MIXER=no]) else PKG_CHECK_MODULES([SDL_MIXER], [SDL2_mixer], [FOUND_SDL_MIXER=yes], [FOUND_SDL_MIXER=no]) fi SDL_MIXER_LIBS=$(remove_mwindows "$SDL_MIXER_LIBS") if test "$FOUND_SDL_MIXER" = yes then AC_DEFINE([HAVE_LIBSDL_MIXER], [1], [Build testcard with SDL Mixer support]) TESTCARD_LIB="$SDL_MIXER_LIBS" fi fi TESTCARD_OBJ="src/video_capture/testcard.o" ADD_MODULE("vidcap_testcard", "$TESTCARD_OBJ", "$TESTCARD_LIB") if test $testcard2_req != no then TESTCARD2_OBJ="src/video_capture/testcard2.o" if test $sdl_version -eq 1; then PKG_CHECK_MODULES([SDL_TTF], [SDL_ttf], [FOUND_SDL_TTF=yes], [FOUND_SDL_TTF=no]) else PKG_CHECK_MODULES([SDL_TTF], [SDL2_ttf], [FOUND_SDL_TTF=yes], [FOUND_SDL_TTF=no]) fi SDL_TTF_LIBS=$(remove_mwindows "$SDL_TTF_LIBS") if test "$FOUND_SDL_TTF" = yes then TESTCARD2_LIB="$TESTCARD2_LIB $SDL_TTF_LIBS" AC_DEFINE([HAVE_LIBSDL_TTF], [1], [Build testcard2 with TTF support]) fi AC_DEFINE([HAVE_TESTCARD2], [1], [Build with testcard2 capture]) ADD_MODULE("vidcap_testcard2", "$TESTCARD2_OBJ", "$TESTCARD2_LIB") testcard2=yes fi if { test $testcard2_req = yes && test $testcard2 = no ;} \ || { test $testcard_sdl_mixer_req = yes && test $FOUND_SDL_MIXER = no ;} \ || { test $testcard_sdl_ttf_req = yes && test $FOUND_SDL_TTF = no ;} ; then AC_MSG_ERROR([Testcard2 dependencies not found]) fi # ------------------------------------------------------------------------------------------------- # libavcodec hw-accelerated decoding support # ------------------------------------------------------------------------------------------------- lavc_hwacc_common=no lavc_hwacc_vdpau=no lavc_hwacc_vaapi=no lavc_hwacc_rpi4=no define(lavc_hwacc_common_dep, libavcodec libavutil >= 55.22.1) define(lavc_hwacc_vdpau_dep, lavc_hwacc_common_dep vdpau) define(lavc_hwacc_vaapi_dep, lavc_hwacc_common_dep libva) AC_ARG_ENABLE(lavc-hw-accel-vdpau, [ --disable-lavc-hw-accel-vdpau disable lavc-hw-accel-vdpau (default is auto)] [ Requires: lavc_hwacc_vdpau_dep], [lavc_hwacc_vdpau_req=$enableval], [lavc_hwacc_vdpau_req=$build_default] ) AC_ARG_ENABLE(lavc-hw-accel-vaapi, [ --disable-lavc-hw-accel-vaapi disable lavc-hw-accel-vaapi (default is auto)] [ Requires: lavc_hwacc_vaapi_dep], [lavc_hwacc_vaapi_req=$enableval], [lavc_hwacc_vaapi_req=$build_default] ) AC_ARG_ENABLE(lavc-hw-accel-rpi4, [ --disable-lavc-hw-accel-rpi4 disable lavc-hw-accel-rpi4 (default is auto)] [ Requires: Raspbian-patched ffmpeg libmmal], [lavc_hwacc_rpi4_req=$enableval], [lavc_hwacc_rpi4_req=$build_default] ) PKG_CHECK_MODULES([LAVC_HWACC_COMMON], [lavc_hwacc_common_dep], [FOUND_HWACC_COMMON_DEP=yes], [FOUND_HWACC_COMMON_DEP=no]) PKG_CHECK_MODULES([LAVC_HWACC_VDPAU], [lavc_hwacc_vdpau_dep], [FOUND_HWACC_VDPAU_DEP=yes], [FOUND_HWACC_VDPAU_DEP=no]) PKG_CHECK_MODULES([LAVC_HWACC_VAAPI], [lavc_hwacc_vaapi_dep], [FOUND_HWACC_VAAPI_DEP=yes], [FOUND_HWACC_VAAPI_DEP=no]) SAVED_PKG_CONFIG_PATH=$PKG_CONFIG_PATH PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/opt/vc/lib/pkgconfig/" export PKG_CONFIG_PATH PKG_CHECK_MODULES([MMAL], [mmal], [ FOUND_HWACC_RPI4_DEP=yes ], [ FOUND_HWACC_RPI4_DEP=no ]) PKG_CHECK_MODULES([BCM_HOST], [bcm_host], [ ], [ FOUND_HWACC_RPI4_DEP=no ]) PKG_CONFIG_PATH=$SAVED_PKG_CONFIG_PATH export PKG_CONFIG_PATH AC_CHECK_HEADER([libavcodec/rpi_zc.h], [ ], [FOUND_HWACC_RPI4_DEP=no], [#include ]) LAVC_HWACC_FLAGS= LAVC_HWACC_LIBS= HW_ACC_OBJ="src/hwaccel_libav_common.o" if test $lavc_hwacc_vdpau_req != no -a $FOUND_HWACC_VDPAU_DEP = yes then lavc_hwacc_vdpau=yes lavc_hwacc_common=yes fi if test $lavc_hwacc_vaapi_req != no -a $FOUND_HWACC_VAAPI_DEP = yes then lavc_hwacc_vaapi=yes lavc_hwacc_common=yes fi if test $lavc_hwacc_rpi4_req != no -a $FOUND_HWACC_RPI4_DEP = yes then lavc_hwacc_rpi4=yes lavc_hwacc_common=yes fi if test $system = MacOSX; then lavc_hwacc_common=yes fi if test $lavc_hwacc_common = yes then LAVC_HWACC_FLAGS="${LAVC_HWACC_FLAGS} -DHWACC_COMMON_IMPL" fi if test $lavc_hwacc_vdpau = yes then LAVC_HWACC_FLAGS="${LAVC_HWACC_FLAGS} -DHWACC_VDPAU ${LAVC_HWACC_VDPAU_CFLAGS}" LAVC_HWACC_LIBS="${LAVC_HWACC_LIBS} ${LAVC_HWACC_VDPAU_LIBS}" HW_ACC_OBJ="${HW_ACC_OBJ} src/hwaccel_vdpau.o" fi if test $lavc_hwacc_vaapi = yes then LAVC_HWACC_FLAGS="${LAVC_HWACC_FLAGS} -DHWACC_VAAPI ${LAVC_HWACC_VAAPI_CFLAGS}" LAVC_HWACC_LIBS="${LAVC_HWACC_LIBS} ${LAVC_HWACC_VAAPI_LIBS}" HW_ACC_OBJ="${HW_ACC_OBJ} src/hwaccel_vaapi.o" fi if test $lavc_hwacc_rpi4 = yes then LAVC_HWACC_FLAGS="${LAVC_HWACC_FLAGS} -DHWACC_RPI4 ${MMAL_CFLAGS} ${BCM_HOST_CFLAGS}" LAVC_HWACC_LIBS="${LAVC_HWACC_LIBS} ${MMAL_LIBS} ${BCM_HOST_LIBS}" ADD_MODULE("rpi4_hw_accel", "src/video_display/rpi4_out.o", "${MMAL_LIBS} ${BCM_HOST_LIBS}") fi COMMON_FLAGS="$COMMON_FLAGS $LAVC_HWACC_FLAGS" if test $lavc_hwacc_vdpau_req = yes -a $lavc_hwacc_vdpau = no; then AC_MSG_ERROR([Could not find hwacc vdpau dependencies!]); fi if test $lavc_hwacc_vaapi_req = yes -a $lavc_hwacc_vaapi = no; then AC_MSG_ERROR([Could not find hwacc vaapi dependencies!]); fi if test $lavc_hwacc_rpi4_req = yes -a $lavc_hwacc_rpi4 = no; then AC_MSG_ERROR([Could not find hwacc rpi4 dependencies!]); fi # ------------------------------------------------------------------------------------------------- # Libswscale # ------------------------------------------------------------------------------------------------- libswscale=no AC_ARG_ENABLE(libswscale, [ --disable-libswscale disable libswscale support (default is auto)] [ Requires: libswscale libavutil], [libswscale_req=$enableval], [libswscale_req=$build_default] ) if test $system = Windows; then AC_CHECK_HEADERS([libswscale/swscale.h]) AC_CHECK_LIB(swscale, sws_getContext) if test $ac_cv_header_libswscale_swscale_h = yes -a \ $ac_cv_lib_swscale_sws_getContext = yes then found_libswscale=yes LIBSWSCALE_LIBS="-lswscale" else found_libswscale=no fi else # Linux, OS X PKG_CHECK_MODULES([LIBSWSCALE], [libswscale], [found_libswscale=yes], [found_libswscale=no]) fi if test $libswscale_req != no -a $found_libswscale = yes then AC_DEFINE([HAVE_SWSCALE], [1], [Build with Swscale support]) COMMON_FLAGS="$COMMON_FLAGS $LIBSWSCALE_CFLAGS" libswscale=yes #LIBSWSCALE_LIBS="$LIBSWSCALE_LIBS $LIBAVUTIL_LIBS" # added libavutil explicitly fi if test $libswscale_req = yes -a $libswscale = no; then AC_MSG_ERROR([Libswscale not found]); fi # ------------------------------------------------------------------------------------------------- # Libav # ------------------------------------------------------------------------------------------------- libavcodec=no libavcodec_audio=no AC_ARG_ENABLE(libavcodec, [ --disable-libavcodec disable libavcodec support (default is auto)] [ Requires: libavcodec libavutil], [libavcodec_req=$enableval], [libavcodec_req=$build_default] ) PKG_CHECK_MODULES([LIBAVCODEC], [libavcodec >= 53.35.0 ], [found_libavcodec=yes], [found_libavcodec=no]) PKG_CHECK_MODULES([LIBAVUTIL], [libavutil >= 51.22.1 ], [found_libavutil=yes], [found_libavutil=no]) if test $found_libavcodec = no -o $found_libavutil = no; then AC_CHECK_HEADERS([libavcodec/avcodec.h libavutil/imgutils.h libavutil/opt.h]) AC_CHECK_LIB(avcodec, avcodec_open2) AC_CHECK_LIB(avutil, av_free) if test $ac_cv_header_libavcodec_avcodec_h = yes -a \ $ac_cv_header_libavutil_imgutils_h = yes -a \ $ac_cv_header_libavutil_opt_h = yes -a \ $ac_cv_lib_avcodec_avcodec_open2 = yes -a \ $ac_cv_lib_avutil_av_free = yes; then found_libavcodec=yes found_libavutil=yes libavcodec_ge_55=yes # TODO LIBAVCODEC_LIBS="-lavcodec" LIBAVUTIL_LIBS="-lavutil" fi fi if test $libavcodec_req != no -a $found_libavcodec = yes -a $found_libavutil = yes then LIBAVCODEC_COMMON="src/libavcodec_common.o" AC_DEFINE([HAVE_LAVC], [1], [Build with LAVC support]) LIBAVCODEC_AUDIO_CODEC_OBJ=src/audio/codec/libavcodec.o LIBAVCODEC_COMPRESS_OBJ="$LIBAVCODEC_COMMON src/video_compress/libavcodec.o" LIBAVCODEC_DECOMPRESS_OBJ="$LIBAVCODEC_COMMON $HW_ACC_OBJ src/video_decompress/libavcodec.o" COMMON_FLAGS="$COMMON_FLAGS $LIBAVCODEC_CFLAGS $LIBAVUTIL_CFLAGS" libavcodec=yes LIBAVCODEC_LIBS="$LIBAVCODEC_LIBS $LIBAVUTIL_LIBS" # added libavutil explicitly ADD_MODULE("vcompress_libavcodec", "$LIBAVCODEC_COMPRESS_OBJ", "$LIBAVCODEC_LIBS $LIBSWSCALE_LIBS") ADD_MODULE("vdecompress_libavcodec", "$LIBAVCODEC_DECOMPRESS_OBJ", "$LIBAVCODEC_LIBS $LAVC_HWACC_LIBS") ADD_MODULE("acompress_libavcodec", "$LIBAVCODEC_AUDIO_CODEC_OBJ", "$LIBAVCODEC_LIBS") else HW_ACC_OBJ= fi if test $libavcodec_req = yes -a $libavcodec = no; then AC_MSG_ERROR([Libavcodec not found]); fi # ------------------------------------------------------------------------------------------------- # File input # ------------------------------------------------------------------------------------------------- file=no AC_ARG_ENABLE(file, [ --disable-file disable file input support (default is auto)] [ Requires: libavcodec >= 57.107.100 libavformat libavutil libswscale], [file_req=$enableval], [file_req=$build_default] ) PKG_CHECK_MODULES([LIBAVFORMAT], [libavformat], [found_libavformat=yes], [found_libavformat=no]) PKG_CHECK_MODULES([LIBAVCODEC_MIN_VERSION], [libavcodec >= 57.107.100], [libavcodec_min_version=yes], [libavcodec_min_version=no]) # Windows doesn't use pkg-config so we assume that libavcodec is new enough if test $system = Windows; then libavcodec_min_version=yes fi if test "$found_libavformat" != yes; then SAVED_LIBS=$LIBS AC_CHECK_HEADERS([libavformat/avformat.h]) AC_CHECK_LIB(avformat, avformat_open_input) LIBS=$SAVED_LIBS if test $ac_cv_header_libavformat_avformat_h = yes -a \ $ac_cv_lib_avformat_avformat_open_input = yes then found_libavformat=yes LIBAVFORMAT_LIBS="-lavformat" else found_libavformat=no fi fi if test $file_req != no -a $libavcodec = yes -a $libswscale = yes -a $found_libavformat = yes -a "$libavcodec_min_version" = yes then AC_DEFINE([HAVE_FILE], [1], [Build with file input support]) COMMON_FLAGS="$COMMON_FLAGS $LIBAVFORMAT_CFLAGS" file=yes ADD_MODULE("vidcap_file", "src/libavcodec_common.o src/video_capture/file.o", "$LIBAVCODEC_LIBS $LIBAVFORMAT_LIBS $LIBSWSCALE_LIBS") fi if test $file_req = yes -a $file = no; then AC_MSG_ERROR([File input dependencies not found]); fi # ------------------------------------------------------------------------------------------------- # OpenGL display # ------------------------------------------------------------------------------------------------- GL_INC= GL_OBJ=$GL_COMMON_OBJ GL_LIB=$OPENGL_LIB gl_display=no AC_ARG_ENABLE(gl-display, [ --disable-gl-display disable OpenGL display (default is auto)] [ Requires: OpenGL GLUT], [gl_display_req=$enableval], [gl_display_req=$build_default] ) GL_OBJ="$GL_OBJ src/video_display/gl.o" case "$system" in MacOSX) GLUT_LIB="-framework GLUT" FOUND_GLUT=yes ;; *) AC_CHECK_HEADERS([GL/glut.h]) AC_CHECK_LIB([freeglut], [glutMainLoop], [GLUT_LIB=-lfreeglut], AC_CHECK_LIB([glut], [glutMainLoop], [GLUT_LIB=-lglut], [GLUT_LIB=""])) if test "$ac_cv_header_GL_glut_h" = yes -a -n "$GLUT_LIB"; then FOUND_GLUT=yes fi ;; esac if test "$OPENGL" = yes -a "$FOUND_GLUT" = yes -a $gl_display_req != no then GL_LIB="$GLUT_LIB $OPENGL_LIB" gl_display=yes AC_DEFINE([HAVE_GL], [1], [Build with OpenGL output]) INC="$INC $GL_INC" ADD_MODULE("display_gl", "$GL_OBJ $HW_ACC_OBJ", "$GL_LIB $LAVC_HWACC_LIBS") fi if test $gl_display_req = yes -a $gl_display = no; then AC_MSG_ERROR([OpenGL not found]); fi # ------------------------------------------------------------------------------------------------- # SW Mix Stuff # ------------------------------------------------------------------------------------------------- SWMIX_INC= SWMIX_LIB= SWMIX_OBJ= swmix=no AC_ARG_ENABLE(swmix, [ --disable-swmix disable SW mix (default is auto)] [ Requires: gl], [swmix_req=$enableval], [swmix_req=$build_default] ) if test $swmix_req != no -a $OPENGL = yes then swmix=yes SWMIX_LIB="$OPENGL_LIB" SWMIX_OBJ="$SWMIX_OBJ $GL_COMMON_OBJ src/video_capture/swmix.o" ADD_MODULE("vidcap_swmix", "$SWMIX_OBJ", "$SWMIX_LIB") AC_DEFINE([HAVE_SWMIX], [1], [Build SW mix capture]) fi if test $swmix_req = yes -a $swmix = no; then AC_MSG_ERROR([SW mix was not found (OpenGL libraries missing)]); fi # ----------------------------------------------------------------------------- # DirectShow # ----------------------------------------------------------------------------- dshow=no AC_ARG_ENABLE(dshow, AS_HELP_STRING([--disable-dshow], [disable DirectShow support(default is auto)]), [dshow_req=$enableval], [dshow_req=$build_default] ) if test $system = Windows -a $dshow_req != no; then AC_DEFINE([HAVE_DSHOW], [1], [Build with DirectShow support]) ADD_MODULE("", "src/video_capture/DirectShowGrabber.o", "-lstrmiids -luuid -lole32 -loleaut32") #-lstrmbase -ldxguid -ldmoguids dshow=yes fi if test $dshow_req = yes -a $dshow = no; then AC_MSG_ERROR([DirectShow not found]); fi # ------------------------------------------------------------------------------------------------- # Screen capture stuff # ------------------------------------------------------------------------------------------------- SCREEN_CAP_INC= SCREEN_CAP_OBJ= SCREEN_CAP_LIB= screen_cap=no AC_ARG_ENABLE(screen, [ --disable-screen disable screen capture (default is auto)] [ Requires: none (OSX) x11 (Linux) dshow (Win)], [screen_cap_req=$enableval], [screen_cap_req=$build_default] ) case "$system" in MacOSX) screen_cap=yes SCREEN_CAP_LIB="-framework CoreFoundation" ;; Windows) screen_cap=$dshow ;; *) # Linux SAVED_LIBS=$LIBS AC_CHECK_HEADER(X11/Xlib.h) AC_CHECK_HEADER(X11/Xutil.h) AC_CHECK_LIB(X11, XGetImage) #PKG_CHECK_MODULES([XFIXES], [xfixes], # [AC_DEFINE([HAVE_XFIXES], [1], [Build with XFixes support])], # [HAVE_XFIXES=no] # ) AC_CHECK_LIB(Xfixes, XFixesGetCursorImage) AC_CHECK_HEADER(X11/extensions/Xfixes.h) LIBS=$SAVED_LIBS if test $screen_cap_req != no -a $ac_cv_lib_X11_XGetImage = yes -a \ $ac_cv_header_X11_Xlib_h = yes -a $ac_cv_header_X11_Xutil_h = yes then screen_cap=yes SCREEN_CAP_LIB="$SCREEN_CAP_LIB -lX11" if test $ac_cv_lib_Xfixes_XFixesGetCursorImage = yes -a \ $ac_cv_header_X11_extensions_Xfixes_h = yes then AC_DEFINE([HAVE_XFIXES], [1], [Build with XFixes support]) SCREEN_CAP_LIB="$SCREEN_CAP_LIB -lXfixes" fi else screen_cap=no fi ;; esac if test $screen_cap_req != no -a $screen_cap = yes then AC_DEFINE([HAVE_SCREEN_CAP], [1], [Build with screen capture]) if test $system = MacOSX; then SCREEN_CAP_OBJ="src/video_capture/screen_osx.o" elif test $system = Linux; then SCREEN_CAP_OBJ="src/video_capture/screen_x11.o src/x11_common.o" else SCREEN_CAP_OBJ="src/video_capture/screen_win.o" DLL_LIBS="${DLL_LIBS:+$DLL_LIBS }${srcdir}/data/screen-capture-recorder-x64.dll" fi ADD_MODULE("vidcap_screen", "$SCREEN_CAP_OBJ", "$SCREEN_CAP_LIB") else screen_cap=no fi if test $screen_cap_req = yes -a $screen_cap = no; then AC_MSG_ERROR([Screen capture not found]); fi # ------------------------------------------------------------------------------------------------- # GLSL DXT # ------------------------------------------------------------------------------------------------- rtdxt=no AC_ARG_ENABLE(rtdxt, [ --disable-rtdxt disable Real-Time OpenGL DXT compression (default is auto)] [ Requires: gl], [rtdxt_req=$enableval], [rtdxt_req=$build_default]) AC_DEFINE([USE_PBO_DXT_ENCODER], [1], [We want to use OpenGL pixel buffer objects]) # We probably want this only if there is need to maximalize bandwidth # With NVidia cards, it increases latency up about 1.5x frame time #AC_DEFINE([USE_PBO_DXT_ECODER], [1], [We want to use OpenGL pixel buffer objects]) # Linux if test $rtdxt_req != no -a $OPENGL = yes then rtdxt=yes RTDXT_LIB="$OPENGL_LIB" AC_DEFINE([HAVE_DXT_GLSL], [1], [Build with DXT_GLSL support]) RTDXT_COMMON_OBJ="$RTDXT_COMMON_OBJ $GL_COMMON_OBJ dxt_compress/dxt_util.o" RTDXT_COMMON_HEADERS="$RTDXT_COMMON_HEADERS dxt_compress/dxt_glsl.h" RTDXT_COMPRESS_OBJ="$RTDXT_COMMON_OBJ dxt_compress/dxt_encoder.o src/video_compress/dxt_glsl.o" RTDXT_DECOMPRESS_OBJ="$RTDXT_COMMON_OBJ dxt_compress/dxt_decoder.o src/video_decompress/dxt_glsl.o" DXT_GLSL_CFLAGS="-std=gnu99" ADD_MODULE("vcompress_rtdxt", "$RTDXT_COMPRESS_OBJ ", "$RTDXT_LIB") ADD_MODULE("vdecompress_rtdxt", "$RTDXT_DECOMPRESS_OBJ ", "$RTDXT_LIB") LIB_GENERATED_HEADERS="$RTDXT_COMMON_HEADERS" fi if test $rtdxt_req = yes -a $rtdxt = no; then AC_MSG_ERROR([RTDXT not found]); fi AC_SUBST(DXT_GLSL_CFLAGS) # ------------------------------------------------------------------------------------------------- # UYVY uyvy=no AC_ARG_ENABLE(uyvy, [ --disable-uyvy disable dummy RGB to UYVY compression (default is auto)] [ Requires: CUDA], [uyvy_req=$enableval], [uyvy_req=$build_default]) SAVED_LIBS=$LIBS if test $uyvy_req != no -a "$OPENGL" = yes then uyvy=yes fi # common if test $uyvy = yes then AC_DEFINE([HAVE_COMPRESS_UYVY], [1], [Build with dummy UYVY compression]) UYVY_COMPRESS_OBJ="$GL_COMMON_OBJ src/video_compress/uyvy.o" ADD_MODULE("vcompress_uyvy", "$UYVY_COMPRESS_OBJ", "$OPENGL_LIB") fi if test $uyvy_req = yes -a $uyvy = no; then AC_MSG_ERROR([UYVY not found]); fi # ------------------------------------------------------------------------------------------------- # CUDA stuff # # CUDA compiler choice - defaults to nvcc # # CUDA lookup order: # 1) --with-cuda # 2) CUDA_DIRECTORY env variable # 3) default system path (PATH, LD_LIBRARY_PATH, C_INCLUDE_PATH/CPATH) # 4) default CUDA path CUDA_COMPUTE_ARGS="" CUDA_COMPILER="" CUDA_INC= CUDA_LIB= NVCC= CUDA_LIB_PATH= FOUND_CUDA=no CUDA_PATH=$CUDA_DIRECTORY AC_ARG_ENABLE(cuda, AS_HELP_STRING([--disable-cuda], [disable all CUDA code]), [cuda_req=$enableval], [cuda_req=$build_default]) AC_ARG_WITH(cuda, [ --with-cuda=DIR specify location of CUDA Toolkit], [CUDA_PATH=$withval ]) if test -n "$CUDA_PATH"; then CUDA_PATH_SEP="$CUDA_PATH/bin$PATH_SEPARATOR" fi # nvcc is intentional here AC_PATH_PROG(NVCC, nvcc, [], [$CUDA_PATH_SEP$PATH]dnl [$PATH_SEPARATOR/opt/cuda/bin$PATH_SEPARATOR/usr/local/cuda/bin]) if test -n "$NVCC" -a $cross_compile = no -a $cuda_req != no then CUDA_PATH=`dirname "$NVCC"` CUDA_PATH=`dirname "$CUDA_PATH"` if test $system = Windows; then AC_CHECK_PROG([CL], [cl], [cl], []) if test -n "$CL"; then FOUND_CUDA=yes fi else FOUND_CUDA=yes fi AC_MSG_CHECKING([CUDA Toolkit version - major]) nvcc_major=`"$NVCC" --version |grep release|sed 's/^.*release \(@<:@0-9@:>@@<:@0-9@:>@*\).*$/\1/'` AC_MSG_RESULT($nvcc_major) AC_MSG_CHECKING([CUDA Toolkit version - minor]) nvcc_minor=`"$NVCC" --version |grep release|sed 's/^.*release @<:@0-9@:>@@<:@0-9@:>@*\.\(@<:@0-9@:>@@<:@0-9@:>@*\).*$/\1/'` AC_MSG_RESULT($nvcc_minor) CUDA_INC="\"-I$CUDA_PATH/include\"" CUDA_COMPILER="$NVCC" if test $ac_cv_sizeof_int_p -eq 8 -a $system = Linux then CUDA_LIB_PATH="$CUDA_PATH/lib64" else CUDA_LIB_PATH="$CUDA_PATH/lib" fi if test $system = Windows -a $nvcc_major -ge 9; then if test $WORD_LEN = 64; then CUDA_LIB_PATH="$CUDA_LIB_PATH/x64" else CUDA_LIB_PATH="$CUDA_LIB_PATH/Win32" fi fi CUDA_LIB="-L\"$CUDA_LIB_PATH\" -lcudart" if test $system = MacOSX; then LDFLAGS="$LDFLAGS${LDFLAGS:+ }-rpath $CUDA_LIB_PATH" DYLIBBUNDLER_FLAGS="${DYLIBBUNDER_FLAGS:+$DYLIBBUNDLER_FLAGS }-s $CUDA_LIB_PATH" fi fi AC_SUBST(DYLIBBUNDLER_FLAGS) # Pick compiler for cuda device code AC_ARG_WITH(cuda-compiler, AS_HELP_STRING([--with-cuda-compiler=compiler], [select compiler to compile cuda code with; suported: clang, nvcc; default: nvcc]), [CUDA_COMPILER="$withval"], []) HOST_CC_REPORT=" (" case "$CUDA_COMPILER" in *nvcc*) ;; *clang*) CUDA_COMPUTE_ARGS="--cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35" ;; "") ;; *) UG_MSG_WARN([Unsupported cuda compiler $CUDA_COMPILER]) ;; esac HOST_CC_REPORT="$HOST_CC_REPORT"$(basename "$CUDA_COMPILER") # CUDA host compiler AC_ARG_WITH(cuda-host-compiler, AS_HELP_STRING([--with-cuda-host-compiler=BINARY],[specify compiler used for building cuda host code])) if test "x${with_cuda_host_compiler}" != "x" ; then AC_CHECK_PROG([cuda_host_cc], [${with_cuda_host_compiler}],[yes]) # note AC_CHECK_PROG always fails on path with spaces in MSW if test "x${cuda_host_cc}" = "xyes" -o $system = Windows; then CUDA_FLAGS+=" -ccbin \"${with_cuda_host_compiler}\"" else AC_MSG_FAILURE([Binary ${with_cuda_host_compiler} given as cuda host compiler, yet not found!]) fi else with_cuda_host_compiler="default" fi if test "x$FOUND_CUDA" = "xyes" ; then HOST_CC_REPORT="$HOST_CC_REPORT, ${with_cuda_host_compiler})" else HOST_CC_REPORT="" fi AC_SUBST(FOUND_CUDA) AC_SUBST(CUDA_PATH) AC_SUBST(CUDA_LIB) AC_SUBST(CUDA_INC) AC_SUBST(CUDA_COMPILER) AC_SUBST(CUDA_COMPUTE_ARGS) # ------------------------------------------------------------------------------------------------- # GPUJPEG GPUJPEG_OBJ= GPUJPEG_COMPRESS_OBJ= GPUJPEG_DECOMPRESS_OBJ= GPUJPEG_INC= GPUJPEG_LIB= gpujpeg=no AC_ARG_ENABLE(gpujpeg, [ --disable-gpujpeg disable GPUJPEG compression (auto)] [ Requires: libgpujpeg ], [gpujpeg_req=$enableval], [gpujpeg_req=$build_default]) SAVED_PKG_CONFIG_PATH=$PKG_CONFIG_PATH PKG_CONFIG_PATH="ext-deps/gpujpeg/install/share/pkgconfig:$PKG_CONFIG_PATH" PKG_CHECK_MODULES([LIBGPUJPEG_ANY], [libgpujpeg], [ found_gpujpeg_any=yes ], [ found_gpujpeg_any=no ]) PKG_CHECK_MODULES([LIBGPUJPEG], [libgpujpeg >= 0.12.0], [ found_gpujpeg=yes ], [ found_gpujpeg=no ]) PKG_CONFIG_PATH=$SAVED_PKG_CONFIG_PATH if test "$found_gpujpeg_any" = yes -a "$found_gpujpeg" = no; then UG_MSG_WARN([Old GPUJPEG version found, please upgrade]) fi # try to find without pkg-config (but only if old version was not detected - to avoid side-loading # that version without pkg-config version check) if test "$found_gpujpeg_any" != yes -a "$found_gpujpeg" != yes then GPUJPEG_LIB="$GPUJPEG_LIB -lgpujpeg" SAVED_LIBS=$LIBS LIBS="$LIBS $GPUJPEG_LIB" AC_CHECK_LIB([gpujpeg], [gpujpeg_encoder_create]) AC_CHECK_HEADER([libgpujpeg/gpujpeg_decoder.h]) LIBS=$SAVED_LIBS if test "$ac_cv_lib_gpujpeg_gpujpeg_encoder_create" = yes -a \ "$ac_cv_header_libgpujpeg_gpujpeg_decoder_h" = yes then found_gpujpeg=yes else found_gpujpeg=no fi fi if test "$gpujpeg_req" != no -a \ "$found_gpujpeg" = yes then gpujpeg=yes GPUJPEG_INC="$GPUJPEG_INC $LIBGPUJPEG_CFLAGS" GPUJPEG_LIB="$GPUJPEG_LIB $LIBGPUJPEG_LIBS" GPUJPEG_COMPRESS_OBJ="src/video_compress/gpujpeg.o" GPUJPEG_DECOMPRESS_OBJ="src/video_decompress/gpujpeg.o " AC_DEFINE([HAVE_GPUJPEG], [1], [Build with GPUJPEG support]) ADD_MODULE("vcompress_gpujpeg", "$GPUJPEG_COMPRESS_OBJ", "$GPUJPEG_LIB") ADD_MODULE("vdecompress_gpujpeg", "$GPUJPEG_DECOMPRESS_OBJ", "$GPUJPEG_LIB") INC="$INC $GPUJPEG_INC" fi if test $gpujpeg_req = yes -a $gpujpeg = no; then AC_MSG_ERROR([GPUJPEG not found]); fi # ------------------------------------------------------------------------------------------------- # CUDA DXT # ------------------------------------------------------------------------------------------------- CUDA_DXT_OBJ= CUDA_DXT_INC= CUDA_DXT_LIB= cuda_dxt=no AC_DEFUN([DEFINE_CUDA_DXT], [ if test -z "$included_shared_cuda_dxt_cu"; then if test $system = Windows; then CUDA_DXT_COMMON_OBJ="cuda_dxt/cuda_dxt.$CU_OBJ_SUFFIX" CUDA_DXT_COMMON_LIB="cuda_dxt/cuda_dxt.$CU_OBJ_SUFFIX" DLL_LIBS="$DLL_LIBS cuda_dxt/cuda_dxt.dll" else CUDA_DXT_COMMON_OBJ="cuda_dxt/cuda_dxt.$CU_OBJ_SUFFIX" CUDA_DXT_COMMON_LIB= fi included_shared_cuda_dxt_cu=yes fi ]) AC_ARG_ENABLE(cuda-dxt, [ --disable-cuda-dxt disable CUDA DXT compression (auto)] [ Requires: CUDA], [cuda_dxt_req=$enableval], [cuda_dxt_req=$build_default]) LIBS=$SAVED_LIBS if test "$cuda_dxt_req" != no -a $FOUND_CUDA = yes then cuda_dxt=yes DEFINE_CUDA DEFINE_CUDA_DXT CUDA_DXT_LIB="$CUDA_COMMON_LIB $CUDA_DXT_COMMON_LIB $CUDA_LIB" CUDA_DXT_INC=$CUDA_INC CUDA_DXT_OBJ="src/video_compress/cuda_dxt.o $CUDA_DXT_COMMON_OBJ $CUDA_COMMON_OBJ" AC_DEFINE([HAVE_CUDA_DXT], [1], [Build with CUDA DXT support]) ADD_MODULE("vcompress_cuda_dxt", $CUDA_DXT_OBJ, "$CUDA_DXT_LIB") CUDA_MESSAGE fi if test $cuda_dxt_req = yes -a $cuda_dxt = no; then AC_MSG_ERROR([CUDA DXT not found]); fi # ------------------------------------------------------------------------------------------------- # GPUJPEG transcode to DXT # ------------------------------------------------------------------------------------------------- gpujpeg_to_dxt=no AC_ARG_ENABLE(gpujpeg_to_dxt, [ --disable-jpeg-to-dxt disable GPUJPEG DXT transcoder (default is disable)] [ Requires: CUDA libgpujpeg], [gpujpeg_to_dxt_req=$enableval], [gpujpeg_to_dxt_req=no]) if test $gpujpeg_to_dxt_req != no -a $FOUND_CUDA = yes -a \ "$found_gpujpeg" = yes then DEFINE_CUDA DEFINE_CUDA_DXT gpujpeg_to_dxt=yes GPUJPEG_TO_DXT_INC=" $CUDA_INC" GPUJPEG_TO_DXT_LIB="$CUDA_DXT_COMMON_LIB $CUDA_COMMON_LIB $CUDA_LIB $GPUJPEG_LIB" GPUJPEG_TO_DXT_OBJ="src/video_decompress/gpujpeg_to_dxt.o $CUDA_COMMON_OBJ $CUDA_DXT_COMMON_OBJ" ADD_MODULE("vdecompress_gpujpeg_to_dxt", $GPUJPEG_TO_DXT_OBJ, "$GPUJPEG_TO_DXT_LIB") AC_DEFINE([HAVE_GPUJPEG_TO_DXT], [1], [Build with GPUJPEG DXT transcode support]) CUDA_MESSAGE fi if test $gpujpeg_to_dxt = no -a $gpujpeg_to_dxt_req = yes then AC_MSG_ERROR([GPUJPEG DXT transcoder not found]) fi # ------------------------------------------------------------------------------------------------- # SAGE stuff SAGE_OBJ= SAGE_INC= SAGE_LIB= sage=no AC_ARG_ENABLE(sage, [ --disable-sage disable SAGE (default is auto)] [ Requires: SAGE], [sage_req=$enableval], [sage_req=$build_default]) AC_ARG_ENABLE(sage-native-dxt5ycocg, AS_HELP_STRING([--enable-sage-native-dxt5ycocg], [Assume that SAGE supports native DXT5 YCoCg (default is disable)]), [native_ycocg=$enableval], [native_ycocg=no]) AC_ARG_WITH(sage, [ --with-sage=DIR specify location of SAGE], [SAGE_DIRECTORY=$withval]) if test $native_ycocg = yes then AC_DEFINE([SAGE_NATIVE_DXT5YCOCG], [1], [Assume that SAGE supports native DXT5 YCoCg]) fi # if directory not set manually, use default installation location if test -z "$SAGE_DIRECTORY" then SAGE_DIRECTORY=/usr/local/sage fi SAGE_INC=$SAGE_DIRECTORY/include SAGE_LIB=$SAGE_DIRECTORY/lib64 AC_CHECK_LIB(sail, main, FOUND_SAGE_L=yes, FOUND_SAGE_L=no, -lquanta -I${SAGE_INC} -L${SAGE_LIB}) # if library not found in lib64/ try lib/ if test $FOUND_SAGE_L = no then SAGE_LIB=$SAGE_DIRECTORY/lib AC_CHECK_LIB(sail, main, FOUND_SAGE_L=yes, FOUND_SAGE_L=no, -lquanta -I${SAGE_INC} -L${SAGE_LIB}) fi AC_CHECK_HEADERS(${SAGE_INC}/sail.h, FOUND_SAGE_H=yes, FOUND_SAGE_H=no) if test $sage_req != no -a $FOUND_SAGE_L = yes -a $FOUND_SAGE_H = yes then SAGE_INC=-I${SAGE_INC} SAGE_LIB=-"L${SAGE_LIB} -lsail -lquanta" SAGE_OBJ="src/video_display/sage.o" AC_DEFINE([HAVE_SAGE], [1], [Build with SAGE support]) CXXFLAGS="$CXXFLAGS -DQUANTA_USE_PTHREADS -DQUANTA_THREAD_SAFE -DGLSL_YUV" ADD_MODULE("display_sage", "$SAGE_OBJ", "$SAGE_LIB") INC="$INC $SAGE_INC" sage=yes fi if test $sage_req = yes -a $sage = no; then AC_MSG_ERROR([SAGE not found]); fi # ------------------------------------------------------------------------------------------------- # AUDIO stuff portaudio=no AC_ARG_ENABLE(portaudio, [ --disable-portaudio disable Portaudio (default is auto)] [ Requires: portaudio-2.0], [portaudio_req=$enableval], [portaudio_req=$build_default]) SAVED_LIBS=$LIBS AC_CHECK_HEADER(portaudio.h) AC_CHECK_LIB(portaudio, Pa_GetDeviceCount) # present in v19 LIBS=$SAVED_LIBS if test $ac_cv_lib_portaudio_Pa_GetDeviceCount = yes -a $ac_cv_header_portaudio_h = yes -a $portaudio_req != no then PORTAUDIO_LIB='-lportaudio' portaudio=yes fi if test $portaudio = yes then AC_CHECK_LIB(portaudio, Pa_GetVersionInfo, AC_DEFINE([HAVE_PA_GETVERSIONINFO], [1], [Portaudio has Pa_GetVersionInfo])) PORTAUDIO_CAP_OBJ="src/audio/portaudio_common.o src/audio/capture/portaudio.o" PORTAUDIO_PLAY_OBJ="src/audio/portaudio_common.o src/audio/playback/portaudio.o" AC_DEFINE([HAVE_PORTAUDIO], [1], [Build with Portaudio support]) ADD_MODULE("acap_portaudio", "$PORTAUDIO_CAP_OBJ", "$PORTAUDIO_LIB") ADD_MODULE("aplay_portaudio", "$PORTAUDIO_PLAY_OBJ", "$PORTAUDIO_LIB") fi if test $portaudio_req = yes -a $portaudio = no; then AC_MSG_ERROR([PortAudio not found]); fi # --------------------------------------------------------------------------- # SpeexDSP # --------------------------------------------------------------------------- speexdsp=no AC_ARG_ENABLE(speexdsp, AS_HELP_STRING([--disable-speexdsp], [disable SpeexDSP (default is auto)]), [speexdsp_req=$enableval], [speexdsp_req=$build_default]) PKG_CHECK_MODULES([LIBSPEEXDSP], [speexdsp], [found_speexdsp=yes], [found_speexdsp=no]) if test "$found_speexdsp" = yes -a "$speexdsp_req" != no; then OBJS="$OBJS src/audio/echo.o" LIBS="$LIBS $LIBSPEEXDSP_LIBS" COMMON_FLAGS="$COMMON_FLAGS${SPEEXDSP_COMMON_FLAGS:+${COMMON_FLAGS:+ }}$SPEEXDSP_COMMON_FLAGS" AC_DEFINE([HAVE_SPEEXDSP], [1], [Build with SpeexDSP support]) speexdsp=yes elif test "$speexdsp_req" = yes; then AC_MSG_ERROR([SpeexDSP not found]); elif test "$found_speexdsp" = no -a "$speexdsp_req" != no; then UG_MSG_WARN([SpeexDSP was not found. Strongly recommending installing that, otherwise audio part of UG will be crippled.]) fi # --------------------------------------------------------------------------- # Zfec # --------------------------------------------------------------------------- zfec=no AC_ARG_ENABLE(zfec, AS_HELP_STRING([--disable-zfec], [disable zfec (default is auto)]), [zfec_req=$enableval], [zfec_req=$build_default]) AC_ARG_WITH(zfec, AS_HELP_STRING([--with-zfec=DIR], [path to zfec sources]), [ZFEC_PREFIX=$withval], [ZFEC_PREFIX=$srcdir/ext-deps/zfec/zfec] ) found_zfec=no if test $cross_compile = no; then AC_CHECK_FILES([$ZFEC_PREFIX/fec.c $ZFEC_PREFIX/fec.h], [found_zfec=yes]) if test $found_zfec = no; then ZFEC_PREFIX=/usr/lib/python3/dist-packages/zfec if test ! -d "$ZFEC_PREFIX"; then ZFEC_PREFIX=$(ls -d /usr/lib/python* | tail -n 1)/site-packages/zfec fi if test ! -d "$ZFEC_PREFIX"; then ZFEC_PREFIX=/usr/local/src/zfec fi if test ! -d "$ZFEC_PREFIX"; then ZFEC_PREFIX=/usr/src/zfec fi AC_CHECK_FILES([$ZFEC_PREFIX/fec.c $ZFEC_PREFIX/fec.h], [found_zfec=yes]) fi fi if test "$found_zfec" = yes -a "$zfec_req" != no; then OBJS="$OBJS src/zfec.o" COMMON_FLAGS="$COMMON_FLAGS -I$ZFEC_PREFIX" AC_DEFINE([HAVE_ZFEC], [1], [Build with zfec support]) AC_SUBST(ZFEC_PREFIX) zfec=yes elif test "$zfec_req" = yes; then AC_MSG_ERROR([Zfec not found]); fi # ------------------------------------------------------------------------------------------------- # # Jack stuff # # transport jack_trans=no jack=no AC_ARG_ENABLE(jack-transport, [ --enable-jack-transport[=force] enable JACK transport (default is auto)] [ Requires: jack], [jack_trans_req=$enableval], [jack_trans_req=$build_default]) AC_CHECK_HEADER(jack/jack.h, FOUND_JACK_H=yes, FOUND_JACK_H=no) if test $jack_trans_req != no -a $FOUND_JACK_H = yes then JACK_TRANS_OBJ="src/audio/jack.o" AC_DEFINE([HAVE_JACK_TRANS], [1], [Build with JACK transport support]) jack_trans=yes fi AC_SUBST(JACK_TRANS_OBJ) # sound system AC_ARG_ENABLE(jack, [ --disable-jack disable JACK (default is auto)] [ Requires: jack], [jack_req=$enableval], [jack_req=$build_default]) if test $jack_req != no -a $FOUND_JACK_H = yes then JACK_CAP_OBJ="src/audio/capture/jack.o" JACK_PLAY_OBJ="src/audio/playback/jack.o" AC_DEFINE([HAVE_JACK], [1], [Build with JACK support]) jack=yes ADD_MODULE("acap_jack", "$JACK_CAP_OBJ", "") ADD_MODULE("aplay_jack", "$JACK_PLAY_OBJ", "") fi if test $jack_req = yes -a $jack = no; then AC_MSG_ERROR([JACK not found]); fi # ------------------------------------------------------------------------------------------------- # # ALSA # AC_ARG_ENABLE(alsa, [ --disable-alsa disable ALSA (default is auto)] [ Requires: alsa], [alsa_req=$enableval], [alsa_req=$build_default]) AC_CHECK_HEADER(alsa/asoundlib.h) SAVED_LIBS=$LIBS AC_CHECK_LIB(asound, snd_pcm_open) LIBS=$SAVED_LIBS if test "$alsa_req" != no -a "$ac_cv_header_alsa_asoundlib_h" = yes -a "$ac_cv_lib_asound_snd_pcm_open" = yes then alsa=yes AC_DEFINE([HAVE_ALSA], [1], [Build with ALSA support]) ALSA_CAP_OBJ="src/audio/capture/alsa.o" ALSA_PLAY_OBJ="src/audio/playback/alsa.o" ALSA_LIB="-lasound" ADD_MODULE("acap_alsa", "$ALSA_CAP_OBJ", "$ALSA_LIB") ADD_MODULE("aplay_alsa", "$ALSA_PLAY_OBJ", "$ALSA_LIB") else alsa=no fi if test $alsa_req = yes -a $alsa = no; then AC_MSG_ERROR([ALSA not found]); fi # ------------------------------------------------------------------------------------------------- # CoreAudio Stuff COREAUDIO_LIB= COREAUDIO_OBJ= coreaudio=no AC_ARG_ENABLE(coreaudio, AS_HELP_STRING([--disable-coreaudio], [disable CoreAudio support(default is auto)]), [coreaudio_req=$enableval], [coreaudio_req=$build_default] ) case $host_os in *darwin*) AC_CHECK_HEADERS([AudioUnit/AudioUnit.h], [FOUND_AUDIOUNIT_H=yes], [echo "AudioUnit headers not found."]) if test $coreaudio_req != no -a $FOUND_AUDIOUNIT_H = yes then COREAUDIO_LIB="-framework CoreAudio -framework AudioUnit -framework AVFoundation" COREAUDIO_OBJ="src/audio/capture/coreaudio.o src/audio/playback/coreaudio.o" coreaudio=yes AC_DEFINE([HAVE_COREAUDIO], [1], [Build with CoreAudio support]) ADD_MODULE("", "$COREAUDIO_OBJ", "$COREAUDIO_LIB") fi ;; esac if test $coreaudio_req = yes -a $coreaudio = no; then AC_MSG_ERROR([Core Audio not found]); fi # ------------------------------------------------------------------------------------------------- # Scale Stuff # ------------------------------------------------------------------------------------------------- SCALE_INC= SCALE_LIB= SCALE_OBJ= scale=no AC_ARG_ENABLE(scale, [ --disable-scale disable scale postprocessor (default is auto)] [ Requires: gl], [scale_req=$enableval], [scale_req=$build_default] ) if test $scale_req != no -a $OPENGL = yes then scale=yes SCALE_LIB="$SCALE_LIB $OPENGL_LIB" SCALE_OBJ="$SCALE_OBJ $GL_COMMON_OBJ src/vo_postprocess/scale.o" ADD_MODULE("vo_pp_scale", "$SCALE_OBJ", "$SCALE_LIB") AC_DEFINE([HAVE_SCALE], [1], [Build scale postprocessor]) fi if test $scale_req = yes -a $scale = no; then AC_MSG_ERROR([Scale not found]); fi # ------------------------------------------------------------------------------------------------- # Text Stuff # ------------------------------------------------------------------------------------------------- TEXT_INC= TEXT_LIB= TEXT_OBJ= text=no define(text_dep, MagickWand) AC_ARG_ENABLE(text, [ --disable-text disable text postprocessor (default is auto)] [ Requires: text_dep ], [text_req=$enableval], [text_req=$build_default] ) PKG_CHECK_MODULES([TEXT], [text_dep], FOUND_TEXT_DEPS=yes, FOUND_TEXT_DEPS=no) if test $text_req != no -a "$FOUND_TEXT_DEPS" = yes then text=yes COMMON_FLAGS="$COMMON_FLAGS $TEXT_CFLAGS" TEXT_LIB="$TEXT_LIBS" TEXT_OBJ="$TEXT_OBJ src/vo_postprocess/text.o" CFLAGS="$CFLAGS $MAGICKWAND_CFLAGS" ADD_MODULE("vo_pp_text", "$TEXT_OBJ", "$TEXT_LIB") AC_DEFINE([HAVE_TEXT], [1], [Build text postprocessor]) PKG_CHECK_MODULES([WAND7], [MagickWand > 7], [FOUND_WAND7=yes], [FOUND_WAND7=NO]) if test "$FOUND_WAND7" = yes; then AC_DEFINE([WAND7], [1], [MagickWand is v7 or later]) fi fi if test $text_req = yes -a $text = no; then AC_MSG_ERROR([text not found]); fi # ------------------------------------------------------------------------------------------------- # QT GUI qt_gui=no static_qt=no GUI_EXE= GUI_TARGET= QMAKE= #qmake # default for most distributions define(qt5_gui_dep, Qt5Core >= 5.4 Qt5Widgets Qt5Gui) AC_ARG_ENABLE(qt, [ --enable-qt build Qt GUI (default is disabled)] [ Requires: qt5_gui_dep | Qt6 ], [qt_req=$enableval], [qt_req=no] ) AC_ARG_ENABLE(static-qt, AS_HELP_STRING([--enable-static-qt], [use statically built Qt (default is disabled)]), [static_qt=$enableval], [static_qt=no] ) # Check for Qt libraries SAVED_PKG_CONFIG=$PKG_CONFIG if test $static_qt = yes; then PKG_CONFIG='pkg-config --static' fi PKG_CHECK_MODULES(QT, [qt5_gui_dep], [FOUND_QT_DEP=yes], [FOUND_QT_DEP=no]) PKG_CONFIG=$SAVED_PKG_CONFIG # TODO: fix Qt 6 lookup (and precedence?) AC_PATH_PROGS_FEATURE_CHECK([QTCHOOSER], [qtchooser], [AS_IF([$ac_path_QTCHOOSER --run-tool=qmake --qt=5 | grep QMake > /dev/null], [QMAKE="$ac_path_QTCHOOSER --run-tool=qmake --qt=5"])]) #AC_MSG_NOTICE("Qmake: $QMAKE") if test "x$QMAKE" = "x"; then AC_PATH_PROGS(QMAKE, [qmake6 qmake-qt5 qmake], [:], [/usr/lib/qt5/bin:$PATH]) fi if test "$QMAKE" -a "$QMAKE" != ":" then QMAKE_VERSION=`$QMAKE -v | sed -n 's/.*Qt version \(@<:@^ @:>@*\).*/\1/p'` fi # Qt deps not found with pkg-config but qmake found (eg. in Qt 6) if test $FOUND_QT_DEP = no && test -n "$QMAKE_VERSION" && expr "$QMAKE_VERSION" \>= 6 >/dev/null then touch qt.pro MAKEFILE=Make.qt $QMAKE qt.pro -o $MAKEFILE if test -f Make.qt.Release; then MAKEFILE=Make.qt.Release fi printf 'print-libs:\n\t@echo $(LIBS)\n\n' >> $MAKEFILE printf 'print-cxxflags:\n\t@echo $(INCPATH) $(CXXFLAGS)\n\n' >> $MAKEFILE QT_CFLAGS=$(make -f $MAKEFILE print-cxxflags) QT_LIBS=$(make -f $MAKEFILE print-libs) rm qt.pro Make.qt* FOUND_QT_DEP=yes fi if test $qt_req != no -a $FOUND_QT_DEP = yes then ADD_MODULE("display_preview", "src/video_display/preview.o src/shared_mem_frame.o", "$QT_LIBS") ADD_MODULE("capture_filter_preview", "src/capture_filter/preview.o src/shared_mem_frame.o", "$QT_LIBS $GL_LIB") #AC_MSG_NOTICE("Qmake: $QMAKE") GUI_TARGET=gui/QT/uv-qt$APPEXT GUI_EXE=$GUI_TARGET if test $system = MacOSX; then GUI_EXE=$GUI_TARGET/Contents/MacOS/uv-qt fi if test ":" = "$QMAKE"; then qt_gui=no else qt_gui=yes fi fi AC_SUBST(GUI_EXE) AC_SUBST(GUI_TARGET) AC_SUBST(QMAKE) AC_SUBST(QT_CFLAGS) if test $qt_req = yes -a $qt_gui = no; then AC_MSG_ERROR([Qt libraries are required.]) fi # ------------------------------------------------------------------------------------------------- # V4L2 # ------------------------------------------------------------------------------------------------- v4l2=no found_v4l2=no define(v4l2_deps, libv4l2 libv4lconvert) AC_ARG_ENABLE(v4l2, [ --disable-v4l2 disable V4L2 support (default is auto)] [ Requires: v4l2_deps], [v4l2_req=$enableval], [v4l2_req=$build_default] ) if test $system = Linux; then PKG_CHECK_MODULES([V4L2], [libv4l2 libv4lconvert], [found_v4l2=yes], [found_v4l2=no]) fi if test $v4l2_req != no -a $found_v4l2 = yes then V4L2_OBJ="src/video_capture/v4l2.o" AC_DEFINE([HAVE_V4L2], [1], [Build with V4L2 support]) ADD_MODULE("vidcap_v4l2", "$V4L2_OBJ", "$V4L2_LIBS") CFLAGS="$CFLAGS $V4L2_CFLAGS" v4l2=yes fi if test $v4l2_req = yes -a $v4l2 = no; then AC_MSG_ERROR([V4L2 not found]); fi # ----------------------------------------------------------------------------- # WASAPI # ----------------------------------------------------------------------------- wasapi=no AC_ARG_ENABLE(wasapi, AS_HELP_STRING([--disable-wasapi], [disable WASAPI support (default is auto)]), [wasapi_req=$enableval], [wasapi_req=$build_default] ) if test $system = Windows -a $wasapi_req != no; then AC_DEFINE([HAVE_WASAPI], [1], [Build with WASAPI support]) ADD_MODULE("aplay_wasapi", "src/audio/capture/wasapi.o src/audio/playback/wasapi.o", "") wasapi=yes fi if test $wasapi_req = yes -a $wasapi = no; then AC_MSG_ERROR([WASAPI not found]); fi # ------------------------------------------------------------------------------------------------- # iHDTV # ------------------------------------------------------------------------------------------------- AC_ARG_ENABLE(ihdtv, AS_HELP_STRING([--enable-ihdtv], [enable iHDTV support (default is disabled)]), [ihdtv_req=$enableval], [ihdtv_req=no] ) ihdtv=no if test $ihdtv_req = yes then AC_DEFINE([HAVE_IHDTV], [1], [Build with iHDTV support]) ihdtv=yes fi # ------------------------------------------------------------------------------------------------- # use shared decoder # ------------------------------------------------------------------------------------------------- # the shared behaviour is faulty, but it saves resources when restarting sender (different SSRC). shared_decoder=no if test $shared_decoder = yes then AC_DEFINE([SHARED_DECODER], [1], [use shared decoder for all participants]) fi # ------------------------------------------------------------------------------------------------- # OpenSSL-libcrypto # ------------------------------------------------------------------------------------------------- crypto=no AC_ARG_ENABLE(openssl, [ --disable-openssl disable OpenSSL support (default is auto)] [ Requires: crypto], [crypto_req=$enableval], [crypto_req=$build_default] ) PKG_CHECK_MODULES([CRYPTO], [libcrypto], [FOUND_CRYPTO_PC=yes], [FOUND_CRYPTO_PC=no]) if test "$FOUND_CRYPTO_PC" = yes; then SAVED_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $CRYPTO_CFLAGS" AC_CHECK_HEADER(openssl/aes.h, FOUND_CRYPTO_H=yes, FOUND_CRYPTO_H=no) if test $FOUND_CRYPTO_H = no; then UG_MSG_WARN([libcrypto.pc found but openssl/aes.h is not present. This is usually caused by presence of /usr/lib/pkgconfig/libcrypto.pc on macOS. If encryption is requested, install openssl from Homebrew and set PKG_CONFIG_PATH accordingly (see 'brew ln openssl').]) fi CFLAGS=$SAVED_CFLAGS fi if test $crypto_req != no -a "$FOUND_CRYPTO_PC" = yes -a "$FOUND_CRYPTO_H" = yes; then crypto=yes OPENSSL_OBJ="src/crypto/openssl_encrypt.o src/crypto/openssl_decrypt.o" CFLAGS="$CFLAGS $CRYPTO_CFLAGS" CXXFLAGS="$CXXFLAGS $CRYPTO_CFLAGS" CPPFLAGS="$CPPFLAGS $CRYPTO_CFLAGS" ADD_MODULE("openssl", "$OPENSSL_OBJ", "$CRYPTO_LIBS") SAVED_LIBS=$LIBS LIBS="$LIBS $CRYPTO_LIBS" AC_CHECK_FUNCS(AES_ctr128_encrypt) LIBS=$SAVED_LIBS fi if test $crypto_req = yes -a $crypto = no; then AC_MSG_ERROR([OpenSSL not found]); fi # ------------------------------------------------------------------------------------------------- # GPU accelerated LDGM # ------------------------------------------------------------------------------------------------- ldgm_gpu=no AC_ARG_ENABLE(ldgm-gpu, [ --disable-ldgm-gpu disable GPU accelerated LDGM (default is auto)] [ Requires: CUDA], [ldgm_gpu_req=$enableval], [ldgm_gpu_req=$build_default] ) if test $ldgm_gpu_req != no -a $FOUND_CUDA = yes then DEFINE_CUDA CUDA_MESSAGE AC_DEFINE([HAVE_LDGM_GPU], [1], [Build with GPU accelerated LDGM]) LDGM_GPU_OBJS="ldgm/src/ldgm-session-gpu.o src/rtp/ldgm_gpu.o $CUDA_COMMON_OBJ" LDGM_GPU_LIBS="$CUDA_COMMON_LIB $CUDA_LIB" if test $system = Windows; then DLL_LIBS="$DLL_LIBS ldgm/src/gpu.dll" LDGM_GPU_OBJS="$LDGM_GPU_OBJS ldgm/src/gpu.$CU_OBJ_SUFFIX" LDGM_GPU_LIBS="$LDGM_GPU_LIBS ldgm/src/gpu.$CU_OBJ_SUFFIX" else LDGM_GPU_OBJS="$LDGM_GPU_OBJS ldgm/src/gpu.$CU_OBJ_SUFFIX" fi ADD_MODULE("ldgm_gpu", "$LDGM_GPU_OBJS", "$LDGM_GPU_LIBS") if test $WORD_LEN = 32 -a $system = Linux; then CUDA_FLAGS="$CUDA_FLAGS -Xcompiler -msse2" fi ldgm_gpu=yes else ldgm_gpu=no fi if test $ldgm_gpu_req = yes -a $ldgm_gpu = no; then AC_MSG_ERROR([LDGM accelerated GPU cannot be enabled (CUDA not found?)]); fi # ------------------------------------------------------------------------------------------------- # Syphon # ------------------------------------------------------------------------------------------------- syphon=no AC_ARG_ENABLE(syphon, [ --enable-syphon enables Syphon support (default is auto)] [ Requires: Syphon], [syphon_req=$enableval], [syphon_req=$build_default] ) MY_CHECK_FRAMEWORK([Syphon]) if test $syphon_req != no -a $my_cv_framework_Syphon = yes -a $host_cpu = x86_64 then AC_DEFINE([HAVE_SYPHON], [1], [Build with Syphon support]) LIBS="$LIBS -framework Syphon" OBJS="$OBJS src/syphon_server.o src/video_capture/syphon.o" BIN_DEPS="${BIN_DEPS:+$BIN_DEPS }Frameworks/Syphon.framework" syphon=yes fi if test $syphon_req = yes -a $syphon = no; then AC_MSG_ERROR([Syphon framework cannot be found!]); fi # ------------------------------------------------------------------------------ # Spout # ------------------------------------------------------------------------------ spout=no AC_ARG_ENABLE(spout, [ --enable-spout enables Spout support (default is auto)] [ Requires: OpenGL Spout], [spout_req=$enableval], [spout_req=$build_default] ) FOUND_SPOUT=no if test $system = Windows then AC_LANG_PUSH([C++]) SAVED_LIBS="$LIBS" LIBS="$LIBS -lSpout" AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[SpoutSender *sender = new SpoutSender;]])], FOUND_SPOUT=yes, FOUND_SPOUT=no) LIBS=$SAVED_LIBS AC_LANG_POP([C++]) fi if test $spout_req != no -a "$OPENGL" = yes -a $FOUND_SPOUT = yes then AC_DEFINE([HAVE_SPOUT], [1], [Build with Spout support]) LIBS="$LIBS -lSpout" OBJS="$OBJS src/spout_sender.o src/video_capture/spout.o" spout=yes fi if test $spout_req = yes -a $spout = no; then AC_MSG_ERROR([Could not found Spout dependencies!]); fi # ------------------------------------------------------------------------------------------------- # MCU-like video mixer # ------------------------------------------------------------------------------------------------- video_mix=no AC_ARG_ENABLE(video-mixer, [ --disable-video-mixer disable MCU-like video mixer (default is auto)] [ Requires: opencv], [video_mix_req=$enableval], [video_mix_req=$build_default] ) if test x$HAVE_OPENCV != xno && test "$FOUND_OPENCV_IMGPROC" = yes; then FOUND_VIDEO_MIX_DEP=yes VIDEO_MIX_LIBS="$OPENCV_LIBS -lopencv_imgproc" VIDEO_MIX_CFLAGS=$OPENCV_CFLAGS else FOUND_VIDEO_MIX_DEP=no fi MIXER_CPU_ONLY=no if test $video_mix_req != no -a $FOUND_VIDEO_MIX_DEP = yes -a x$OPENCV_MAJOR = x3 then AC_CHECK_LIB([opencv_cudawarping], [main], [ VIDEO_MIX_LIBS="$VIDEO_MIX_LIBS -lopencv_cudawarping " AC_DEFINE([HAVE_OPENCV_CUDA], [1], [Whether the opencv installation supports cuda modules]) ], [ MIXER_CPU_ONLY=yes ], [ $VIDEO_MIX_LIBS ]) elif test x$OPENCV_MAJOR != x3 then AC_CHECK_HEADER(opencv2/gpu/gpu.hpp, AC_DEFINE([HAVE_OPENCV_CUDA], [1], [Whether the opencv installation supports cuda modules]), MIXER_CPU_ONLY=yes) fi if test $video_mix_req != no -a $FOUND_VIDEO_MIX_DEP = yes then if test $MIXER_CPU_ONLY = yes; then if test $video_mix_req = yes; then UG_MSG_WARN([Video mixer will be compiled as CPU-only]) else AC_MSG_WARN([Video mixer will be compiled as CPU-only]) fi fi CFLAGS="$CFLAGS ${VIDEO_MIX_CFLAGS}" CXXFLAGS="$CXXFLAGS ${VIDEO_MIX_CFLAGS}" VIDEO_MIX_OBJ="src/video_display/conference.o" ADD_MODULE("display_video_mix", "$VIDEO_MIX_OBJ", "$VIDEO_MIX_LIBS") video_mix=yes fi if test $video_mix_req = yes -a $video_mix = no; then AC_MSG_ERROR([Could not found OpenCV needed for video mixer!]); fi # ------------------------------------------------------------------------------------------------ # BitFlow # ------------------------------------------------------------------------------------------------- AC_ARG_ENABLE(bitflow, AS_HELP_STRING([--enable-bitflow], [Compile BitFlow grabber support]), [bitflow_req=$enableval], [bitflow_req=no] ) bitflow=no if test $bitflow_req = yes then LIBS="$LIBS -lBFSOciLib -lBFciLib -lBFML" OBJS="$OBJS src/video_capture/bitflow.o" bitflow=yes fi # ------------------------------------------------------------------------------ # Comprimato J2K # ------------------------------------------------------------------------------ cmpto_j2k=no AC_ARG_ENABLE(cmpto-j2k, [ --enable-cmpto-j2k enables Comprimato J2K support (default is auto)] [ Requires: cmpto_j2k], [cmpto_j2k_req=$enableval], [cmpto_j2k_req=$build_default] ) AC_CHECK_HEADER(cmpto_j2k_enc.h, FOUND_CMPTO_J2K_ENC_H=yes, FOUND_CMPTO_J2K_ENC_H=no) AC_CHECK_HEADER(cmpto_j2k_dec.h, FOUND_CMPTO_J2K_DEC_H=yes, FOUND_CMPTO_J2K_DEC_H=no) AC_CHECK_LIB(cmpto_j2k_enc, cmpto_j2k_enc_ctx_cfg_create, FOUND_CMPTO_J2K_ENC_L=yes, FOUND_CMPTO_J2K_ENC_L=no) AC_CHECK_LIB(cmpto_j2k_dec, cmpto_j2k_dec_ctx_cfg_create, FOUND_CMPTO_J2K_DEC_L=yes, FOUND_CMPTO_J2K_DEC_L=no) if test $cmpto_j2k_req != no -a "$FOUND_CMPTO_J2K_ENC_H" = yes -a "$FOUND_CMPTO_J2K_DEC_H" = yes -a "$FOUND_CMPTO_J2K_ENC_L" = yes -a "$FOUND_CMPTO_J2K_DEC_L" = yes then ADD_MODULE("vcompress_cmpto_j2k", "src/video_compress/cmpto_j2k.o", "-lcmpto_j2k_enc") ADD_MODULE("vdecompress_cmpto_j2k", "src/video_decompress/cmpto_j2k.o", "-lcmpto_j2k_dec") cmpto_j2k=yes fi if test $cmpto_j2k_req = yes -a $cmpto_j2k = no; then AC_MSG_ERROR([Comprimato J2K not found!]); fi # ------------------------------------------------------------------------------ # NDI # ------------------------------------------------------------------------------ ndi=no AC_ARG_ENABLE(ndi, [ --enable-ndi enables NDI support (default is auto)], [ndi_req=$enableval], [ndi_req=$build_default] ) AC_CHECK_HEADER(Processing.NDI.Lib.h, FOUND_NDI_H=yes, FOUND_NDI_H=no) # if NDI_SDK_DIR is defined in Windows, ignore autoconf tests if test $ndi_req != no && ( test "$FOUND_NDI_H" = yes || ( test -n "$NDI_SDK_DIR" && test $system = Windows ) ) then if test -n "$NDI_SDK_DIR" && test $system = Windows; then COMMON_FLAGS="$COMMON_FLAGS -I\"$NDI_SDK_DIR/Include\"" fi ADD_MODULE("vidcap_ndi", "src/video_capture/ndi.o", "") ADD_MODULE("display_ndi", "src/video_display/ndi.o", "") ndi=yes fi if test $ndi_req = yes -a $ndi = no; then AC_MSG_ERROR([NDI not found!]); fi # ------------------------------------------------------------------------------ # Cineform # ------------------------------------------------------------------------------ CINEFORM_PATH=cineform-sdk CINEFORM_INC= CINEFORM_LIB= cineform=no AC_ARG_ENABLE(cineform, [ --disable-cineform disable cineform suppport (default is auto)] [ Requires: CINEFORM_SDK], [cineform_req=$enableval], [cineform_req=$build_default] ) if test -n "$CINEFORM_DIRECTORY"; then CINEFORM_PATH=$CINEFORM_DIRECTORY fi AC_ARG_WITH(cineform, [ --with-cineform=DIR specify location of Cineform SDK], [CINEFORM_PATH=$withval ]) AC_LANG_PUSH([C++]) AC_CHECK_LIB(CFHDCodec, CFHD_OpenDecoder, [FOUND_CINEFORM=yes; CINEFORM_LIB=-lCFHDCodec], FOUND_CINEFORM=no) AC_LANG_POP([C++]) if test "$FOUND_CINEFORM" = no then if test $system = Windows then CINEFORM_LIB="${CINEFORM_PATH}/Release/CFHDCodec.lib" else CINEFORM_LIB="${CINEFORM_PATH}/libCFHDCodec.a" fi if test -n "$CINEFORM_PATH" -a $cross_compile = no then AC_CHECK_FILES(${CINEFORM_LIB}, FOUND_CINEFORM=yes, FOUND_CINEFORM=no) fi fi if test "$FOUND_CINEFORM" = yes; then CINEFORM_INC="$CINEFORM_INC -I${CINEFORM_PATH}/Common/" if test $system != Windows then CINEFORM_LIB="${CINEFORM_LIB} -luuid" fi else # if not found, look for libcineform with pkg-config configuration PKG_CHECK_MODULES([CINEFORM], [libcineformsdk], [FOUND_CINEFORM=yes], [FOUND_CINEFORM=no]) if test "$FOUND_CINEFORM" = no; then PKG_CHECK_MODULES([CINEFORM], [libcineform], [FOUND_CINEFORM=yes], [FOUND_CINEFORM=no]) fi CINEFORM_INC=$CINEFORM_CFLAGS CINEFORM_LIB=$CINEFORM_LIBS fi if test "$cineform_req" != no -a "$FOUND_CINEFORM" = yes then cineform=yes CINEFORM_COMPRESS_OBJ="src/video_compress/cineform.o" CINEFORM_DECOMPRESS_OBJ="src/video_decompress/cineform.o" INC="$INC $CINEFORM_INC" ADD_MODULE("vcompress_cineform", "$CINEFORM_COMPRESS_OBJ", "$CINEFORM_LIB") ADD_MODULE("vdecompress_cineform", "$CINEFORM_DECOMPRESS_OBJ", "$CINEFORM_LIB") fi if test $cineform_req = yes -a $cineform = no; then AC_MSG_ERROR([CINEFORM not found]); fi # --------------------------------------------------------------------- # NAT-PMP # ----------------------------------- natpmp=no AC_ARG_ENABLE(natpmp, [ --disable-natpmp disable NAT-PMP suppport (default is auto)] [ Requires: natpmp], [natpmp_req=$enableval], [natpmp_req=$build_default] ) AC_CHECK_HEADER(natpmp.h, FOUND_NATPMP_H=yes, FOUND_NATPMP_H=no) AC_CHECK_LIB(natpmp, initnatpmp, FOUND_NATPMP_L=yes, FOUND_NATPMP_L=no) if test "$FOUND_NATPMP_H" = yes -a "$FOUND_NATPMP_L" -a $natpmp_req != no; then LIBS="-lnatpmp $LIBS" AC_DEFINE([HAVE_NATPMP], [1], [Build with NAT-PMP support]) natpmp=yes fi if test $natpmp_req = yes -a $natpmp = no; then AC_MSG_ERROR([NAT-PMP not found]); fi # --------------------------------------------------------------------- # PCP # ----------------------------------- pcp=no AC_ARG_ENABLE(pcp, [ --disable-pcp disable PCP suppport (default is auto)] [ Requires: libpcp], [pcp_req=$enableval], [pcp_req=$build_default] ) PKG_CHECK_MODULES([PCP], [libpcp-client], [FOUND_PCP=yes], [FOUND_PCP=no]) if test "$FOUND_PCP" = yes -a $pcp_req != no; then LIBS="$PCP_LIBS $LIBS" AC_DEFINE([HAVE_PCP], [1], [Build with PCP support]) pcp=yes fi if test $pcp_req = yes -a $pcp = no; then AC_MSG_ERROR([PCP not found]); fi # --------------------------------------------------------------------- # Tests # --------------------------------------------------------------------- AC_ARG_ENABLE(cppunit, AS_HELP_STRING([--disable-cppunit], [disable cppunit tests (default is auto)]), [cppunit_req=$enableval], [cppunit_req=$build_default]) PKG_CHECK_MODULES([CPPUNIT], [cppunit], [cppunit=yes], [cppunit=no]) if test "$cppunit" = yes; then AC_DEFINE([HAVE_CPPUNIT], [1], [Build with CppUnit tests]) cppunit=yes else CPPUNIT_LIBS= cppunit=no fi AC_SUBST(CPPUNIT_LIBS) if test $cppunit_req = yes -a $cppunit = no; then AC_MSG_ERROR([cppunit not found]); fi # ------------------------------------------------------------------------------------------------- # We need to add libraries then # ------------------------------------------------------------------------------------------------- TEST_LIBS="$LIB_MODULES $LIBS" TEST_OBJS="$OBJS $LIB_OBJS $X_OBJ" # this is only needed when passing to "clean" make target if test "$build_libraries" != yes then LIBS="$LIB_MODULES $LIBS" OBJS="$OBJS $LIB_OBJS $X_OBJ" HEADERS="$HEADERS $LIB_GENERATED_HEADERS" LIB_OBJS= LIB_GENERATED_HEADERS= MODULES= TARGETS= fi # remove duplicite objs OBJS=`echo $OBJS | tr ' ' '\n' | sort | uniq | tr '\n' ' '` TEST_OBJS=`echo $TEST_OBJS | tr ' ' '\n' | sort | uniq | tr '\n' ' '` AC_SUBST(BIN_DEPS) AC_SUBST(GENERATED_HEADERS) AC_SUBST(LIB_GENERATED_HEADERS) AC_SUBST(LIB_MODULES) AC_SUBST(LIB_OBJS) AC_SUBST(MODULES) AC_SUBST(TARGETS) AC_SUBST(TEST_LIBS) AC_SUBST(TEST_OBJS) # ------------------------------------------------------------------------------------------------- # Finally, substitute things into the Makefile and config.h start_section() { printf "$1\n$2:" true # set $? to zero -> causes add_column to start on new line } end_section() { printf "$1 " } # params: 0|1 # 0 - print left column; 1 - print right column add_column() { PAD_DOTS=31 # left column if [ test $4 = 0 ]; then printf "$1\n $2 $(for n in `seq ${#2} $PAD_DOTS`; do printf .; done) $(printf %-3s $3)" return 1 else # right column printf "$1 $2 $(for n in `seq ${#2} $PAD_DOTS`; do printf .; done) $(printf %-3s $3)\n" return 0 fi } RESULT="Target: $target\n" # features RESULT=`start_section "$RESULT" "Features"` RESULT=`add_column "$RESULT" "CppUnit tests" $cppunit $?` RESULT=`add_column "$RESULT" "CUDA support$HOST_CC_REPORT" $FOUND_CUDA $?` RESULT=`add_column "$RESULT" "Debug output" $debug_output $?` RESULT=`add_column "$RESULT" "iHDTV support" $ihdtv $?` RESULT=`add_column "$RESULT" "IPv6 support" $ipv6 $?` RESULT=`add_column "$RESULT" "Library live555" $livemedia $?` RESULT=`add_column "$RESULT" "OpenCV$opencv_version" $opencv $?` RESULT=`add_column "$RESULT" "OpenSSL-libcrypto" $crypto $?` RESULT=`add_column "$RESULT" "Profiling support" $profile $?` RESULT=`add_column "$RESULT" "Qt GUI" $qt_gui $?` RESULT=`add_column "$RESULT" "RT priority" $use_rt $?` RESULT=`add_column "$RESULT" "SpeexDSP" $speexdsp $?` RESULT=`add_column "$RESULT" "Standalone modules" $build_libraries $?` RESULT=`add_column "$RESULT" "zfec" $zfec $?` RESULT=`end_section "$RESULT"` # audio RESULT=`start_section "$RESULT" "Audio"` RESULT=`add_column "$RESULT" "ALSA" $alsa $?` RESULT=`add_column "$RESULT" "CoreAudio" $coreaudio $?` RESULT=`add_column "$RESULT" "JACK" $jack $?` RESULT=`add_column "$RESULT" "JACK transport" $jack_trans $?` RESULT=`add_column "$RESULT" "Portaudio" $portaudio $?` RESULT=`add_column "$RESULT" "WASAPI" $wasapi $?` RESULT=`end_section "$RESULT"` # video RESULT=`start_section "$RESULT" "Video"` RESULT=`add_column "$RESULT" "AJA" $aja $?` RESULT=`add_column "$RESULT" "AV Foundation" $avfoundation $?` RESULT=`add_column "$RESULT" "BitFlow" $bitflow $?` RESULT=`add_column "$RESULT" "Bluefish444" $bluefish444 $?` RESULT=`add_column "$RESULT" "DeckLink" $decklink $?` RESULT=`add_column "$RESULT" "DELTACAST" $deltacast $?` RESULT=`add_column "$RESULT" "DirectShow" $dshow $?` RESULT=`add_column "$RESULT" "DVS" $dvs $?` RESULT=`add_column "$RESULT" "File input" $file $?` RESULT=`add_column "$RESULT" "Gpustitch" $gpustitch $?` RESULT=`add_column "$RESULT" "NDI" $ndi $?` RESULT=`add_column "$RESULT" "OpenGL" $gl_display $?` RESULT=`add_column "$RESULT" "OpenXR VR Display" $xrgl_disp $?` RESULT=`add_column "$RESULT" "Panorama Gl Display" $panogl_disp $?` RESULT=`add_column "$RESULT" "RTSP capture client" $rtsp $?` RESULT=`add_column "$RESULT" "SAGE" $sage $?` RESULT=`add_column "$RESULT" "Screen capture" $screen_cap $?` RESULT=`add_column "$RESULT" "SDL (ver. $sdl_version)" $sdl $?` RESULT=`add_column "$RESULT" "SW video mix" $swmix $?` RESULT=`add_column "$RESULT" "V4L2" $v4l2 $?` RESULT=`add_column "$RESULT" "XIMEA" $ximea $?` RESULT=`end_section "$RESULT"` # compressions RESULT=`start_section "$RESULT" "Compressions"` RESULT=`add_column "$RESULT" "Cineform" $cineform $?` RESULT=`add_column "$RESULT" "Comprimato J2K" $cmpto_j2k $?` RESULT=`add_column "$RESULT" "CUDA DXT" $cuda_dxt $?` RESULT=`add_column "$RESULT" "GPUJPEG" $gpujpeg $?` RESULT=`add_column "$RESULT" "GPUJPEG transcode to DXT" $gpujpeg_to_dxt $?` RESULT=`add_column "$RESULT" "Lavc (VDP $lavc_hwacc_vdpau, VA $lavc_hwacc_vaapi, RPI4 $lavc_hwacc_rpi4)" $libavcodec $?` RESULT=`add_column "$RESULT" "Realtime DXT" $rtdxt $?` RESULT=`add_column "$RESULT" "UYVY dummy compression" $uyvy $?` RESULT=`end_section "$RESULT"` # other RESULT=`start_section "$RESULT" "Others"` RESULT=`add_column "$RESULT" "Blank capture filter" $blank $?` RESULT=`add_column "$RESULT" "GPU accelerated LDGM" $ldgm_gpu $?` RESULT=`add_column "$RESULT" "Hole punching" $libjuice $?` RESULT=`add_column "$RESULT" "iHDTV support" $ihdtv $?` RESULT=`add_column "$RESULT" "MCU-like video mixer" $video_mix $?` RESULT=`add_column "$RESULT" "NAT-PMP traversal" $natpmp $?` RESULT=`add_column "$RESULT" "PCP NAT traversal" $pcp $?` RESULT=`add_column "$RESULT" "Resize capture filter" $resize $?` RESULT=`add_column "$RESULT" "RTSP server" $rtsp_server $?` RESULT=`add_column "$RESULT" "Scale postprocessor" $scale $?` RESULT=`add_column "$RESULT" "SDP over HTTP" $sdp_http $?` RESULT=`add_column "$RESULT" "Spout" $spout $?` RESULT=`add_column "$RESULT" "Syphon" $syphon $?` RESULT=`add_column "$RESULT" "Testcard extras" $testcard2 $?` RESULT=`add_column "$RESULT" "Text postprocess and filter" $text $?` RESULT=`add_column "$RESULT" "Swscale support" $libswscale $?` RESULT=`end_section "$RESULT"` AC_MSG_RESULT( [ UltraGrid configuration summary ===============================]) AC_MSG_RESULT([$RESULT]) if test -n "$WARNINGS"; then printf "*** Following WARNINGS were issued:\n$WARNINGS\n" fi RES_STR=`printf "$RESULT" | sed 's/$/\\\\n/' | tr -d '\n'` AC_DEFINE_UNQUOTED([AUTOCONF_RESULT], "$RES_STR", [Autoconf result]) AC_CONFIG_HEADERS([src/config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT