summaryrefslogtreecommitdiff
path: root/m4/vcd.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4/vcd.m4')
-rw-r--r--m4/vcd.m4230
1 files changed, 230 insertions, 0 deletions
diff --git a/m4/vcd.m4 b/m4/vcd.m4
new file mode 100644
index 000000000..917fc5128
--- /dev/null
+++ b/m4/vcd.m4
@@ -0,0 +1,230 @@
+AC_DEFUN([VCD_SUPPORT], [
+ AC_ARG_ENABLE(vcd, AS_HELP_STRING([--disable-vcd], [do not compile VCD plugin]),
+ enable_vcd=$enableval, enable_vcd=yes)
+
+dnl Force build of both vcd plugins, for now.
+dnl AC_ARG_ENABLE(vcdo, AS_HELP_STRING([--disable-vcdo], [do not compile old VCD plugin]),
+dnl enable_vcdo=$enableval, enable_vcdo=yes)
+dnl
+ enable_vcdo="yes"
+
+ AC_ARG_WITH(internal-vcdlibs, AS_HELP_STRING([--with-internal-vcdlibs], [force using internal libcdio/libvcd/libvcdinfo]),
+ [internal_vcdnav="$withval"], [internal_vcdnav="no"])
+
+ if test "x$enable_vcd" = "xyes"; then
+ dnl empty_array_size
+ AC_MSG_CHECKING([how to create empty arrays])
+
+ empty_array_size="xxx"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[struct { int foo; int bar[]; } doo;]])],[empty_array_size=""],[])
+
+ if test "x$empty_array_size" = "xxxx";then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[struct { int foo; int bar[0]; } doo;]])],[empty_array_size="0"],[])
+ fi
+
+ if test "x$empty_array_size" = "xxxx"
+ then
+ AC_MSG_ERROR([compiler is unable to creaty empty arrays])
+ else
+ AC_DEFINE_UNQUOTED(EMPTY_ARRAY_SIZE, $empty_array_size,
+ [what to put between the brackets for empty arrays])
+ changequote(`,')
+ msg="[${empty_array_size}]"
+ changequote([,])
+ AC_MSG_RESULT($msg)
+ fi
+ dnl empty_array_size
+
+ if test "x$internal_vcdnav" = "xno" ; then
+ PKG_CHECK_MODULES([LIBCDIO], [libcdio >= 0.71], [], [internal_vcdnav=yes])
+ PKG_CHECK_MODULES([LIBVCDINFO], [libvcdinfo >= 0.7.23], [], [internal_vcdnav=yes])
+ if test "x$internal_vcdnav" = "xyes"; then
+ AC_MSG_RESULT([Use included libcdio/libvcdinfo support])
+ fi
+ fi
+
+ dnl check twice, fallback is internal copy
+ if test "x$internal_vcdnav" = "xno"; then
+ AC_DEFINE([HAVE_VCDNAV], [1], [Define this if you use external libcdio/libvcdinfo])
+ else
+ AC_DEFINE_UNQUOTED(HOST_ARCH, "$host_os/$host_cpu", [host os/cpu identifier])
+
+ AC_DEFINE(_DEVELOPMENT_, [], enable warnings about being development release)
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS(sys/stat.h stdint.h glob.h inttypes.h stdbool.h)
+
+ if test "x$ac_cv_header_stdint_h" != "xyes"
+ then
+ AC_CHECK_SIZEOF(int, 4)
+ AC_CHECK_SIZEOF(long, 4)
+ AC_CHECK_SIZEOF(long long, 8)
+ fi
+
+ dnl ISOC99_PRAGMA
+ AC_MSG_CHECKING([whether $CC supports ISOC99 _Pragma()])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[_Pragma("pack(1)")]])],[
+ ISOC99_PRAGMA=yes
+ AC_DEFINE(HAVE_ISOC99_PRAGMA, [], [Supports ISO _Pragma() macro])
+ ],[ISOC99_PRAGMA=no])
+ AC_MSG_RESULT($ISOC99_PRAGMA)
+
+ dnl
+ dnl bitfield order
+ dnl
+ AC_MSG_CHECKING([bitfield ordering in structs])
+
+ dnl basic compile test for all platforms
+ AC_COMPILE_IFELSE([
+int main() {
+ struct { char bit_0:1, bit_12:2, bit_345:3, bit_67:2; }
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+ __attribute__((packed))
+#endif
+ bf = { 1,1,1,1 };
+ switch (0) case 0: case sizeof(bf) == 1:;
+ return 0;
+}
+], [], AC_MSG_ERROR([compiler doesn't support bitfield structs]))
+
+
+ dnl run test
+ AC_RUN_IFELSE([
+int main() {
+ struct { char bit_0:1, bit_12:2, bit_345:3, bit_67:2; }
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+ __attribute__((packed))
+#endif
+ bf = { 1,1,1,1 };
+ if (sizeof (bf) != 1) return 1;
+ return *((unsigned char*) &bf) != 0x4b; }
+], bf_lsbf=1, [
+ AC_RUN_IFELSE([
+int main() {
+ struct { char bit_0:1, bit_12:2, bit_345:3, bit_67:2; }
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+ __attribute__((packed))
+#endif
+ bf = { 1,1,1,1 };
+ if (sizeof (bf) != 1) return 1;
+ return *((unsigned char*) &bf) != 0xa5; }
+], bf_lsbf=0, AC_MSG_ERROR([unsupported bitfield ordering]))
+ ],
+ [case "$host" in
+ *-*-mingw32* | *-*-cygwin*)
+ bf_lsbf=1
+ ;;
+ universal-*-darwin*)
+ bf_lsbf=0
+ ;;
+ *)
+ AC_MSG_RESULT([unknown])
+ AC_MSG_ERROR([value of bitfield test isn't known for $host
+*********************************************************************
+Value of bitfield test can't be found out for cross-compiling and we
+don't know its value for host "$host".
+
+Because it's needed for VCD plugin, disable VCD by configure option
+--disable-vcd or use external VCD library.
+*********************************************************************])
+ esac])
+
+ if test "x$cross_compiling" = "xyes"; then
+ TEXT=" (guessed)"
+ else
+ TEXT=""
+ fi
+ if test "x$bf_lsbf" = "x1"; then
+ AC_MSG_RESULT(LSBF${TEXT})
+ AC_DEFINE(BITFIELD_LSBF, [], [compiler does lsbf in struct bitfields])
+ else
+ AC_MSG_RESULT(MSBF${TEXT})
+ fi
+
+ AC_CHECK_HEADERS([errno.h fcntl.h \
+ stdbool.h stdlib.h stdint.h stdio.h string.h \
+ strings.h linux/version.h sys/cdio.h sys/stat.h \
+ sys/types.h ])
+
+ LIBCDIO_CFLAGS='-I$(top_srcdir)/src/input/vcd/libcdio'
+ LIBCDIO_LIBS='$(top_builddir)/src/input/vcd/libcdio/libcdio.la'
+ LIBISO9660_LIBS='$(top_builddir)/src/input/vcd/libcdio/libiso9660.la'
+ LIBVCD_CFLAGS='-I$(top_srcdir)/src/input/vcd/libvcd'
+ LIBVCD_LIBS='$(top_builddir)/src/input/vcd/libvcd/libvcd.la'
+ LIBVCDINFO_LIBS='$(top_builddir)/src/input/vcd/libvcd/libvcdinfo.la'
+
+ case $host_os in
+ darwin*)
+ AC_CHECK_HEADERS(IOKit/IOKitLib.h CoreFoundation/CFBase.h, [have_iokit_h="yes"])
+ if test "x$have_iokit_h" = "xyes" ; then
+ AC_DEFINE([HAVE_DARWIN_CDROM], [1], [Define 1 if you have Darwin OS X-type CD-ROM support])
+ fi
+ ;;
+ linux*)
+ AC_CHECK_HEADERS(linux/version.h)
+ AC_CHECK_HEADERS(linux/cdrom.h, [have_linux_cdrom_h="yes"])
+ if test "x$have_linux_cdrom_h" = "xyes" ; then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+#include <linux/cdrom.h>
+struct cdrom_generic_command test;
+int has_timeout=sizeof(test.timeout);]])],
+ [AC_DEFINE([HAVE_LINUX_CDROM_TIMEOUT], [1], [Define 1 if timeout is in cdrom_generic_command struct])],[])
+ AC_DEFINE([HAVE_LINUX_CDROM], [1], [Define 1 if you have Linux-type CD-ROM support])
+ fi
+ ;;
+ bsdi*)
+ AC_CHECK_HEADERS(dvd.h, [have_bsdi_dvd_h="yes"])
+ if test "x$have_bsdi_dvd_h" = "xyes" ; then
+ AC_DEFINE([HAVE_BSDI_CDROM], [1], [Define 1 if you have BSDI-type CD-ROM support])
+ fi
+ ;;
+ sunos*|sun*|solaris*)
+ AC_CHECK_HEADERS(sys/cdio.h)
+ AC_DEFINE([HAVE_SOLARIS_CDROM], [1], [Define 1 if you have Solaris CD-ROM support])
+ ;;
+ cygwin*)
+ AC_DEFINE([CYGWIN], [1], [Define 1 if you are compiling using cygwin])
+ AC_DEFINE([HAVE_WIN32_CDROM], [1], [Define 1 if you have MinGW CD-ROM support])
+ LIBCDIO_LIBS="$LIBCDIO_LIBS -lwinmm"
+ LIBVCD_LIBS="$LIBVCD_LIBS -lwinmm"
+ ;;
+ mingw*)
+ AC_DEFINE([MINGW32], [1], [Define 1 if you are compiling using MinGW])
+ AC_DEFINE([HAVE_WIN32_CDROM], [1], [Define 1 if you have MinGW CD-ROM support])
+ ;;
+ freebsd4.*)
+ AC_DEFINE([HAVE_FREEBSD_CDROM], [1], [Define 1 if you have FreeBSD CD-ROM support])
+ ;;
+ *)
+ AC_MSG_WARN(Don't have OS CD-reading support for ${host_os}...)
+ AC_MSG_WARN(Will use generic support.)
+ ;;
+ esac
+ AC_SUBST(LINUX_CDROM_TIMEOUT)
+ AC_SUBST(HAVE_BSDI_CDROM)
+ AC_SUBST(HAVE_DARWIN_CDROM)
+ AC_SUBST(HAVE_FREEBSD_CDROM)
+ AC_SUBST(HAVE_LINUX_CDROM)
+ AC_SUBST(HAVE_SOLARIS_CDROM)
+ AC_SUBST(HAVE_WIN32_CDROM)
+ AC_SUBST(LINUX_CDROM_TIMEOUT)
+ AC_SUBST(LIBVCD_SYSDEP)
+
+ AC_CHECK_FUNCS( bzero memcpy )
+
+ AC_CHECK_MEMBER([struct tm.tm_gmtoff],
+ [AC_DEFINE(HAVE_TM_GMTOFF, 1, [Define if struct tm has the tm_gmtoff member.])],
+ [], [#include <time.h>])
+ fi
+ fi
+
+ AC_DEFINE([LIBCDIO_CONFIG_H], 1, [Get of rid system libcdio build configuration])
+ AC_DEFINE([EXTERNAL_LIBCDIO_CONFIG_H], 1, [Get of rid system libcdio build configuration])
+ AC_SUBST(LIBCDIO_CFLAGS)
+ AC_SUBST(LIBCDIO_LIBS)
+ AC_SUBST(LIBISO9660_LIBS)
+ AC_SUBST(LIBVCD_CFLAGS)
+ AC_SUBST(LIBVCD_LIBS)
+ AC_SUBST(LIBVCDINFO_LIBS)
+ AM_CONDITIONAL(HAVE_VCDNAV, [test "x$internal_vcdnav" = "xno"])
+ AM_CONDITIONAL(ENABLE_VCD, [test "x$enable_vcd" = "xyes"])
+])