Update to 2.0.0 tree from current Fremantle build
[opencv] / configure.in
index 39be932..5fbabbb 100644 (file)
@@ -1,8 +1,8 @@
 # Process this file with autoconf to produce a configure script.
 
 # Set various version strings
-m4_define([opencv_major_version],    [1])
-m4_define([opencv_minor_version],    [1])
+m4_define([opencv_major_version],    [2])
+m4_define([opencv_minor_version],    [0])
 m4_define([opencv_subminor_version], [0])
 m4_define([opencv_version],          [opencv_major_version.opencv_minor_version.opencv_subminor_version])
 
@@ -10,16 +10,16 @@ m4_define([opencv_version],          [opencv_major_version.opencv_minor_version.
 # See: http://www.gnu.org/software/libtool/manual.html#Versioning
 #
 # The string is of the form Current:Revision:Age.
-# 
+#
 # The following lines are taken from the GNU Libtool Manual:
 # Here are a set of rules to help you update your library version information:
-# 
+#
 # Start with version information of 0:0:0 for each libtool library.
-# Update the version information only immediately before a public release of your software. 
+# Update the version information only immediately before a public release of your software.
 # More frequent updates are unnecessary, and only guarantee that the current interface number
 # gets larger faster.
 #
-# 1) If the library source code has changed at all since the last update, 
+# 1) If the library source code has changed at all since the last update,
 #    then increment revision (c:r:a becomes c:r+1:a).
 # 2) If any interfaces have been added, removed, or changed since the last update,
 #    increment current, and set revision to 0.
@@ -27,20 +27,21 @@ m4_define([opencv_version],          [opencv_major_version.opencv_minor_version.
 # 4) If any interfaces have been removed since the last public release, then set age to 0.
 #
 # Never try to set the interface numbers so that they correspond to the release number of your package.
-# This is an abuse that only fosters misunderstanding of the purpose of library versions. Instead, 
-# use the -release flag (see Release numbers), but be warned that every release of your package will 
+# This is an abuse that only fosters misunderstanding of the purpose of library versions. Instead,
+# use the -release flag (see Release numbers), but be warned that every release of your package will
 # not be binary compatible with any other release.
-m4_define([opencv_lt_version],       [2:0:0])
+m4_define([opencv_lt_version], [4:0:0])
 
 # init autotools
-AC_PREREQ(2.60)
+# we need autoconf >= 2.62 beause of several macros in there
+AC_PREREQ(2.63)
 AC_INIT([opencv],[opencv_version],[opencvlibrary-devel@lists.sourceforge.net])
 AC_CONFIG_SRCDIR([opencv.pc.in])
 AC_CONFIG_AUX_DIR([autotools])
 AC_CONFIG_MACRO_DIR([autotools/aclocal])
 
 # put CVS revision of this configure.in into the resulting configure script
-AC_REVISION($Revision: 1.46 $)
+AC_REVISION($Revision: 1.60 $)
 
 # Detect the canonical host and target build environment
 AC_CANONICAL_HOST
@@ -52,7 +53,7 @@ AC_CONFIG_HEADERS([cvconfig.h])
 AM_INIT_AUTOMAKE([1.9])
 AC_PROG_MAKE_SET
 
-# use 'gly maintainer-mode flag to help CVS users that do not want to
+# use ugly maintainer-mode flag to help CVS users that do not want to
 # help developing OpenCV but just need to compile the latest version
 # AM_MAINTAINER_MODE
 
@@ -68,24 +69,38 @@ AC_SUBST(LT_VERSION, [opencv_lt_version])
 AC_DISABLE_STATIC
 AC_LIBTOOL_WIN32_DLL
 
+# Do compilation tests using CXX and CXXCPP and use extension .C for test programs. 
+# Use compilation flags: CPPFLAGS with CXXCPP, and both CPPFLAGS and CXXFLAGS with CXX. 
+AC_LANG(C++)
+
 # checks for programs.
+AC_PROG_CXXCPP
 AC_PROG_CXX
-AC_PROG_CC
-AC_PROG_CPP
 AC_PROG_LIBTOOL
-# AC_SUBST(LD)
-# AC_SUBST(CXXLD)
+
 
 ######################################################################
 # the following interpret 'with' and 'enable' switches.
-# some of these switches trigger checks that can be found further 
+# some of these switches trigger checks that can be found further
 # below in this configure script
 
 # does the user want aggressive optimization?
 AC_ARG_ENABLE([debug],
               [AS_HELP_STRING([--enable-debug],[build debug version without optimization [no]])],
-              [debug=$enableval], 
-              [debug=no])
+              [enable_debug=$enableval],
+              [enable_debug=no])
+
+# does the user want to have automatic guess of suitable optimization options
+AC_ARG_ENABLE([optimization],
+              [AS_HELP_STRING([--enable-optimization],[automatic guess of suitable optimization options [yes]])],
+              [enable_optimization=$enableval],
+              [enable_optimization=yes])
+
+# does the user want to have SSE / SSE2 / SSE3 specified?
+AC_ARG_ENABLE([sse],
+              [AS_HELP_STRING([--enable-sse],[enable SSE(2) intrinsics [automatic]])],
+              [enable_sse=$enableval],
+              [enable_sse=auto])
 
 # does the user want to build demo applications?
 AC_ARG_ENABLE([apps],
@@ -96,29 +111,55 @@ AM_CONDITIONAL([BUILD_APPS], [test x"$enable_apps" = x"yes"])
 
 
 # the following checks reflect the dependencies of OpenCV on other
-# libraries that do the actual work for video I/O or windowing 
+# libraries that do the actual work for video I/O or windowing
 # subsystem. On some platforms there are ambiguities that a user
 # can influence. There is also additional logic to be found in code
 # later code lines that tries to do sensible decisions on what to use
 
 # does the user want to compile python modules as well?
-AC_ARG_WITH([swig], 
+AC_ARG_WITH([native-lapack],
+            [AS_HELP_STRING([--with-native-lapack],[use platform native BLAS and LAPACK [no]])],
+            [with_native_lapack=$withval],
+            [with_native_lapack=no])
+
+# compile and link against OpenMP
+# because of this: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28482
+# we disable OpenMP by default. But one may enable it explicitly with --with-openmp
+#AC_ARG_WITH([openmp],
+#            [AS_HELP_STRING([--with-openmp],[use OpenMP threading [no]])],
+#            [with_openmp=$withval],
+#            [with_openmp=no])
+
+# does the user want to compile python modules as well?
+AC_ARG_WITH([swig],
             [AS_HELP_STRING([--with-swig],[use swig wrapper generator [no]])],
             [with_swig=$withval],
             [with_swig=no])
 
 # does the user want to compile python modules as well?
-AC_ARG_WITH([python], 
+AC_ARG_WITH([python],
             [AS_HELP_STRING([--with-python],[use python for wrapping [yes]])],
             [with_python=$withval],
             [with_python=yes])
 
+# does the user want to compile octave modules as well?
+AC_ARG_WITH([octave],
+            [AS_HELP_STRING([--with-octave],[use octave for wrapping [no]])],
+            [with_octave=$withval],
+            [with_octave=no])
+
 # does the user want OpenCV to use xine video libraries?
 AC_ARG_WITH([xine],
             [AS_HELP_STRING([--with-xine],[use xine libraries (see LICENSE) [no]])],
             [with_xine=$withval],
             [with_xine=no])
 
+# does the user want OpenCV to use the gstreamer multimedia framework?
+AC_ARG_WITH([gstreamer],
+            [AS_HELP_STRING([--with-gstreamer],[use gstreamer multimedia framework (see LICENSE) [no]])],
+            [with_gstreamer=$withval],
+            [with_gstreamer=no])
+
 # does the user want OpenCV to use ffmpeg video libraries?
 AC_ARG_WITH([ffmpeg],
             [AS_HELP_STRING([--with-ffmpeg],[use ffmpeg libraries (see LICENSE) [automatic]])],
@@ -137,6 +178,12 @@ AC_ARG_WITH([v4l],
             [with_v4l=$withval],
             [with_v4l=auto])
 
+# does the user want OpenCV to use the unicap library?
+AC_ARG_WITH([unicap],
+            [AS_HELP_STRING([--with-unicap],[use unicap (see LICENSE) [no]])],
+            [with_unicap=$withval],
+            [with_unicap=no])
+
 # does the user want OpenCV to use image libraries from OS X 10.4?
 AC_ARG_WITH([imageio],
             [AS_HELP_STRING([--with-imageio],[use ImageIO libraries [automatic]])],
@@ -169,73 +216,129 @@ AC_ARG_WITH([gthread],
 
 
 ######################################################################
-# getting the code to compile
-
-# cure annoying default arguments for CFLAGS and CXXFLAGS
-# that autoconf automatically sets in GNU environments if
-# no CFLAGS or CXXFLAGS were manually given
-if test x"$CFLAGS" = "x-g -O2" ; then
-    CFLAGS=""
-fi
-if test x"$CXXFLAGS" = "x-g -O2" ; then
-    CXXFLAGS=""
+# Compiler options
+
+# OpenMP support
+# macro calls AC_SUBST(OPENMP_CXXFLAGS)
+# and brings its own enable/disable switch ("--disable-openmp")
+# AC_OPENMP
+
+# SSE/SSE2/SSE3 support
+if test x"$enable_sse" = "xauto"; then
+  # This macro calls:
+  #   AC_SUBST(SIMD_FLAGS)
+  # And defines:
+  #   HAVE_MMX / HAVE_SSE / HAVE_SSE2 / HAVE_SSE3 / HAVE_SSSE3
+  AX_EXT
+else
+  if test x"$enable_sse" = "xyes"; then
+    AC_DEFINE(HAVE_MMX,,[Support mmx instructions])
+    AC_DEFINE(HAVE_SSE,,[Support SSE (Streaming SIMD Extensions) instructions])
+    AC_DEFINE(HAVE_SSE2,,[Support SSE2 (Streaming SIMD Extensions 2) instructions])
+    #AC_DEFINE(HAVE_SSE3,,[Support SSE3 (Streaming SIMD Extensions 3) instructions])
+    #AC_DEFINE(HAVE_SSSE3,,[Support SSSE3 (Supplemental Streaming SIMD Extensions 3) instructions])
+    
+    SIMD_FLAGS=" -mmmx -msse -msse2"
+    AC_SUBST(SIMD_FLAGS)
+  fi
 fi
 
 
-# see if the user wants aggressive optimizations of the code,
-# check whether to include debugging code
-AC_MSG_CHECKING([whether to build debug version (no optimization)])
-if test x"$debug" = "xyes"; then
-    AC_MSG_RESULT([yes])
-    if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
-        CPPFLAGS="-DDEBUG -D_DEBUG $CPPFLAGS"
-        CXXFLAGS="-ggdb -O0 $CXXFLAGS"
-    fi
+## check whether to include debugging compiler flags
+AC_MSG_CHECKING([whether to build debug version])
+DEBUG_CPPFLAGS=""
+DEBUG_CXXFLAGS=""
+if test x"$enable_debug" = "xyes"; then
+  AC_MSG_RESULT([yes])
+  
+  if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
+    DEBUG_CXXFLAGS="-ggdb"
+  fi
+  
+  DEBUG_CPPFLAGS="-DDEBUG -D_DEBUG"
 else
-    AC_MSG_RESULT([no])
-    AC_MSG_NOTICE( TARGET=$target )
-    case $target in
-    i*86-apple-*)
-        if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
-            # apples g++ fails with '-march=i686' and there are no apple machines older than prescott/core anyway
-            CXXFLAGS="-g -march=prescott -ffast-math -fomit-frame-pointer $CXXFLAGS"
-        fi
-        ;;
-    i686-*-*)
-        if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
-          # default to i686/pentiumpro -- people can override this
-          CXXFLAGS="-g -march=i686 -ffast-math -fomit-frame-pointer $CXXFLAGS"
-        fi
-        ;;
+  AC_MSG_RESULT([no])
+fi
+AC_SUBST(DEBUG_CPPFLAGS)
+AC_SUBST(DEBUG_CXXFLAGS)
+
+
+## see if the user wants aggressive optimizations of the code
+AC_MSG_CHECKING([whether to enable aggressive optimization flags])
+OPTIMIZATION_CPPFLAGS=""
+OPTIMIZATION_CXXFLAGS=""
+FLOAT_STORE_CFLAGS=""
+if test x"$enable_optimization" = "xyes"; then
+  AC_MSG_RESULT([yes])
+  
+  # cure annoying default arguments for CFLAGS and CXXFLAGS
+  # that autoconf automatically sets in GNU environments if
+  # no CFLAGS or CXXFLAGS were manually given
+  #
+  # this is a more or less a hack ...
+  if test x"$CFLAGS" = x"-g -O2" ; then
+    CFLAGS=""
+  fi
+  if test x"$CXXFLAGS" = x"-g -O2" ; then
+    CXXFLAGS=""
+  fi
+  
+  if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
+    
+    # special flag for gcc to work around excess precision bug in cLapack
+    FLOAT_STORE_CFLAGS="-ffloat-store"
+
+    # Due to a misconception, until SVN revision r1713, the case statement
+    # used the value of '--target', not of '--host'
+    case $host in
+    i386-apple-*)
+      # all intel macs have at least prescott instruction set
+      OPTIMIZATION_CXXFLAGS="-fast -g"
+      ;;
+    x86_64-apple-*)
+      # all 64bit intel macs have at least nocona instruction set
+      OPTIMIZATION_CXXFLAGS="-fast -g -march=nocona"
+      ;;
+    i?86-*-*)
+      # okay, we use this default together with the specification of the target architecture
+      # let us just assume, a Pentium 4 would be the minimum platform for OpenCV,
+      # then SSE2 instruction set is available also
+      OPTIMIZATION_CXXFLAGS="-O3 -g -march=pentium4 -ffast-math -fomit-frame-pointer"
+      ;;
+    amd64-*-* | x86_64-*-*)
+      OPTIMIZATION_CXXFLAGS="-O3 -g -march=x86-64 -ffast-math -fomit-frame-pointer"
+      ;;
+    powerpc-apple-*)
+      # Mac OS X 10.4 runs on CPUs >= G4 only
+      OPTIMIZATION_CXXFLAGS="-O3 -falign-loops-max-skip=15 -falign-jumps-max-skip=15 -falign-loops=16 -falign-jumps=16 -falign-functions=16 -ffast-math -fstrict-aliasing -funroll-loops -ftree-loop-linear -ftree-loop-memset -mcpu=G4 -mpowerpc-gpopt -mtune=G5 -fsched-interblock -fgcse-sm -g"
+      ;;
+    powerpc64-apple-*)
+      # There are no 64bit Macs with a CPU that's not a G5
+      OPTIMIZATION_CXXFLAGS="-O3 -falign-loops-max-skip=15 -falign-jumps-max-skip=15 -falign-loops=16 -falign-jumps=16 -falign-functions=16 -ffast-math -fstrict-aliasing -funroll-loops -ftree-loop-linear -ftree-loop-memset -mcpu=G5 -mpowerpc-gpopt -fsched-interblock -fgcse-sm -m64 -g"
+      ;;
     powerpc-*-*)
