AC_DEFUN([ICL_PUSH_FLAG_VARS],
        [LIBS_SAVE="$LIBS"
        LDFLAGS_SAVE="$LDFLAGS"
        CXXFLAGS_SAVE="$CXXFLAGS"
        CFLAGS_SAVE="$CFLAGS"
        CPPFLAGS_SAVE="$CPPFLAGS"
        CXXCPP_SAVE="$CXXCPP"
        ICL_PC_LIBS_SAVE="$ICL_PC_LIBS"
        ICL_PC_CFLAGS_SAVE="$ICL_PC_CFLAGS"
        ICL_PC_REQ_SAVE="$ICL_PC_REQ"
        ])

AC_DEFUN([ICL_POP_FLAG_VARS],
        [LIBS=$LIBS_SAVE
        LDFLAGS=$LDFLAGS_SAVE
        CXXFLAGS=$CXXFLAGS_SAVE
        CFLAGS=$CFLAGS_SAVE
        CPPFLAGS=$CPPFLAGS_SAVE
        CXXCPP=$CXXCPP_SAVE
        ICL_PC_LIBS=$ICL_PC_LIBS_SAVE
        ICL_PC_CFLAGS=$ICL_PC_CFLAGS_SAVE
        ICL_PC_REQ=$ICL_PC_REQ_SAVE
        ])

#ORDER LIBS, LDFLAGS, CXXFLAGS, CXXCPP, CFLAGS, CPPFLAGS 
# HACK HERE!
AC_DEFUN([ICL_EXTEND_FLAG_VARS],
        [LIBS="${LIBS} $1"
        LDFLAGS="$LDFLAGS $2"
        CXXFLAGS="$CXXFLAGS $3 $4"
        CXXCPP="$CXXCPP $4"
        CFLAGS="$CFLAGS $5"
        CPPFLAGS="$CPPFLAGS $6"])

AC_DEFUN([ICL_WITH_ROOT],
        [AC_ARG_WITH([$1-Root],
            [AS_HELP_STRING([--with-$1-Root],
                            [Set $1-Root directory (default=$2)])],
            [$1_ROOT=$with_$1_Root],
            [$1_ROOT=$2])
        ])

AC_DEFUN([ICL_EXTEND_FLAG_VARS_TMP_FOR],
[ICL_EXTEND_FLAG_VARS(
        [-L${$1_ROOT}/$2],
        [-Wl,-rpath=${$1_ROOT}/$2],
        [-I${$1_ROOT}/$3],
        [-I${$1_ROOT}/$3],
        [-I${$1_ROOT}/$3],
        [-I${$1_ROOT}/$3])
])
AC_DEFUN([SHOW_VAR],[AC_MSG_NOTICE([$1 is $$1])])

AC_DEFUN([ICL_NOTIFY_CHECK],[
AC_MSG_NOTICE([+------------------------------------+])
AC_MSG_NOTICE([| Testing for $1         |])
AC_MSG_NOTICE([+------------------------------------+])
])

AC_DEFUN([ICL_NOTIFY_SUPPORT],[
        if test "${HAVE_$1}" = "TRUE" ; then
          $1_SUPPORTED="enabled "
        else
          $1_SUPPORTED="disabled"
        fi
        AC_MSG_NOTICE([| $2 : ${$1_SUPPORTED}                  |])
        ])

AC_DEFUN([ICL_ADD_PACKAGE_IF],
        [if test $2 ; then export ICL_BUILD_PACKAGES="$ICL_BUILD_PACKAGES $1" ; fi])


AC_DEFUN([ICL_EXTEND_PC_FLAGS],[
ICL_PC_LIBS="$ICL_PC_LIBS $1"
ICL_PC_CFLAGS="$ICL_PC_CFLAGS $2"
ICL_PC_REQ="$ICL_PC_REQ $3"])


