build system: use libEBML/libMatroska via pkg-config

This commit is contained in:
Moritz Bunkus 2014-12-21 10:50:26 +01:00
parent d0d9b96aa9
commit b47ae1ee4b
8 changed files with 25 additions and 276 deletions

View File

@ -1,3 +1,10 @@
2014-12-21 Moritz Bunkus <moritz@bunkus.org>
* build system: libEBML and libMatroska have been changed to
provide pkg-config configuration files. Therefore MKVToolNix'
build system has been switched to look for both libraries via
pkg-config.
2014-12-20 Moritz Bunkus <moritz@bunkus.org>
* all: bug fix: several fixes have gone into libEBML and

View File

@ -104,7 +104,7 @@ def setup_globals
:cflags => "#{cflags_common} #{c(:USER_CFLAGS)}",
:cxxflags => "#{cflags_common} #{c(:STD_CXX11)} -Wnon-virtual-dtor -Woverloaded-virtual -Wextra -Wno-missing-field-initializers #{c(:WXWIDGETS_CFLAGS)} #{c(:QT_CFLAGS)} #{c(:BOOST_CPPFLAGS)} #{c(:CURL_CFLAGS)} #{c(:USER_CXXFLAGS)}",
:cppflags => "#{c(:USER_CPPFLAGS)}",
:ldflags => "#{c(:EBML_LDFLAGS)} #{c(:MATROSKA_LDFLAGS)} #{c(:EXTRA_LDFLAGS)} #{c(:PROFILING_LIBS)} #{c(:USER_LDFLAGS)} #{c(:LDFLAGS_RPATHS)} #{c(:BOOST_LDFLAGS)}",
:ldflags => "#{c(:EXTRA_LDFLAGS)} #{c(:PROFILING_LIBS)} #{c(:USER_LDFLAGS)} #{c(:LDFLAGS_RPATHS)} #{c(:BOOST_LDFLAGS)}",
:windres => (c(:MINGW_PROCESSOR_ARCH) == 'amd64' ? '-DMINGW_PROCESSOR_ARCH_AMD64=1 ' : '') + (c?(:USE_WXWIDGETS) ? c(:WXWIDGETS_INCLUDES) : '-DNOWXWIDGETS'),
}

View File