-        if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
-            # default to G3 processors -- people can override this
-            CXXFLAGS="-g -mcpu=G3 -mtune=G5 -fomit-frame-pointer $CXXFLAGS"
-        fi
-        ;;
+      # generic PowerPCs don't have Apple's 'fast' or 'fastf' switch
+      OPTIMIZATION_CXXFLAGS="-O3 -g -mcpu=G3 -mtune=G4 -fomit-frame-pointer"
+      ;;
     *-*-*)
-        if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
-            CXXFLAGS="-fomit-frame-pointer $CXXFLAGS"
-        fi
-        ;;
+      OPTIMIZATION_CXXFLAGS="-O2 -fomit-frame-pointer"
+      ;;
     esac
-    
-    CPPFLAGS="-DNDEBUG $CPPFLAGS"
-    CXXFLAGS="-O3 $CXXFLAGS"
-fi
-
-if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
-    PY_CXXFLAGS="-Wall -pipe $CXXFLAGS"
-    CXXFLAGS="-Wall -fno-rtti -pipe $CXXFLAGS"
+  fi
+  
+  OPTIMIZATION_CPPFLAGS="-DNDEBUG"
 else
-    PY_CXXFLAGS="$CXXFLAGS"
+  AC_MSG_RESULT([no])
 fi