# ICL_DEF_VARS(package,libs,ldflags,cxxflags,cxxcpp)
# Registers libs,cflags,... for given external
# package name.
# created variables: e.g.  ICL_${package}_LIBS 
AC_DEFUN([ICL_DEF_VARS],[
ICL_$1_LIBS="$2"
ICL_$1_LDFLAGS="$3"
#ICL_$1_CXXFLAGS="$4 $5"
ICL_$1_CXXFLAGS="$4"
ICL_$1_CXXCPP="$5"
ICL_$1_LIBS_PC="$2"
ICL_$1_LDFLAGS_PC="$3"
ICL_$1_CXXFLAGS_PC="$4 $5"
ICL_$1_CXXCPP_PC="$5"
])

# ICL_DEF_VARS_FROM_PC(package,pc-name)
# extracts xcflags and libs from given package config
# package name and create appropriate configuration
# variables from this. Furthermore -Wl,-rpath= 
# LDFLAGS are automatically created
AC_DEFUN([ICL_DEF_VARS_FROM_PC],[
export PKG_CONFIG_PATH="$$1_ROOT/lib/pkgconfig:$PKG_CONFIG_PATH"
ICL_$1_LIBS=`pkg-config --libs-only-L $2`
ICL_$1_LDFLAGS=`echo $ICL_$1_LIBS | sed "s|-L|-Wl,-rpath=|g"`
ICL_$1_LIBS="$ICL_$1_LIBS `pkg-config --libs-only-l $2`"
ICL_$1_CXXFLAGS=`pkg-config --cflags-only-I $2`
ICL_$1_CXXCPP="`pkg-config --cflags-only-other $2` -DHAVE_$1"
ICL_$1_REQUIRES_PC="$ICL_$1_REQUIRES_PC $2"
ICL_$1_CXXCPP_PC="$ICL_$1_CXXCPP_PC -DHAVE_$1"
])

# ICL_USE_EXTERNAL_PACKAGE_IN(icl-package,external-package)
# This macro is use if an icl-package $1
# actually needs to be compiled and linked agains an
# external package $1
# Internally the icl-package name specific variables are extended
AC_DEFUN([ICL_USE_EXTERNAL_PACKAGE_IN],[
$1_LIBS="$$1_LIBS $ICL_$2_LIBS"
$1_CXXFLAGS="$$1_CXXFLAGS $ICL_$2_CXXFLAGS"
$1_LDFLAGS="$$1_LDFLAGS $ICL_$2_LDFLAGS"
$1_CXXCPP="$$1_CXXCPP $ICL_$2_CXXCPP"
$1_LIBS_PC="$$1_LIBS_PC $ICL_$2_LIBS_PC"
$1_CXXFLAGS_PC="$$1_CXXFLAGS_PC $ICL_$2_CXXFLAGS_PC"
$1_LDFLAGS_PC="$$1_LDFLAGS_PC $ICL_$2_LDFLAGS_PC"
$1_CXXCPP_PC="$$1_CXXCPP_PC $ICL_$2_CXXCPP_PC"
$1_REQUIRES_PC="$$1_REQUIRES_PC $ICL_$2_REQUIRES_PC"
])

# ICL_USE_EXTERNAL_PACKAGE_IN(icl-package,input-package)
AC_DEFUN([ICL_USE_INTERNAL_PACKAGE_IN],[
$1_LIBS="$$1_LIBS $$2_LIBS"
$1_CXXFLAGS="$$1_CXXFLAGS $$2_CXXFLAGS"
$1_LDFLAGS="$$1_LDFLAGS $$2_LDFLAGS"
$1_CXXCPP="$$1_CXXCPP $$2_CXXCPP"
$1_REQUIRES_PC="$$1_REQUIRES_PC $2"
])

# ICL_SUBST_VARIABLES_FOR(icl-package)
AC_DEFUN([ICL_SUBST_VARIABLES_FOR],[
AC_SUBST([$1_CXXFLAGS])
AC_SUBST([$1_CXXCPP])
AC_SUBST([$1_LDFLAGS])
AC_SUBST([$1_LIBS])
])