@ -1,126 +0,0 @@
dnl
dnl Test for libebml, and define EBML_CFLAGS and EBML_LDFLAGS
dnl
ebml_ver_req_major=1
ebml_ver_req_minor=3
ebml_ver_req_micro=1
AC_CACHE_CHECK([for libEBML headers version >= ${ebml_ver_req_major}.${ebml_ver_req_minor}.${ebml_ver_req_micro}],
[ac_cv_ebml_found],[
ac_save_CXXFLAGS="$CXXFLAGS"
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lebml"
AC_LANG_PUSH(C++)
AC_TRY_COMPILE([
#include <ebml/EbmlVersion.h>
#include <ebml/EbmlDummy.h>
using namespace libebml;
#if LIBEBML_VERSION < ((${ebml_ver_req_major} << 16) + (${ebml_ver_req_minor} << 8) + ${ebml_ver_req_micro})
# error libebml is too old
#endif
],
[],
ac_cv_ebml_found=yes,
ac_cv_ebml_found=no)
if test "${ac_cv_ebml_found}" = "no" ; then
EBML_CFLAGS="-I/usr/local/include"
EBML_LDFLAGS="-L/usr/local/lib"
CXXFLAGS="-I/usr/local/include $CXXFLAGS"
LIBS="-L/usr/local/lib $LIBS"
AC_TRY_COMPILE([
#include <ebml/EbmlVersion.h>
#include <ebml/EbmlDummy.h>
using namespace libebml;
#if LIBEBML_VERSION < ((${ebml_ver_req_major} << 16) + (${ebml_ver_req_minor} << 8) + ${ebml_ver_req_micro})
# error libebml is too old
#endif
],
[],
ac_cv_ebml_found=yes,
ac_cv_ebml_found=no)
fi
AC_LANG_POP
CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
if test x"${ac_cv_ebml_found}" != "xyes" ; then
ac_cv_ebml_found=internal
fi
])
if test x"${ac_cv_ebml_found}" = "xinternal" ; then
if ! test -f lib/libebml/ebml/EbmlVersion.h ; then
echo '*** The internal version of the libEBML library is supposed to be used,'
echo '*** but it was not found in "lib/libebml". If this is a clone from the'
echo '*** git repository then submodules have to be initialized with the'
echo '*** following two commands:'
echo '***'
echo '*** git submodule init'
echo '*** git submodule update'
exit 1
fi
EBML_CFLAGS="-Ilib/libebml"
EBML_LDFLAGS="-Llib/libebml/src"
else
dnl
dnl Test if libebml has to be compiled with -DEBML_DLL on Windows.
dnl
ebml_check_msg_nodll="yes, without -DEBML_DLL"
ebml_check_msg_dll="yes, with -DEBML_DLL"
AC_CACHE_CHECK([if linking against libEBML works and if it requires -DEBML_DLL],
[ac_cv_ebml_dll],[
AC_LANG_PUSH(C++)
ac_save_CXXFLAGS="$CXXFLAGS"
ac_save_LIBS="$LIBS"
CXXFLAGS="$CXXFLAGS $EBML_CFLAGS"
LIBS="$LIBS $EBML_LDFLAGS -lebml"
AC_TRY_LINK([
#include <ebml/EbmlVersion.h>
#include <ebml/EbmlDummy.h>
using namespace libebml;
],
[EbmlDummy d;],
ac_cv_ebml_dll="${ebml_check_msg_nodll}",
ac_cv_ebml_dll="not found")
if test x"${ac_cv_mingw32}" = "xyes" ; then
if test x"${ac_cv_ebml_dll}" != "x${ebml_check_msg_nodll}" ; then
CXXFLAGS="$CXXFLAGS -DEBML_DLL"
AC_TRY_LINK([
#include <ebml/EbmlVersion.h>
#include <ebml/EbmlDummy.h>
using namespace libebml;
],
[EbmlDummy d;],
ac_cv_ebml_dll="${ebml_check_msg_dll}")
fi
fi
AC_LANG_POP
CXXFLAGS="${ac_save_CXXFLAGS}"
LIBS="${ac_save_LIBS}"
])
if test x"${ac_cv_ebml_dll}" != "x${ebml_check_msg_dll}" -a x"${ac_cv_ebml_dll}" != "x${ebml_check_msg_nodll}" ; then
echo '*** The libEBML library was not found.'
exit 1
fi
fi
if test x"${ac_cv_ebml_dll}" = "x${ebml_check_msg_dll}" ; then
EBML_CFLAGS="$EBML_CFLAGS -DEBML_DLL"
fi
AC_SUBST(EBML_CFLAGS)
AC_SUBST(EBML_LDFLAGS)

View File

@ -1,18 +0,0 @@
dnl
dnl Define variables for the internal versions of libEBML and libMatroska
dnl
EBML_CFLAGS="-Ilib/libebml"
EBML_LDFLAGS="-Llib/libebml/src"
EBML_LIBS="-lebml"
EBML_MATROSKA_INTERNAL=yes
MATROSKA_CFLAGS="-Ilib/libmatroska"
MATROSKA_LDFLAGS="-Llib/libmatroska/src"
MATROSKA_LIBS="-lmatroska"
AC_SUBST(EBML_CFLAGS)
AC_SUBST(EBML_LDFLAGS)
AC_SUBST(EBML_LIBS)
AC_SUBST(EBML_MATROSKA_INTERNAL)
AC_SUBST(MATROSKA_CFLAGS)
AC_SUBST(MATROSKA_LDFLAGS)
AC_SUBST(MATROSKA_LIBS)

View File