-AC_SUBST(PY_CXXFLAGS)
+AC_SUBST(OPTIMIZATION_CPPFLAGS)
+AC_SUBST(OPTIMIZATION_CXXFLAGS)
+AC_SUBST(FLOAT_STORE_CFLAGS)
 
-# add libm because it is used by several libraries and OpenCV itself 
+# basic libraries needed by OpenCV
 AC_CHECK_LIB(m,pow)
 AC_CHECK_LIB(dl,dlopen)
 AC_CHECK_LIB(pthread,pthread_create)
+AC_CHECK_LIB(z,gzputs)
 
 # check endianness
 AC_C_BIGENDIAN
@@ -246,12 +349,39 @@ AC_FUNC_ALLOCA
 AC_CHECK_HEADERS([malloc.h])
 AC_CHECK_HEADERS([assert.h])
 AC_CHECK_FUNCS(lrint)
+AC_SEARCH_LIBS([clock_gettime],[rt])
+
+######################################################################
+# BLAS and LAPACK
+
+LAPACK_LIBS=""
+have_native_lapack=no
+if test x"$with_native_lapack" = "xyes"; then
+  # check for Accellerate framework on Mac OS X
+  # 
+  # As of Mac OS X 10.5 blas and lapack exist as standard shared 
+  # libraries, so this check could be replaced by separate checks for
+  # those two libraries as it may be helpful for Linux/Unix variants
+  # as well.
+  AC_CHECK_HEADER([vecLib/clapack.h],
+                [
+                  AC_DEFINE(HAVE_VECLIB,,[BLAS and LAPACK from Accelerate/vecLib framework])
+                  LAPACK_LIBS="-Xlinker -framework -Xlinker vecLib"
+                  have_native_lapack=yes
+                ],
+                [
+                  have_native_lapack=no
+                ])
+fi
+
+AC_SUBST(LAPACK_LIBS)
+AM_CONDITIONAL([NATIVE_LAPACK], [test x"$have_native_lapack" = "xyes"])
 
 
 ######################################################################
 # HighGUI dependencies for windowing system
 