# ICL_STRIP_FLAGS_FOR(icl-package)
AC_DEFUN([ICL_STRIP_FLAGS_FOR],[
$1_LIBS=`echo ${$1_LIBS} | sed "s|-L/usr/lib | |g"`
$1_LIBS=`echo ${$1_LIBS} | sed "s|-L/lib | |g"`
$1_LDFLAGS=`echo ${$1_LDFLAGS} | sed "s|-Wl,-rpath=/usr/lib | |g"`
$1_LDFLAGS=`echo ${$1_LDFLAGS} | sed "s|-Wl,-rpath=/lib | |g"`
$1_CXXFLAGS=`echo ${$1_CXXFLAGS} | sed "s|-I/usr/include | |g"`
$1_CXXFLAGS=`echo ${$1_CXXFLAGS} | sed "s|-I/include | |g"`
$1_LIBS_PC=`echo ${$1_LIBS_PC} | sed "s|-L/usr/lib | |g"`
$1_LIBS_PC=`echo ${$1_LIBS_PC} | sed "s|-L/lib | |g"`
$1_LDFLAGS_PC=`echo ${$1_LDFLAGS_PC} | sed "s|-Wl,-rpath=/usr/lib | |g"`
$1_LDFLAGS_PC=`echo ${$1_LDFLAGS_PC} | sed "s|-Wl,-rpath=/lib | |g"`
$1_CXXFLAGS_PC=`echo ${$1_CXXFLAGS_PC} | sed "s|-I/usr/include | |g"`
$1_CXXFLAGS_PC=`echo ${$1_CXXFLAGS_PC} | sed "s|-I/include | |g"`
])

# ICL_STRIP_AND_SUBST_FLAGS_FOR(icl-package)
AC_DEFUN([ICL_STRIP_AND_SUBST_FLAGS_FOR],[
ICL_STRIP_FLAGS_FOR($1)
ICL_SUBST_VARIABLES_FOR($1)
])


# ICL_PC_ENTRY_FOR(icl-package, text)
AC_DEFUN([ICL_PC_ENTRY_FOR],[echo "$2" >> $1.pc])

# ICL_PC_ROOT_ENTRY_FOR(icl-package, external-package)
AC_DEFUN([ICL_PC_ROOT_ENTRY_FOR],[
if test "${HAVE_$2}" = "TRUE" ; then
   ICL_PC_ENTRY_FOR([$1],[$2_ROOT=${$2_ROOT}])
else
   ICL_PC_ENTRY_FOR([$1],[$2_ROOT=DISABLED])
fi  
])

# ICL_PC_ROOT_ENTRIES_FOR(icl-package)
AC_DEFUN([ICL_PC_ROOT_ENTRIES_FOR],[
ICL_PC_ROOT_ENTRY_FOR([$1],[IPP])
ICL_PC_ROOT_ENTRY_FOR([$1],[MKL])
ICL_PC_ROOT_ENTRY_FOR([$1],[LIBDC1349])
ICL_PC_ROOT_ENTRY_FOR([$1],[UNICAP])
ICL_PC_ROOT_ENTRY_FOR([$1],[OPENGL])
ICL_PC_ROOT_ENTRY_FOR([$1],[XINE])
ICL_PC_ROOT_ENTRY_FOR([$1],[QT])
ICL_PC_ROOT_ENTRY_FOR([$1],[LIBJPEG])
ICL_PC_ROOT_ENTRY_FOR([$1],[LIBZ])
ICL_PC_ROOT_ENTRY_FOR([$1],[VIDEODEV])
ICL_PC_ROOT_ENTRY_FOR([$1],[SVS])
ICL_PC_ROOT_ENTRY_FOR([$1],[XCF])
ICL_PC_ROOT_ENTRY_FOR([$1],[IMAGEMAGICK])
ICL_PC_ROOT_ENTRY_FOR([$1],[LIBMESASR])
ICL_PC_ROOT_ENTRY_FOR([$1],[OPENCV])
])

