Blob Blame History Raw
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])

# YAMI-API version
# YAMI-API version for api headers, only change it when the api interface is changed.
m4_define([yami_api_major_version], 0)
# update this for every release when micro version large than zero
m4_define([yami_api_minor_version], 6)
# change this for any api change
m4_define([yami_api_micro_version], 0)
m4_define([yami_api_version],
    [yami_api_major_version.yami_api_minor_version.yami_api_micro_version])

# package version (lib name suffix), usually sync with git tag
m4_define([libyami_major_version], 1)
m4_define([libyami_minor_version], 3)
# even number of micro_version means a release after full validation cycle
m4_define([libyami_micro_version], 1)
m4_define([libyami_version],
                    [libyami_major_version.libyami_minor_version.libyami_micro_version])

# libva minimun version requirement
m4_define([va_min_api_version], [0.36])

AC_INIT([libyami],
        [libyami_version],
        [https://github.com/01org/libyami/issues/new],
        [libyami],
        [https://github.com/01org/libyami])

AC_CONFIG_SRCDIR([common/common_def.h])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([foreign subdir-objects])
AM_SILENT_RULES([yes])

LIBYAMI_LT_VERSION="libyami_major_version:libyami_minor_version:libyami_micro_version"
LIBYAMI_LT_LDFLAGS="-version-number $LIBYAMI_LT_VERSION"
# "-release" option should be avoid, that create lib name like libyami-1.s0.xxx
AC_SUBST(LIBYAMI_LT_VERSION)
AC_SUBST(LIBYAMI_LT_LDFLAGS)

YAMI_API_MAJOR_VERSION=yami_api_major_version
YAMI_API_MINOR_VERSION=yami_api_minor_version
YAMI_API_MICRO_VERSION=yami_api_micro_version
YAMI_API_VERSION=yami_api_version
AC_SUBST(YAMI_API_MAJOR_VERSION)
AC_SUBST(YAMI_API_MINOR_VERSION)
AC_SUBST(YAMI_API_MICRO_VERSION)
AC_SUBST(YAMI_API_VERSION)

AM_CONDITIONAL(BUILD_STATIC,
    [test "x$enable_static" = "xyes"])

AC_ARG_ENABLE(debug,
    [AC_HELP_STRING([--enable-debug],
        [build with extra debug @<:@default=no@:>@])],
    [], [enable_debug="no"])

if test "$enable_debug" = "yes"; then
    AC_DEFINE([__ENABLE_DEBUG__], [1],
        [Defined to 1 if --enable-debug="yes"])
fi

AC_ARG_ENABLE(dmabuf,
    [AC_HELP_STRING([--enable-dmabuf],
        [support dma_buf buffer sharing @<:@default=no@:>@])],
    [], [enable_dmabuf="no"])

if test "$enable_dmabuf" = "yes"; then
    AC_DEFINE([__ENABLE_DMABUF__], [1],
        [Defined to 1 if --enable-dmabuf="yes"])
fi
AM_CONDITIONAL(ENABLE_DMABUF,
    [test "x$enable_dmabuf" = "xyes"])

AC_ARG_ENABLE(v4l2,
    [AC_HELP_STRING([--enable-v4l2],
        [wrapper of v4l2 interface @<:@default=no@:>@])],
    [], [enable_v4l2="no"])

if test "$enable_v4l2" = "yes"; then
    AC_DEFINE([__ENABLE_V4L2__], [1],
        [Defined to 1 if --enable-v4l2="yes"])
fi
AM_CONDITIONAL(ENABLE_V4L2,
    [test "x$enable_v4l2" = "xyes"])

AC_ARG_ENABLE(x11,
    [AC_HELP_STRING([--enable-x11],
        [enable x11 @<:@default=yes@:>@])],
    [], [enable_x11="yes"])

if test "$enable_x11" = "yes"; then
    AC_DEFINE([__ENABLE_X11__], [1],
        [Defined to 1 if --enable-x11="yes"])
fi
AM_CONDITIONAL(ENABLE_X11,
    [test "x$enable_x11" = "xyes"])

AC_ARG_ENABLE(egl,
    [AC_HELP_STRING([--enable-egl],
        [enable egl @<:@default=yes@:>@])],
    [], [enable_egl="yes"])

if test "$enable_egl" = "yes"; then
    AC_DEFINE([__ENABLE_EGL__], [1],
        [Defined to 1 if --enable-egl="yes"])
fi
AM_CONDITIONAL(ENABLE_EGL,
    [test "x$enable_egl" = "xyes"])

AC_ARG_ENABLE(wayland,
    [AC_HELP_STRING([--enable-wayland],
        [enable wayland @<:@default=no@:>@])],
    [], [enable_wayland="no"])

if test "$enable_wayland" = "yes"; then
    AC_DEFINE([__ENABLE_WAYLAND__], [1],
        [Defined to 1 if --enable-wayland="yes"])
fi
AM_CONDITIONAL(ENABLE_WAYLAND,
    [test "x$enable_wayland" = "xyes"])

AC_ARG_ENABLE(baytrail,
    [AC_HELP_STRING([--enable-baytrail],
        [build with baytrail/chromeos support @<:@default=no@:>@])],
    [], [enable_baytrail="no"])

if test "$enable_baytrail" = "yes"; then
    AC_DEFINE([__PLATFORM_BYT__], [1],
        [Defined to 1 if --enable-baytrail="yes"])
fi

AC_ARG_ENABLE(v4l2-ops,
    [AC_HELP_STRING([--enable-v4l2-ops],
        [support v4l2codec_device_ops.h interface in v4l2 wrapper @<:@default=no@:>@])],
    [], [enable_v4l2_ops="no"])

if test "$enable_v4l2_ops" = "yes"; then
    AC_DEFINE([__ENABLE_V4L2_OPS__], [1],
        [Defined to 1 if --enable-v4l2-ops="yes"])
fi
AM_CONDITIONAL(ENABLE_V4L2_OPS,
    [test "x$enable_v4l2_ops" = "xyes"])

AC_ARG_ENABLE(md5,
    [AC_HELP_STRING([--enable-md5], [enable generate md5 by per frame@<:@default=yes@:>@])],
    [], [enable_md5="yes"])

dnl mpeg2 decoder
AC_ARG_ENABLE(mpeg2dec,
    [AC_HELP_STRING([--enable-mpeg2dec],
        [build with mpeg2 decoder support @<:@default=no@:>@])],
    [], [enable_mpeg2dec="no"])

if test "$enable_mpeg2dec" = "yes"; then
    AC_DEFINE([__BUILD_MPEG2_DECODER__], [1],
        [Defined to 1 if --enable-mpeg2dec="yes"])
fi

AM_CONDITIONAL(BUILD_MPEG2_DECODER,
    [test "x$enable_mpeg2dec" = "xyes"])

dnl vp8 decoder
AC_ARG_ENABLE(vp8dec,
    [AC_HELP_STRING([--enable-vp8dec],
        [build with vp8 decoder support @<:@default=yes@:>@])],
    [], [enable_vp8dec="yes"])

if test "$enable_vp8dec" = "yes"; then
    AC_DEFINE([__BUILD_VP8_DECODER__], [1],
        [Defined to 1 if --enable-vp8dec="yes"])
fi

AM_CONDITIONAL(BUILD_VP8_DECODER,
    [test "x$enable_vp8dec" = "xyes"])

dnl vp9 decoder
AC_ARG_ENABLE(vp9dec,
    [AC_HELP_STRING([--enable-vp9dec],
        [build with vp9 decoder support @<:@default=no@:>@])],
    [], [enable_vp9dec="no"])

if test "$enable_vp9dec" = "yes"; then
    AC_DEFINE([__BUILD_VP9_DECODER__], [1],
        [Defined to 1 if --enable-vp9dec="yes"])
fi

AM_CONDITIONAL(BUILD_VP9_DECODER,
    [test "x$enable_vp9dec" = "xyes"])

dnl jpeg decoder
AC_ARG_ENABLE(jpegdec,
    [AC_HELP_STRING([--enable-jpegdec],
        [build with jpeg decoder support @<:@default=yes@:>@])],
    [], [enable_jpegdec="yes"])

if test "$enable_jpegdec" = "yes"; then
    AC_DEFINE([__BUILD_JPEG_DECODER__], [1],
        [Defined to 1 if --enable-jpegdec="yes"])
fi

AM_CONDITIONAL(BUILD_JPEG_DECODER,
    [test "x$enable_jpegdec" = "xyes"])

dnl h264 decoder
AC_ARG_ENABLE(h264dec,
    [AC_HELP_STRING([--enable-h264dec],
        [build with h264 decoder support @<:@default=yes@:>@])],
    [], [enable_h264dec="yes"])

if test "$enable_h264dec" = "yes"; then
    AC_DEFINE([__BUILD_H264_DECODER__], [1],
        [Defined to 1 if --enable-h264dec="yes"])
fi

AM_CONDITIONAL(BUILD_H264_DECODER,
    [test "x$enable_h264dec" = "xyes"])

dnl h265 decoder
AC_ARG_ENABLE(h265dec,
    [AC_HELP_STRING([--enable-h265dec],
        [build with h265 decoder support @<:@default=yes@:>@])],
    [], [enable_h265dec="yes"])

if test "$enable_h265dec" = "yes"; then
    AC_DEFINE([__BUILD_H265_DECODER__], [1],
        [Defined to 1 if --enable-h265dec="yes"])
fi

AM_CONDITIONAL(BUILD_H265_DECODER,
    [test "x$enable_h265dec" = "xyes"])

dnl vc1 decoder
AC_ARG_ENABLE(vc1dec,
    [AC_HELP_STRING([--enable-vc1dec],
        [build with vc1 decoder support @<:@default=no@:>@])],
    [], [enable_vc1dec="no"])

if test "$enable_vc1dec" = "yes"; then
    AC_DEFINE([__BUILD_VC1_DECODER__], [1],
        [Defined to 1 if --enable-vc1dec="yes"])
fi

AM_CONDITIONAL(BUILD_VC1_DECODER,
    [test "x$enable_vc1dec" = "xyes"])

dnl fake decoder
AC_ARG_ENABLE(fakedec,
    [AC_HELP_STRING([--enable-fakedec],
        [build with fake decoder support @<:@default=no@:>@])],
    [], [enable_fakedec="no"])

if test "$enable_fakedec" = "yes"; then
    AC_DEFINE([__BUILD_FAKE_DECODER__], [1],
        [Defined to 1 if --enable-fakedec="yes"])
fi
AM_CONDITIONAL(BUILD_FAKE_DECODER,
    [test "x$enable_fakedec" = "xyes"])

dnl h264 encoder
AC_ARG_ENABLE(h264enc,
    [AC_HELP_STRING([--enable-h264enc],
        [build with h264 encoder support @<:@default=yes@:>@])],
    [], [enable_h264enc="yes"])

if test "$enable_h264enc" = "yes"; then
    AC_DEFINE([__BUILD_H264_ENCODER__], [1],
        [Defined to 1 if --enable-h264enc="yes"])
fi

AM_CONDITIONAL(BUILD_H264_ENCODER,
    [test "x$enable_h264enc" = "xyes"])

dnl jpeg encoder
AC_ARG_ENABLE(jpegenc,
    [AC_HELP_STRING([--enable-jpegenc],
        [build with jpeg encoder support @<:@default=no@:>@])],
    [], [enable_jpegenc="no"])

if test "$enable_jpegenc" = "yes"; then
    AC_DEFINE([__BUILD_JPEG_ENCODER__], [1],
        [Defined to 1 if --enable-jpegenc="yes"])
fi

AM_CONDITIONAL(BUILD_JPEG_ENCODER,
    [test "x$enable_jpegenc" = "xyes"])

dnl vp8 encoder
AC_ARG_ENABLE(vp8enc,
    [AC_HELP_STRING([--enable-vp8enc],
        [build with vp8 encoder support @<:@default=no@:>@])],
    [], [enable_vp8enc="no"])

if test "$enable_vp8enc" = "yes"; then
    AC_DEFINE([__BUILD_VP8_ENCODER__], [1],
        [Defined to 1 if --enable-vp8enc="yes"])
fi

AM_CONDITIONAL(BUILD_VP8_ENCODER,
    [test "x$enable_vp8enc" = "xyes"])

AC_ARG_ENABLE(vp8svct,
    [AC_HELP_STRING([--enable-vp8svct],
        [enable vp8 SVC-T encoding @<:@default=no@:>@])],
    [], [enable_vp8svct="no"])

if test "$enable_vp8enc" = "yes" -a "$enable_vp8svct" = "yes"; then
    AC_DEFINE([__ENABLE_VP8_SVCT__], [1],
        [Defined to 1 if --enable-vp8enc="yes" and --enable-vp8svct="yes"])
fi

dnl vp9 encoder
AC_ARG_ENABLE(vp9enc,
    [AC_HELP_STRING([--enable-vp9enc],
        [build with vp9 encoder support @<:@default=no@:>@])],
    [], [enable_vp9enc="no"])

if test "$enable_vp9enc" = "yes"; then
    AC_DEFINE([__BUILD_VP9_ENCODER__], [1],
        [Defined to 1 if --enable-vp9enc="yes"])
fi

AM_CONDITIONAL(BUILD_VP9_ENCODER,
    [test "x$enable_vp9enc" = "xyes"])

dnl h265 encoder
AC_ARG_ENABLE(h265enc,
    [AC_HELP_STRING([--enable-h265enc],
        [build with h265 encoder support @<:@default=no@:>@])],
    [], [enable_h265enc="no"])

if test "$enable_h265enc" = "yes"; then
    AC_DEFINE([__BUILD_H265_ENCODER__], [1],
        [Defined to 1 if --enable-h265enc="yes"])
fi

AM_CONDITIONAL(BUILD_H265_ENCODER,
    [test "x$enable_h265enc" = "xyes"])

dnl jpeg parser
AM_CONDITIONAL(BUILD_JPEG_PARSER,
    [test "x$enable_jpegdec" = "xyes" -o "x$enable_jpegenc" = "xyes"])

dnl encoder getmv
AC_ARG_ENABLE(getmv,
    [AC_HELP_STRING([--enable-getmv],
        [build with get mv support @<:@default=no@:>@])],
    [], [enable_getmv="no"])

if test "$enable_getmv" = "yes"; then
    AC_DEFINE([__BUILD_GET_MV__], [1],
        [Defined to 1 if --enable-getmv="yes"])
fi
AM_CONDITIONAL(BUILD_GET_MV,
    [test "x$enable_getmv" = "xyes"])

dnl ocl filters
AC_ARG_ENABLE(oclfilters,
    [AC_HELP_STRING([--enable-oclfilters],
        [build with opencl based alpha blend support @<:@default=no@:>@])],
    [], [enable_oclfilters="no"])

if test "$enable_oclfilters" = "yes"; then
    AC_DEFINE([__BUILD_OCL_FILTERS__], [1],
        [Defined to 1 if --enable-oclfilters="yes"])
fi

AM_CONDITIONAL(BUILD_OCL_FILTERS,
    [test "x$enable_oclfilters" = "xyes"])


# dnl Doxygen
AC_ARG_ENABLE(docs,
    [AC_HELP_STRING([--enable-docs],
        [build Doxygen docs @<:@default=no@:>@])],
    [], [enable_docs="no"])

if test "$enable_docs" = "yes"; then
    AC_CHECK_TOOL([DOXYGEN], [doxygen], [no])
    if test "$DOXYGEN" = "no"; then
       enable_docs="no"
    fi
fi
AM_CONDITIONAL(ENABLE_DOCS,
    [test "$enable_docs" = "yes"])

AC_ARG_ENABLE([tests],
    [AC_HELP_STRING([--enable-tests],
        [build unit tests @<:@default=no@:>@])],
    [], [enable_tests="no"])

AM_CONDITIONAL(ENABLE_TESTS, test "$enable_tests" = "yes")

AC_ARG_ENABLE(media-studio-va,
    [AC_HELP_STRING([--enable-media-studio-va],
        [enable being based on media studio libva @<:@default=no@:>@])],
    [], [enable_media_studio_va="no"])

if test "$enable_media_studio_va" = "yes"; then
    AC_DEFINE([__ENABLE_H265_ENC_ON_STUDIO_VA__], [1],
        [Defined to 1 to enable H265 encoding when --enable-media-studio-va="yes"])
fi

AC_SUBST([AM_CFLAGS], ["-g -O2 -fPIE -fPIC -fstack-protector -Wall -Wno-unused-function -Wno-cpp -Werror"])
AC_SUBST([AM_CXXFLAGS], ["-g -O2 -fPIE -fPIC -fstack-protector -Wall -Wno-unused-function -Wno-cpp -Wno-missing-braces -Werror"])

#Add flags for SDL signoff called SDL325 - Compile With Defenses Enabled
AC_SUBST([AM_CPPFLAGS], ["-D_FORTIFY_SOURCE=2"])
AC_SUBST([AM_LDFLAGS], ["-z noexecstack -z relro -z now -pie"])

# Checks for programs.
AC_DISABLE_STATIC
AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_LIBTOOL
#LT_INIT
# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stddef.h stdint.h stdlib.h string.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_INT32_T
AC_TYPE_INT64_T
AC_TYPE_SIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T

pkgconfigdir=${libdir}/pkgconfig
AC_SUBST(pkgconfigdir)

# Check for libva (vaapi version)
VA_API_VERSION=va_min_api_version
AS_IF([test x$enable_h265dec = xyes], [VA_API_VERSION="0.37"])
AS_IF([test x$enable_vp9dec = xyes], [VA_API_VERSION="0.37"])
AS_IF([test x$enable_jpegenc = xyes], [VA_API_VERSION="0.37"])
AS_IF([test x$enable_h265enc = xyes], [VA_API_VERSION="0.38"])
AS_IF([test x$enable_vp8enc = xyes], [VA_API_VERSION="0.38"])
AS_IF([test x$enable_vp9enc = xyes], [VA_API_VERSION="0.39"])
LIBVA_PKG_REQ="libva >= $VA_API_VERSION"
PKG_CHECK_MODULES([LIBVA], [$LIBVA_PKG_REQ])
AC_SUBST(LIBVA_VERSION)
AC_SUBST(LIBVA_PKG_REQ)

LIBVA_DRM_PKG_REQ="libva-drm"
PKG_CHECK_MODULES([LIBVA_DRM], [$LIBVA_DRM_PKG_REQ])
AC_SUBST(LIBVA_DRM_PKG_REQ)

LIBVA_X11_PKG_REQ=""
X11_PKG_REQ=""
if test "$enable_x11" = "yes"; then
    LIBVA_X11_PKG_REQ="libva-x11"
    PKG_CHECK_MODULES([LIBVA_X11], [$LIBVA_X11_PKG_REQ],
        [AC_DEFINE([HAVE_VA_X11], [1],
            [Defined to 1 if VA/X11 API is enabled])])
    X11_PKG_REQ="x11"
    PKG_CHECK_MODULES([X11], [$X11_PKG_REQ])
fi
AC_SUBST(LIBVA_X11_PKG_REQ)
AC_SUBST(X11_PKG_REQ)
if test "$enable_wayland" = "yes"; then
    PKG_CHECK_MODULES([LIBVA_WAYLAND], [libva-wayland],
        [AC_DEFINE([HAVE_VA_WAYLAND], [1],
            [Defined to 1 if VA/WAYLAND API is enabled])],
        [])
fi

if test "$enable_v4l2" = "yes"; then
    PKG_CHECK_MODULES([LIBV4L2], [libv4l2])
    PKG_CHECK_MODULES([LIBEGL], [egl])
    PKG_CHECK_MODULES([LIBGLES2], [glesv2])
fi

# drm_fourcc.h for dma_buf support
if test "$enable_dmabuf" = "yes"; then
    PKG_CHECK_MODULES([LIBDRM], [libdrm])
fi

# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([memset strcasecmp strdup])

AC_CONFIG_FILES([Makefile
                 codecparsers/Makefile
                 common/Makefile
                 vaapi/Makefile
                 decoder/Makefile
                 encoder/Makefile
                 vpp/Makefile
                 v4l2/Makefile
                 capi/Makefile
                 doc/Makefile
                 gtestsrc/Makefile
                 pkgconfig/Makefile])

AC_OUTPUT([
         pkgconfig/libyami.pc
         pkgconfig/libyami_v4l2.pc
         interface/YamiVersion.h
])

# Print a configuration summary
DECODERS=""
AS_IF([test x$enable_h265dec = xyes], [DECODERS="$DECODERS h265"])
AS_IF([test x$enable_vc1dec = xyes], [DECODERS="$DECODERS vc1"])
AS_IF([test x$enable_h264dec = xyes], [DECODERS="$DECODERS h264"])
AS_IF([test x$enable_jpegdec = xyes], [DECODERS="$DECODERS jpeg"])
AS_IF([test x$enable_mpeg2dec = xyes], [DECODERS="$DECODERS mpeg2"])
AS_IF([test x$enable_vp8dec = xyes], [DECODERS="$DECODERS vp8"])
AS_IF([test x$enable_vp9dec = xyes], [DECODERS="$DECODERS vp9"])
AS_IF([test x$enable_fakedec = xyes], [DECODERS="$DECODERS fake"])

ENCODERS=""
AS_IF([test x$enable_h265enc = xyes], [ENCODERS="$ENCODERS h265"])
AS_IF([test x$enable_h264enc = xyes], [ENCODERS="$ENCODERS h264"])
AS_IF([test x$enable_jpegenc = xyes], [ENCODERS="$ENCODERS jpeg"])
AS_IF([test x$enable_vp8enc = xyes], [ENCODERS="$ENCODERS vp8"])
AS_IF([test x$enable_vp9enc = xyes], [ENCODERS="$ENCODERS vp9"])

VPPS=" scaler"
AS_IF([test x$enable_oclfilters = xyes], [VPPS="$VPPS oclfilters"])

AC_MSG_RESULT([
    libyami - libyami_version (API: yami_api_version)

    Build decoders ................... :$DECODERS
    Build encoders ....................:$ENCODERS
    Build vpps ........................:$VPPS
    Build gtest unit tests ........... : $enable_tests
    Build documentation .............. : $enable_docs
    Enable debug ..................... : $enable_debug
    Installation prefix .............. : $prefix
])