-# honor user selection, 
+# honor user selection,
 # if no selection given check for Carbon first
 CARBON_CFLAGS=""
 CARBON_LIBS=""
@@ -265,13 +395,13 @@ if test x"$with_carbon" = "xyes"; then
                       have_carbon=yes
                     ],
                     [
-                      have_carbon=no 
+                      have_carbon=no
                       with_carbon=no
                     ])
 
     # sanity checks
     if test x"$have_carbon" = "xyes"; then
-    
+
         # if we asked for gtk, this is not ok
         if test x"$with_gtk" = "xyes"; then
             AC_MSG_ERROR([You cannot specify --with-carbon and --with-gtk at the same time])
@@ -292,7 +422,7 @@ AC_SUBST(CARBON_CFLAGS)
 AC_SUBST(CARBON_LIBS)
 AM_CONDITIONAL([BUILD_CARBON], [test x"$have_carbon" = "xyes"])
 
-# use GTK+ 2.x (or later) for windowing 
+# use GTK+ 2.x (or later) for windowing
 # if carbon not present or not wanted (--without-carbon)
 GTK_CFLAGS=""
 GTK_LIBS=""
@@ -307,20 +437,19 @@ else
        with_gtk=yes
     fi
     if test x"$with_gtk" = "xyes"; then
-    
+
         # pkg-config is needed for GTK+
         AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-        if test x"$PKG_CONFIG" == "xno"; then
-            AC_MSG_ERROR([You have to install pkg-config to compile OpenCV with GTK+])
+        if test x"$PKG_CONFIG" = x"no"; then
+            AC_MSG_WARN([You have to install pkg-config to compile OpenCV with GTK+])
+        else
+            PKG_CHECK_MODULES(GTK, "gtk+-2.0 gdk-pixbuf-2.0",
+                              [
+                                have_gtk=yes
+                                AC_DEFINE(HAVE_GTK,,[GTK+ 2.x toolkit])
+                              ],
+                              [ have_gtk=no ])
         fi
-    
-        PKG_CHECK_MODULES(GTK, "gtk+-2.0 gdk-pixbuf-2.0", 
-                          [
-                            have_gtk=yes 
-                            AC_DEFINE(HAVE_GTK,,[GTK+ 2.x toolkit])
-                          ],
-                          [ have_gtk=no ])
-
     else
         # if we get here then --with-gtk was not called with 'yes','no' or 'auto'
         AC_MSG_WARN([unexpected arguments for option --with-gtk, continuing assuming 'no'])
@@ -379,7 +508,7 @@ if test x"$with_quicktime" = "xyes"; then
     if test x"$with_v4l" = "xyes"; then
         AC_MSG_ERROR([You cannot specify --with-quicktime and --with-v4l at the same time])
     fi