# ICL_CREATE_PC_FOR(icl-package,what has to be true)
AC_DEFUN([ICL_CREATE_PC_FOR],[
rm -rf $1.pc
if [[ $2 == "TRUE" ]] ; then
ICL_PC_ENTRY_FOR([$1],[prefix=${prefix}])
ICL_PC_ENTRY_FOR([$1],[exec_prefix=\${prefix}])
ICL_PC_ENTRY_FOR([$1],[bindir=\${prefix}/bin])
ICL_PC_ENTRY_FOR([$1],[libdir=\${prefix}/lib])
ICL_PC_ENTRY_FOR([$1],[datadir\${prefix}/share/data])
ICL_PC_ENTRY_FOR([$1],[includedir=\${prefix}/include])
ICL_PC_ENTRY_FOR([$1],[package=$1])
ICL_PC_ENTRY_FOR([$1],[])
ICL_PC_ROOT_ENTRIES_FOR([$1])
ICL_PC_ENTRY_FOR([$1],[])
ICL_PC_ENTRY_FOR([$1],[Name: $1])
ICL_PC_ENTRY_FOR([$1],[Description: ICL's $1 package])
ICL_PC_ENTRY_FOR([$1],[Version: $PACKAGE_VERSION])
ICL_PC_ENTRY_FOR([$1],[])
ICL_PC_ENTRY_FOR([$1],[Requires:${$1_REQUIRES_PC}])
ICL_PC_ENTRY_FOR([$1],[])
ICL_PC_ENTRY_FOR([$1],[Libs: -L${libdir} -l$1 -Wl,-rpath=${libdir} ${$1_LIBS_PC} ${$1_LDFLAGS_PC}])
ICL_PC_ENTRY_FOR([$1],[])
ICL_PC_ENTRY_FOR([$1],[Cflags: -I${includedir}/ICL ${$1_CXXFLAGS_PC} ${$1_CXXCPP_PC}])
fi
])

# ICL_CREATE_ICL_PC() no parameters
AC_DEFUN([ICL_CREATE_ICL_PC],[
rm -rf icl.pc
ICL_PC_ENTRY_FOR([icl],[prefix=${prefix}])
ICL_PC_ENTRY_FOR([icl],[exec_prefix=\${prefix}])
ICL_PC_ENTRY_FOR([icl],[bindir=\${prefix}/bin])
ICL_PC_ENTRY_FOR([icl],[libdir=\${prefix}/lib])
ICL_PC_ENTRY_FOR([icl],[datadir\${prefix}/share/data])
ICL_PC_ENTRY_FOR([icl],[includedir=\${prefix}/include])
ICL_PC_ENTRY_FOR([icl],[package=icl])
ICL_PC_ENTRY_FOR([icl],[])
ICL_PC_ROOT_ENTRIES_FOR([icl])
ICL_PC_ENTRY_FOR([icl],[])
ICL_PC_ENTRY_FOR([icl],[Name: icl])
ICL_PC_ENTRY_FOR([icl],[Description: Image Component Library (ICL)])
ICL_PC_ENTRY_FOR([icl],[Version: $PACKAGE_VERSION])
ICL_PC_ENTRY_FOR([icl],[])
ICL_PC_ENTRY_FOR([icl],[Requires:$ICL_BUILD_PACKAGES])
ICL_PC_ENTRY_FOR([icl],[])
ICL_PC_ENTRY_FOR([icl],[Libs:])
ICL_PC_ENTRY_FOR([icl],[])
ICL_PC_ENTRY_FOR([icl],[Cflags:])
])

# ICL_DEF_EXAMPLE_FLAGS_FOR(for which package, include which other packages)
AC_DEFUN([ICL_DEF_EXAMPLE_FLAGS_FOR],[
$1_EXAMPLE_LDFLAGS=`PKG_CONFIG_PATH=.:$PKG_CONFIG_PATH pkg-config --libs $2`
$1_EXAMPLE_CXXFLAGS=`PKG_CONFIG_PATH=.:$PKG_CONFIG_PATH pkg-config --cflags $2`
$1_EXAMPLE_CXXFLAGS="-I../../include $$1_EXAMPLE_CXXFLAGS"
for T in ${ICL_BUILD_PACKAGES} ; do 
  $1_EXAMPLE_LDFLAGS="-L../../$T/lib $$1_EXAMPLE_LDFLAGS" ;
done
AC_SUBST($1_EXAMPLE_LDFLAGS)
AC_SUBST($1_EXAMPLE_CXXFLAGS)
])