@ -1,134 +1,20 @@
dnl
dnl Test for libmatroska, and define MATROSKA_CFLAGS and MATROSKA_LDFLAGS
dnl Test for libEBML and libMatroska, and define MATROSKA_CFLAGS and MATROSKA_LIBS
dnl
kax_ver_req_major=1
kax_ver_req_minor=4
kax_ver_req_micro=2
AC_CACHE_CHECK([for libMatroska headers version >= ${kax_ver_req_major}.${kax_ver_req_minor}.${kax_ver_req_micro}],
[ac_cv_matroska_found],
[
EBML_MATROSKA_INTERNAL=no
PKG_CHECK_MODULES([EBML],[libebml >= 1.3.1],[],[EBML_MATROSKA_INTERNAL=yes])
PKG_CHECK_MODULES([MATROSKA],[libmatroska >= 1.4.2],[],[EBML_MATROSKA_INTERNAL=yes])
if test x"${ac_cv_ebml_found}" = "xyes" ; then
ac_save_CXXFLAGS="$CXXFLAGS"
ac_save_LIBS="$LIBS"
CXXFLAGS="$CFLAGS $MATROSKA_CFLAGS"
LIBS="$LIBS -lmatroska -lebml"
rm -f conf.matroskatest
AC_LANG_PUSH(C++)
AC_TRY_COMPILE([
#include <ebml/EbmlConfig.h>
#include <matroska/KaxVersion.h>
#include <matroska/KaxTracks.h>
using namespace libmatroska;
#if LIBMATROSKA_VERSION < ((${kax_ver_req_major} << 16) + (${kax_ver_req_minor} << 8) + ${kax_ver_req_micro})
# error libmatroska is too old
#endif
],
[],
ac_cv_matroska_found=yes,
ac_cv_matroska_found=no)
if test x"${ac_cv_matroska_found}" != "xyes" ; then
MATROSKA_CFLAGS="-I/usr/local/include"
MATROSKA_LDFLAGS="-L/usr/local/lib"
CXXFLAGS="-I/usr/local/include $CXXFLAGS"
LIBS="-L/usr/local/lib $LIBS"
AC_TRY_COMPILE([
#include <ebml/EbmlConfig.h>
#include <matroska/KaxVersion.h>
#include <matroska/KaxTracks.h>
using namespace libmatroska;
#if LIBMATROSKA_VERSION < ((${kax_ver_req_major} << 16) + (${kax_ver_req_minor} << 8) + ${kax_ver_req_micro})
# error libmatroska is too old
#endif
],
[],
ac_cv_matroska_found=yes,
ac_cv_matroska_found=no)
fi
AC_LANG_POP
CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
fi
if test x"${ac_cv_matroska_found}" != "xyes" ; then
ac_cv_matroska_found=internal
fi
])
if test x"${ac_cv_matroska_found}" = "xinternal" -o x"${ac_cv_ebml_found}" = "xinternal" ; then
if ! test -f lib/libmatroska/matroska/KaxVersion.h ; then
echo '*** The internal version of the libMatroska library is supposed to be used,'
echo '*** but it was not found in "lib/libmatroska". If this is a clone from the'
echo '*** git repository then submodules have to be initialized with the'
echo '*** following two commands:'
echo '***'
echo '*** git submodule init'
echo '*** git submodule update'
exit 1
fi
EBML_CFLAGS="-Ilib/libebml"
EBML_LDFLAGS="-Llib/libebml/src"
MATROSKA_CFLAGS="-Ilib/libmatroska"
MATROSKA_LDFLAGS="-Llib/libmatroska/src"
EBML_MATROSKA_INTERNAL=yes
else
matroska_check_msg_nodll="yes, without -MATROSKA_DLL"
matroska_check_msg_dll="yes, with -DMATROSKA_DLL"
AC_CACHE_CHECK([if linking against libMatroska works and if it requires -DMATROSKA_DLL],
[ac_cv_matroska_dll],[
AC_LANG_PUSH(C++)
ac_save_CXXFLAGS="$CXXFLAGS"
ac_save_LIBS="$LIBS"
CXXFLAGS="$CXXFLAGS $EBML_CFLAGS $MATROSKA_CFLAGS"
LIBS="$LIBS $MATROSKA_LDFLAGS -lmatroska -lebml"
AC_TRY_LINK([
#include <matroska/KaxVersion.h>
#include <matroska/KaxSegment.h>
using namespace libmatroska;
],
[KaxSegment s;],
ac_cv_matroska_dll="${matroska_check_msg_nodll}",
ac_cv_matroska_dll="not found")
if test x"${ac_cv_mingw32}" = "xyes" ; then
if test x"${ac_cv_matroska_dll}" != "x${matroska_check_msg_nodll}" ; then
CXXFLAGS="$CXXFLAGS -DMATROSKA_DLL"
AC_TRY_LINK([
#include <matroska/KaxVersion.h>
#include <matroska/KaxSegment.h>
using namespace libmatroska;
],
[KaxSegment s;],
ac_cv_matroska_dll="${matroska_check_msg_dll}")
fi
fi
AC_LANG_POP
CXXFLAGS="${ac_save_CXXFLAGS}"
LIBS="${ac_save_LIBS}"
])
if test x"${ac_cv_matroska_dll}" != "x${matroska_check_msg_nodll}" -a x"${ac_cv_matroska_dll}" != "x${matroska_check_msg_dll}" ; then
echo '*** The libMatroska library was not found.'
exit 1
fi
if test x"${ac_cv_matroska_dll}" = "x${matroska_check_msg_dll}" ; then
MATROSKA_CFLAGS="$MATROSKA_CFLAGS -DMATROSKA_DLL"
fi
fi
if test x"$EBML_MATROSKA_INTERNAL" = xyes; then
EBML_CFLAGS="-Ilib/libebml"
EBML_LIBS="-Llib/libebml/src -lebml"
MATROSKA_CFLAGS="-Ilib/libmatroska"
MATROSKA_LIBS="-Llib/libmatroska/src -lmatroska"
fi
AC_SUBST(EBML_CFLAGS)
AC_SUBST(EBML_LIBS)
AC_SUBST(MATROSKA_CFLAGS)
AC_SUBST(MATROSKA_LDFLAGS)
AC_SUBST(MATROSKA_LIBS)
AC_SUBST(EBML_MATROSKA_INTERNAL)