-    
+
     # header presence and usability seem to be enough
     AC_CHECK_HEADER([QuickTime/QuickTime.h],
                     [
@@ -387,11 +516,11 @@ if test x"$with_quicktime" = "xyes"; then
                       have_quicktime=yes
                     ],
                     [ have_quicktime=no ])
-    
+
     # specify quicktime libraries
     if test x"$have_quicktime" = "xyes"; then
         QUICKTIME_LIBS="-Xlinker -framework -Xlinker QuickTime -Xlinker -framework -Xlinker QuartzCore"
+
         # don't check alternatives if quicktime was found
         if test x"$with_ffmpeg" = "xauto"; then
             with_ffmpeg=no
@@ -417,6 +546,70 @@ AC_SUBST(QUICKTIME_CFLAGS)
 AC_SUBST(QUICKTIME_LIBS)
 AM_CONDITIONAL([BUILD_QUICKTIME], [test x"$have_quicktime" = "xyes"])
 
+# GStreamer seems to be a nice solution for both reading and writing
+# and even supports some cameras
+GSTREAMER_CFLAGS=""
+GSTREAMER_LIBS=""
+if test x"$with_gstreamer" = "xno"; then
+    have_gstreamer=no
+else
+
+    if test x"$with_ffmpeg" = "xyes"; then
+        AC_MSG_ERROR([You cannot specify --with-gstreamer and --with-ffmpeg at the same time])
+    fi
+
+    # check if ./configure arguments are valid
+    if test x"$with_gstreamer" = "xauto"; then
+       with_gstreamer=yes
+    fi
+    if test x"$with_gstreamer" = "xyes"; then
+
+        # pkg-config is needed for GTK+
+        AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+        if test x"$PKG_CONFIG" == "xno"; then
+            AC_MSG_ERROR([You have to install pkg-config to compile OpenCV with GStreamer])
+        fi
+
+        PKG_CHECK_MODULES(GSTREAMER, "gstreamer-0.10",
+                          [
+                            have_gstreamer=yes
+                            AC_DEFINE(HAVE_GSTREAMER,,[GStreamer multimedia framework])
+                          ],
+                          [ have_gstreamer=no ])
+
+        if test x"$have_gstreamer" = "xyes"; then
+            GSTREAMER_LIBS="$GSTREAMER_LIBS -lgstbase-0.10"
+            with_ffmpeg=no
+        fi
+    else
+        # if we get here then --with-gstreamer was not called with 'yes','no' or 'auto'
+        AC_MSG_WARN([unexpected arguments for option --with-gstreamer, continuing assuming 'no'])
+        have_gstreamer=no
+    fi
+fi
+AC_SUBST(GSTREAMER_CFLAGS)
+AC_SUBST(GSTREAMER_LIBS)
+AM_CONDITIONAL([BUILD_GSTREAMER], [test x"$have_gstreamer" = "xyes"])
+
+# Check for the unicap library
+UNICAP_PACKAGE_LIBS=""
+UNICAP_PACKAGE_CFLAGS=""
+UCIL_PACKAGE_LIBS=""
+UCIL_PACKAGE_CFLAGS=""
+if test x"$with_unicap" = "xno"; then
+    have_unicap=no
+else
+       PKG_CHECK_MODULES(UNICAP_PACKAGE,libunicap)
+       PKG_CHECK_MODULES(UCIL_PACKAGE,libucil)
+       have_unicap=yes
+       AC_DEFINE(HAVE_UNICAP,,[Unicap video capture library])
+fi
+AM_CONDITIONAL([BUILD_UNICAP], [test x"$have_unicap" = "xyes"])
+AC_SUBST(UNICAP_PACKAGE_LIBS)
+AC_SUBST(UNICAP_PACKAGE_CFLAGS)
+AC_SUBST(UCIL_PACKAGE_LIBS)
+AC_SUBST(UCIL_PACKAGE_CFLAGS)
+
 # prefer XINE over FFMPEG for video reading because it is quick, has a cleaner API
 # and allows for easy seeking with some formats
 if test x"$with_xine" = "xno"; then
@@ -453,25 +646,34 @@ if test x"$with_ffmpeg" = "xno"; then
     have_ffmpeg=no
     # FFMPEGLIBS=""
 else
-
+    
+    have_ffmpeg=no
+    have_avcodec=no
+    have_avformat=no
+    
     # check if ./configure arguments are valid
     if test x"$with_ffmpeg" = "xauto"; then
        with_ffmpeg=yes
     fi
+    
     if test x"$with_ffmpeg" = "xyes"; then
-        AC_CHECK_HEADER(ffmpeg/avcodec.h,
-                        AC_SEARCH_LIBS([avcodec_decode_video],[avcodec_pic avcodec],                                      [
-                                       AC_SEARCH_LIBS([av_open_input_file], [avformat_pic avformat],
-                                                    [
-                                                      have_ffmpeg=yes
-                                                      AC_DEFINE(HAVE_FFMPEG,,[FFMpeg video library])
-                                                      FFMPEGLIBS="-lavcodec -lavformat"
-                                                    ],
-                                                    [ have_ffmpeg=no ],
-                                                    [-lavcodec])
-                                     ],
-                                     [ have_ffmpeg=no ]),
-                        [ have_ffmpeg=no ])
+        AC_CHECK_HEADERS([ffmpeg/avcodec.h libavcodec/avcodec.h],[have_avcodec=yes])
+        AC_CHECK_HEADERS([ffmpeg/avformat.h libavformat/avformat.h],[have_avformat=yes])
+        
+        if test x"$have_avcodec"x"$have_avformat" = "xyesxyes" ; then
+            AC_SEARCH_LIBS([avcodec_decode_video],[avcodec_pic avcodec],[
+                AC_SEARCH_LIBS([av_open_input_file], [avformat_pic avformat],[have_ffmpeg=yes],[],[-lavcodec])])
+        fi
+        
+        if test x"$have_ffmpeg" = "xyes" ; then
+            # libswscale is not always necessary, but if it is there, we want to use it
+            AC_CHECK_HEADERS([ffmpeg/swscale.h libswscale/swscale.h],[
+                AC_CHECK_LIB([swscale],[sws_getContext],[FFMPEG_SWSCALE_LIBS="-lswscale"
+                    AC_DEFINE(HAVE_FFMPEG_SWSCALE,,[FFMPEG helper library])])])
+            
+            AC_DEFINE(HAVE_FFMPEG,,[FFMPEG video library])
+            FFMPEGLIBS="-lavcodec -lavformat $FFMPEG_SWSCALE_LIBS"
+        fi
     else
         # if we get here then --with-ffmpeg was not called with 'yes','no' or 'auto'
         AC_MSG_WARN([unexpected arguments for option --with-ffmpeg, continuing assuming 'no'])
@@ -486,6 +688,7 @@ AM_CONDITIONAL([BUILD_FFMPEG], [test x"$have_ffmpeg" = "xyes"])
 if test x"$with_1394libs" = "xno"; then
     have_raw1394=no
     have_dc1394=no
+    have_dc1394_2=no
     # IEEE1394LIBS=""
 else
 
@@ -494,30 +697,41 @@ else
        with_1394libs=yes
     fi
     if test x"$with_1394libs" = "xyes"; then
-    
+
         SAVELIBS="$LIBS"
         have_raw1394=no
         have_dc1394=no
-        
+        have_dc1394_2=no
+
         AC_CHECK_HEADER(libraw1394/raw1394.h,
-                        AC_CHECK_LIB(raw1394, raw1394_new_handle, 
+                        AC_CHECK_LIB(raw1394, raw1394_new_handle,
                                      [
                                        have_raw1394=yes
-                                       LIBS="-lm -lraw1394 $LIBS"
+                                       LIBS="-lraw1394 $LIBS"
                                      ]))
-        
+
         if test x"$have_raw1394" = "xyes"; then
-            AC_CHECK_HEADER(libdc1394/dc1394_control.h,
-                            AC_CHECK_LIB(dc1394_control, dc1394_camera_on, 
+            AC_CHECK_HEADER(dc1394/dc1394.h,
+                            AC_CHECK_LIB(dc1394, dc1394_camera_enumerate,
                                          [
-                                           have_dc1394=yes
-                                           AC_DEFINE(HAVE_DC1394,,[IEEE1394 capturing support])
-                                           AC_EGREP_HEADER(do_extra_buffering, libdc1394/dc1394_control.h,
-                                                           [AC_DEFINE(HAVE_DC1394_095,,[libdc1394 0.9.4 or 0.9.5])])
-                                           IEEE1394LIBS="-lm -lraw1394 -ldc1394_control"
+                                           have_dc1394_2=yes
+                                           AC_DEFINE(HAVE_DC1394_2,,[IEEE1394 capturing support])
+                                           IEEE1394LIBS="-lraw1394 -ldc1394"
                                          ]))
+            
+            if test x"$have_dc1394_2" = "xno"; then
+                AC_CHECK_HEADER(libdc1394/dc1394_control.h,
+                                AC_CHECK_LIB(dc1394_control, dc1394_camera_on,
+                                             [
+                                               have_dc1394=yes
+                                               AC_DEFINE(HAVE_DC1394,,[IEEE1394 capturing support])
+                                               AC_EGREP_HEADER(do_extra_buffering, libdc1394/dc1394_control.h,
+                                                               [AC_DEFINE(HAVE_DC1394_095,,[libdc1394 0.9.4 or 0.9.5])])
+                                               IEEE1394LIBS="-lraw1394 -ldc1394_control"
+                                             ]))
+            fi
         fi
-        
+
         LIBS="$SAVELIBS"
     else
         # if we get here then --with-1394libs was not called with 'yes','no' or 'auto'
@@ -527,8 +741,9 @@ else
 fi
 AC_SUBST(IEEE1394LIBS)
 AM_CONDITIONAL([BUILD_DC1394], [test x"$have_dc1394" = "xyes"])
+AM_CONDITIONAL([BUILD_DC1394_2], [test x"$have_dc1394_2" = "xyes"])
 
-# Video for Linux (V4L) 
+# Video for Linux (V4L)
 # we support version 1 and 2 currently
 if test x"$with_v4l" = "xno"; then
     have_v4l=no
@@ -546,7 +761,7 @@ else
                           have_v4l=yes
                           have_v4l1or2=yes
                         ],
-                        [ 
+                        [
                           have_v4l=no
                           have_v4l1or2=no
                         ])
@@ -620,21 +835,21 @@ if test x"$have_imageio" = "xno" ; then
                                [
                                  have_zlib=yes
                                  AC_DEFINE(HAVE_ZLIB,,[LZ77 compression/decompression library (used for PNG)])
-                                 IMAGELIBS="$IMAGELIBS -lz -lm"
-                                 LIBS="$LIBS -lz -lm"
+                                 IMAGELIBS="$IMAGELIBS -lz"
+                                 LIBS="$LIBS -lz"
                                ]))
 