View File

@ -77,7 +77,7 @@ DEBUG_CFLAGS = @DEBUG_CFLAGS@
DOCBOOK_MANPAGES_STYLESHEET = @DOCBOOK_MANPAGES_STYLESHEET@
DOCBOOK_ROOT = @DOCBOOK_ROOT@
EBML_CFLAGS = @EBML_CFLAGS@
EBML_LDFLAGS = @EBML_LDFLAGS@
EBML_LIBS = @EBML_LIBS@
EBML_MATROSKA_INTERNAL = @EBML_MATROSKA_INTERNAL@
EGREP = @EGREP@
EXTRA_CFLAGS = @EXTRA_CFLAGS@
@ -89,7 +89,7 @@ ICONV_LIBS = @ICONV_LIBS@
LIBINTL_LIBS = @LIBINTL_LIBS@
MAGIC_LIBS = @MAGIC_LIBS@
MATROSKA_CFLAGS = @MATROSKA_CFLAGS@
MATROSKA_LDFLAGS = @MATROSKA_LDFLAGS@
MATROSKA_LIBS = @MATROSKA_LIBS@
MINGW_GUIAPP = @MINGW_GUIAPP@
MINGW_LIBS = @MINGW_LIBS@
MINGW_PROCESSOR_ARCH = @MINGW_PROCESSOR_ARCH@

View File

@ -32,10 +32,8 @@ m4_include(ac/nl_langinfo.m4)
m4_include(ac/ogg.m4)
m4_include(ac/vorbis.m4)
m4_include(ac/flac.m4)
m4_include(ac/ebml.m4)
m4_include(ac/matroska.m4)
m4_include(ac/pugixml.m4)
dnl m4_include(ac/ebml_matroska_internal.m4)
m4_include(ac/zlib.m4)
m4_include(ac/wxwidgets.m4)
m4_include(ac/qt5.m4)

View File

@ -153,6 +153,8 @@ class Target
when :mtxextract then [ '-Lsrc/extract', '-lmtxextract' ]
when :mtxpropedit then [ '-Lsrc/propedit', '-lmtxpropedit' ]
when :mtxunittest then [ '-Ltests/unit', '-lmtxunittest' ]
when :ebml then c(:EBML_LIBS)
when :matroska then c(:MATROSKA_LIBS)
when String then entry
else "-l#{entry}"
end