-  AC_CHECK_HEADER(png.h, 
+  AC_CHECK_HEADER(png.h,
                   [
                     AC_DEFINE(HAVE_PNG_H,,[png.h needs to be included])
                     have_png=yes
                   ])
-  AC_CHECK_HEADER([libpng/png.h], 
+  AC_CHECK_HEADER([libpng/png.h],
                   [
                     AC_DEFINE(HAVE_LIBPNG_PNG_H,,[libpng/png.h needs to be included])
                     have_png=yes
                   ])
-  
+
   if test x"$have_png" = "xyes"; then
     AC_CHECK_LIB(png12, png_read_image,
                  [
@@ -686,10 +901,9 @@ AC_SUBST(IMAGELIBS)
 ######################################################################
 # SWIG wrappers
 
-# currently there is only python.
-# If additional wrapper languages / SWIG modules
-# get available for OpenCV, we will have a --with-LANGUAGE switch
-# for every wrapper language
+# each language should have --with-LANGUAGE switch
+
+# check for python
 if test x"$with_python" = "xyes"; then
     AC_MSG_NOTICE([Checking for necessary tools to build python wrappers])
 
@@ -704,7 +918,7 @@ if test x"$with_python" = "xyes"; then
     if test x"$with_swig" = "xauto"; then
         with_swig=yes
     fi
-    
+
     ### almost ok... just need to check if we have the Python headers ###
 
     # first, save the CPPFLAGS
@@ -736,6 +950,75 @@ else
 fi
 AM_CONDITIONAL([BUILD_PYTHON_WRAPPERS], [test x"$have_python" = "xyes"])
 
+# check for octave
+if test x"$with_octave" = "xyes"; then
+    AC_MSG_NOTICE([Checking for necessary tools to build octave wrappers])
+
+    # find octave and mkoctfile
+    AC_PATH_PROG(OCTAVE,octave)
+    AC_PATH_PROG(MKOCTFILE,mkoctfile)
+
+    if test -z "$OCTAVE"; then
+       AC_MSG_WARN([octave not found, disabling octave wrappers])
+       with_octave=no
+    fi
+    if test -z "$MKOCTFILE"; then
+       AC_MSG_WARN([mkoctfile not found, disabling octave wrappers])
+       with_octave=no
+    fi
+    OCTAVE_INCFLAGS=`$MKOCTFILE -p INCFLAGS`
+    AC_SUBST(OCTAVE_INCFLAGS,[$OCTAVE_INCFLAGS])
+fi
+if test x"$with_octave" = "xyes"; then
+    # check that octave version is at least 2.9.12
+    cat > conftest.m <<'EOF'
+[[a,b,c]]=sscanf([[version()," "]],"%i.%i.%i","C");
+exit(sum([[a,b,c]].*[[1e5,1e3,1]])<209012)
+EOF
+    $OCTAVE --no-init-file conftest.m >& /dev/null || with_octave="no";
+    rm -f conftest.m
+
+    if test x"$with_octave" = "xno"; then
+       AC_MSG_WARN([Octave version < 2.9.12, disabling octave wrappers])
+    fi
+fi
+if test x"$with_octave" = "xyes"; then
+    # if not explicitly forbidden, check for swig also
+    if test x"$with_swig" = "xauto"; then
+        with_swig=yes
+    fi
+
+    # check that we have octave headers
+    OLD_CPPFLAGS=$CPPFLAGS
+    CPPFLAGS="$CPPFLAGS -x c++ $OCTAVE_INCFLAGS"
+    AC_CHECK_HEADER(octave/oct.h,
+        [have_octave=yes],
+        [
+          AC_MSG_WARN([Octave headers not found, disabling octave wrappers])
+          have_octave=no
+        ])
+    
+    # restore the old CPPFLAGS
+    CPPFLAGS=$OLD_CPPFLAGS
+
+    # find Octave arch
+    AC_MSG_CHECKING([for Octave arch])
+    OCTAVE_ARCH=`$OCTAVE -q --eval 'strcat(octave_config_info("canonical_host_type"), "-", octave_config_info("api_version"))'|sed -e 's/ans = //'`
+    AC_MSG_RESULT([$OCTAVE_ARCH])
+    AC_SUBST(OCTAVE_ARCH,[$OCTAVE_ARCH])
+
+else
+    # check if ./configure arguments are valid
+    if test x"$with_octave" = "xno"; then
+        have_octave=no
+    else
+        # if we get here then --with-octave was not called with 'yes','no' or 'auto'
+        AC_MSG_WARN([unexpected arguments for option --with-octave, continuing assuming 'no'])
+        have_octave=no
+    fi
+fi
+AM_CONDITIONAL([BUILD_OCTAVE_WRAPPERS], [test x"$have_octave" = "xyes"])
+
 # check for swig itself
 SWIG=""
 if test x"$with_swig" = "xyes"; then
@@ -749,10 +1032,26 @@ if test x"$with_swig" = "xyes"; then
                AC_PATH_SWIG([1.2.24])
        fi
 
+
     if test -n "$SWIG"; then
         SWIG_ENABLE_CXX()
         SWIG_MULTI_MODULE_SUPPORT()
 
+       # if octave wrappers are enabled, check that swig supports octave
+       if test x"$with_octave" = "xyes"; then
+          AC_MSG_CHECKING([if SWIG supports Octave])
+cat > conftest.i <<EOF
+%module conftest
+EOF
+          $SWIG -c++ -octave conftest.i || AC_MSG_ERROR(SWIG doesn't support Octave modules)
+          AC_MSG_RESULT([yes])
+          rm -f conftest.*
+
+        # specify the flags for swig
+        AC_SUBST([SWIG_OCTAVE_OPT], "-octave")
+
+       fi
+
         # check for swig python library
         SWIG_PYTHON()
         have_swig=yes
@@ -779,80 +1078,53 @@ else
 fi
 AM_CONDITIONAL([UPDATE_SWIG_WRAPPERS], [test x"$have_swig" = "xyes"])
 
-
-######################################################################
-# Parallelization
-#
-#CXXOPENMP="no"
-#
-#AC_ARG_WITH(openmp, dnl
-#  [--with-openmp=COMPILER  use OpenMP supporting compiler [default=no] ],
-#    [CXXOPENMP="$withval"],[CXXOPENMP="no"])
-#if test "$CXXOPENMP" = "no"; then
-#    CXXOPENMP="$CXX"
-#fi
-#
-#AC_SUBST(CXXOPENMP)
-
 AC_SUBST(DEBUG)
 
 AC_CONFIG_FILES([Makefile
 opencv.pc
 opencv.spec
-docs/Makefile
 data/Makefile
-cxcore/Makefile
-cxcore/include/Makefile
-cxcore/src/Makefile
-cv/Makefile
-cv/include/Makefile
-cv/src/Makefile
-cvaux/Makefile
-cvaux/include/Makefile
-cvaux/src/Makefile
-ml/Makefile
-ml/include/Makefile
-ml/src/Makefile
-otherlibs/Makefile
-otherlibs/highgui/Makefile
+include/Makefile
+3rdparty/Makefile
+src/Makefile
 apps/Makefile
-apps/haartraining/Makefile
-apps/haartraining/include/Makefile
-apps/haartraining/src/Makefile
 interfaces/Makefile
 interfaces/swig/Makefile
 interfaces/swig/filtered/Makefile
 interfaces/swig/general/Makefile
 interfaces/swig/python/Makefile
+interfaces/swig/octave/Makefile
 tests/Makefile
-tests/python/Makefile
-tests/cv/Makefile
-tests/cv/src/Makefile
-tests/cxts/Makefile
-tests/cxcore/Makefile
-tests/cxcore/src/Makefile
 utils/Makefile
 samples/Makefile
-samples/c/Makefile
-samples/python/Makefile
 ])
 
 AC_OUTPUT
 
 AC_MSG_RESULT([
 General configuration ================================================
-    Compiler:                 ${CXX} 
+
+    CXX:                      ${CXX}
+    CXXCPP:                   ${CXXCPP}
+    CPPFLAGS:                 ${CPPFLAGS}
     CXXFLAGS:                 ${CXXFLAGS}
-    
+    LDFLAGS:                  ${LDFLAGS}
+
     Install path:             ${prefix}
-    
+
+    Debug flags               ${DEBUG_CPPFLAGS} ${DEBUG_CXXFLAGS}
+    Optimization flags        ${OPTIMIZATION_CPPFLAGS} ${OPTIMIZATION_CXXFLAGS}
+    MMX/SSE/SSE2/SSE3:        ${SIMD_FLAGS}
+    OpenMP support:           ${OPENMP_CXXFLAGS}
+    External BLAS & LAPACK:   ${have_native_lapack}
+
 HighGUI configuration ================================================
 
     Windowing system --------------
     Use Carbon / Mac OS X:    ${have_carbon}
     Use gtk+ 2.x:             ${have_gtk}
     Use gthread:              ${have_gthread}
-    
+
     Image I/O ---------------------
     Use ImageIO / Mac OS X:   ${have_imageio}
     Use libjpeg:              ${have_jpeg}
@@ -860,21 +1132,27 @@ HighGUI configuration ================================================
     Use libpng:               ${have_png}
     Use libtiff:              ${have_tiff}
     Use libjasper:            ${have_jasper}
-    Use libIlmImf:            ${have_ilmimf}
-    
+    Use libIlmImf/OpenEXR:    ${have_ilmimf}
+
     Video I/O ---------------------
     Use QuickTime / Mac OS X: ${have_quicktime}
     Use xine:                 ${have_xine}
+    Use gstreamer:            ${have_gstreamer}
     Use ffmpeg:               ${have_ffmpeg}
     Use dc1394 & raw1394:     ${have_dc1394}
+    Use dc1394_v2 & raw1394:  ${have_dc1394_2}
     Use v4l:                  ${have_v4l}
     Use v4l2:                 ${have_v4l2}
-    
+    Use unicap:               ${have_unicap}
+
 Wrappers for other languages =========================================
+
     SWIG                      ${SWIG}
     Python                    ${have_python}
+    Octave                    ${have_octave}
 
 Additional build settings ============================================
+
     Build demo apps           ${enable_apps}
 
 Now run make ...