Commit e905118c authored by Roger Pau Monne's avatar Roger Pau Monne

libfsimage: add ext4 support for CentOS 5.x

CentOS 5.x forked e2fs ext4 support into a different package called
e4fs, and so headers and library names changed from ext2fs to ext4fs.
Check if ext4fs/ext2fs.h and -lext4fs work, and use that instead of
ext2fs to build libfsimage. This patch assumes that if the ext4fs
library is present it should always be used instead of ext2fs.

This patch includes a rework of the ext2fs check, a new ext4fs check
and a minor modification in libfsimage to use the correct library.
Signed-off-by: default avatarRoger Pau Monne <roger.pau@citrix.com>
Acked-by: default avatarIan Campbell <ian.campbell@citrix.com>
Committed-by: default avatarIan Campbell <ian.campbell@citrix.com>
parent 7eefaa30
...@@ -57,5 +57,5 @@ CONFIG_SYSTEM_LIBAIO:= @system_aio@ ...@@ -57,5 +57,5 @@ CONFIG_SYSTEM_LIBAIO:= @system_aio@
ZLIB := @zlib@ ZLIB := @zlib@
CONFIG_LIBICONV := @libiconv@ CONFIG_LIBICONV := @libiconv@
CONFIG_GCRYPT := @libgcrypt@ CONFIG_GCRYPT := @libgcrypt@
CONFIG_EXT2FS := @libext2fs@ EXTFS_LIBS := @EXTFS_LIBS@
CURSES_LIBS := @CURSES_LIBS@ CURSES_LIBS := @CURSES_LIBS@
...@@ -42,6 +42,9 @@ ...@@ -42,6 +42,9 @@
/* Define curses header to use */ /* Define curses header to use */
#undef INCLUDE_CURSES_H #undef INCLUDE_CURSES_H
/* Define extfs header to use */
#undef INCLUDE_EXTFS_H
/* libutil header file name */ /* libutil header file name */
#undef INCLUDE_LIBUTIL_H #undef INCLUDE_LIBUTIL_H
......
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.67 for Xen Hypervisor 4.2. # Generated by GNU Autoconf 2.67 for Xen Hypervisor 4.3.
# #
# Report bugs to <xen-devel@lists.xen.org>. # Report bugs to <xen-devel@lists.xen.org>.
# #
...@@ -552,8 +552,8 @@ MAKEFLAGS= ...@@ -552,8 +552,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='Xen Hypervisor' PACKAGE_NAME='Xen Hypervisor'
PACKAGE_TARNAME='xen-hypervisor' PACKAGE_TARNAME='xen-hypervisor'
PACKAGE_VERSION='4.2' PACKAGE_VERSION='4.3'
PACKAGE_STRING='Xen Hypervisor 4.2' PACKAGE_STRING='Xen Hypervisor 4.3'
PACKAGE_BUGREPORT='xen-devel@lists.xen.org' PACKAGE_BUGREPORT='xen-devel@lists.xen.org'
PACKAGE_URL='' PACKAGE_URL=''
...@@ -603,7 +603,7 @@ PTHREAD_LIBS ...@@ -603,7 +603,7 @@ PTHREAD_LIBS
PTHREAD_LDFLAGS PTHREAD_LDFLAGS
PTHREAD_CFLAGS PTHREAD_CFLAGS
libgcrypt libgcrypt
libext2fs EXTFS_LIBS
system_aio system_aio
zlib zlib
glib_LIBS glib_LIBS
...@@ -1301,7 +1301,7 @@ if test "$ac_init_help" = "long"; then ...@@ -1301,7 +1301,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures Xen Hypervisor 4.2 to adapt to many kinds of systems. \`configure' configures Xen Hypervisor 4.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
...@@ -1366,7 +1366,7 @@ fi ...@@ -1366,7 +1366,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of Xen Hypervisor 4.2:";; short | recursive ) echo "Configuration of Xen Hypervisor 4.3:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
...@@ -1490,7 +1490,7 @@ fi ...@@ -1490,7 +1490,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
Xen Hypervisor configure 4.2 Xen Hypervisor configure 4.3
generated by GNU Autoconf 2.67 generated by GNU Autoconf 2.67
Copyright (C) 2010 Free Software Foundation, Inc. Copyright (C) 2010 Free Software Foundation, Inc.
...@@ -1792,7 +1792,7 @@ cat >config.log <<_ACEOF ...@@ -1792,7 +1792,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by Xen Hypervisor $as_me 4.2, which was It was created by Xen Hypervisor $as_me 4.3, which was
generated by GNU Autoconf 2.67. Invocation command line was generated by GNU Autoconf 2.67. Invocation command line was
$ $0 $@ $ $0 $@
...@@ -2389,6 +2389,8 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ...@@ -2389,6 +2389,8 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
# Enable/disable options # Enable/disable options
# Check whether --enable-githttp was given. # Check whether --enable-githttp was given.
...@@ -6325,6 +6327,10 @@ else ...@@ -6325,6 +6327,10 @@ else
as_fn_error $? "Could not find libcrypto" "$LINENO" 5 as_fn_error $? "Could not find libcrypto" "$LINENO" 5
fi fi
ac_fn_c_check_header_mongrel "$LINENO" "ext2fs/ext2fs.h" "ac_cv_header_ext2fs_ext2fs_h" "$ac_includes_default"
if test "x$ac_cv_header_ext2fs_ext2fs_h" = x""yes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ext2fs_open2 in -lext2fs" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ext2fs_open2 in -lext2fs" >&5
$as_echo_n "checking for ext2fs_open2 in -lext2fs... " >&6; } $as_echo_n "checking for ext2fs_open2 in -lext2fs... " >&6; }
if test "${ac_cv_lib_ext2fs_ext2fs_open2+set}" = set; then : if test "${ac_cv_lib_ext2fs_ext2fs_open2+set}" = set; then :
...@@ -6362,10 +6368,70 @@ fi ...@@ -6362,10 +6368,70 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ext2fs_ext2fs_open2" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ext2fs_ext2fs_open2" >&5
$as_echo "$ac_cv_lib_ext2fs_ext2fs_open2" >&6; } $as_echo "$ac_cv_lib_ext2fs_ext2fs_open2" >&6; }
if test "x$ac_cv_lib_ext2fs_ext2fs_open2" = x""yes; then : if test "x$ac_cv_lib_ext2fs_ext2fs_open2" = x""yes; then :
libext2fs="y"
$as_echo "#define INCLUDE_EXTFS_H <ext2fs/ext2fs.h>" >>confdefs.h
EXTFS_LIBS="-lext2fs"
fi
fi
ac_fn_c_check_header_mongrel "$LINENO" "ext4fs/ext2fs.h" "ac_cv_header_ext4fs_ext2fs_h" "$ac_includes_default"
if test "x$ac_cv_header_ext4fs_ext2fs_h" = x""yes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ext2fs_open2 in -lext4fs" >&5
$as_echo_n "checking for ext2fs_open2 in -lext4fs... " >&6; }
if test "${ac_cv_lib_ext4fs_ext2fs_open2+set}" = set; then :
$as_echo_n "(cached) " >&6
else else
libext2fs="n" ac_check_lib_save_LIBS=$LIBS
LIBS="-lext4fs $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char ext2fs_open2 ();
int
main ()
{
return ext2fs_open2 ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_ext4fs_ext2fs_open2=yes
else
ac_cv_lib_ext4fs_ext2fs_open2=no
fi fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ext4fs_ext2fs_open2" >&5
$as_echo "$ac_cv_lib_ext4fs_ext2fs_open2" >&6; }
if test "x$ac_cv_lib_ext4fs_ext2fs_open2" = x""yes; then :
$as_echo "#define INCLUDE_EXTFS_H <ext4fs/ext2fs.h>" >>confdefs.h
EXTFS_LIBS="-lext4fs"
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcry_md_hash_buffer in -lgcrypt" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcry_md_hash_buffer in -lgcrypt" >&5
...@@ -7192,7 +7258,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ...@@ -7192,7 +7258,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by Xen Hypervisor $as_me 4.2, which was This file was extended by Xen Hypervisor $as_me 4.3, which was
generated by GNU Autoconf 2.67. Invocation command line was generated by GNU Autoconf 2.67. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
...@@ -7254,7 +7320,7 @@ _ACEOF ...@@ -7254,7 +7320,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\ ac_cs_version="\\
Xen Hypervisor config.status 4.2 Xen Hypervisor config.status 4.3
configured by $0, generated by GNU Autoconf 2.67, configured by $0, generated by GNU Autoconf 2.67,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"
......
...@@ -34,6 +34,7 @@ m4_include([m4/pkg.m4]) ...@@ -34,6 +34,7 @@ m4_include([m4/pkg.m4])
m4_include([m4/curses.m4]) m4_include([m4/curses.m4])
m4_include([m4/pthread.m4]) m4_include([m4/pthread.m4])
m4_include([m4/ptyfuncs.m4]) m4_include([m4/ptyfuncs.m4])
m4_include([m4/extfs.m4])
# Enable/disable options # Enable/disable options
AX_ARG_DEFAULT_DISABLE([githttp], [Download GIT repositories via HTTP]) AX_ARG_DEFAULT_DISABLE([githttp], [Download GIT repositories via HTTP])
...@@ -131,8 +132,7 @@ AC_SUBST(zlib) ...@@ -131,8 +132,7 @@ AC_SUBST(zlib)
AC_CHECK_LIB([aio], [io_setup], [system_aio="y"], [system_aio="n"]) AC_CHECK_LIB([aio], [io_setup], [system_aio="y"], [system_aio="n"])
AC_SUBST(system_aio) AC_SUBST(system_aio)
AC_CHECK_LIB([crypto], [MD5], [], [AC_MSG_ERROR([Could not find libcrypto])]) AC_CHECK_LIB([crypto], [MD5], [], [AC_MSG_ERROR([Could not find libcrypto])])
AC_CHECK_LIB([ext2fs], [ext2fs_open2], [libext2fs="y"], [libext2fs="n"]) AX_CHECK_EXTFS
AC_SUBST(libext2fs)
AC_CHECK_LIB([gcrypt], [gcry_md_hash_buffer], [libgcrypt="y"], [libgcrypt="n"]) AC_CHECK_LIB([gcrypt], [gcry_md_hash_buffer], [libgcrypt="y"], [libgcrypt="n"])
AC_SUBST(libgcrypt) AC_SUBST(libgcrypt)
AX_CHECK_PTHREAD AX_CHECK_PTHREAD
......
...@@ -3,7 +3,7 @@ include $(XEN_ROOT)/tools/Rules.mk ...@@ -3,7 +3,7 @@ include $(XEN_ROOT)/tools/Rules.mk
SUBDIRS-y = common ufs reiserfs iso9660 fat zfs SUBDIRS-y = common ufs reiserfs iso9660 fat zfs
SUBDIRS-$(CONFIG_X86) += xfs SUBDIRS-$(CONFIG_X86) += xfs
ifeq ($(CONFIG_EXT2FS), y) ifneq ($(EXTFS_LIBS), )
SUBDIRS-y += ext2fs-lib SUBDIRS-y += ext2fs-lib
else else
SUBDIRS-y += ext2fs SUBDIRS-y += ext2fs
......
...@@ -4,7 +4,10 @@ LIB_SRCS-y = ext2fs-lib.c ...@@ -4,7 +4,10 @@ LIB_SRCS-y = ext2fs-lib.c
FS = ext2fs-lib FS = ext2fs-lib
FS_LIBDEPS = -lext2fs FS_LIBDEPS = $(EXTFS_LIBS)
# Include configure output (config.h) to headers search path
CFLAGS += -I$(XEN_ROOT)/tools
.PHONY: all .PHONY: all
all: fs-all all: fs-all
......
...@@ -21,8 +21,11 @@ ...@@ -21,8 +21,11 @@
* Use is subject to license terms. * Use is subject to license terms.
*/ */
/* Include output from configure */
#include <config.h>
#include <fsimage_plugin.h> #include <fsimage_plugin.h>
#include <ext2fs/ext2fs.h> #include INCLUDE_EXTFS_H
#include <errno.h> #include <errno.h>
#include <inttypes.h> #include <inttypes.h>
......
AC_DEFUN([AX_CHECK_EXTFS], [
AC_CHECK_HEADER([ext2fs/ext2fs.h], [
AC_CHECK_LIB([ext2fs], [ext2fs_open2], [
AC_DEFINE([INCLUDE_EXTFS_H], [<ext2fs/ext2fs.h>],
[Define extfs header to use])
EXTFS_LIBS="-lext2fs"
])
])
dnl This is a temporary hack for CentOS 5.x, which split the ext4 support
dnl of ext2fs in a different package. Once CentOS 5.x is no longer supported
dnl we can remove this.
AC_CHECK_HEADER([ext4fs/ext2fs.h], [
AC_CHECK_LIB([ext4fs], [ext2fs_open2], [
AC_DEFINE([INCLUDE_EXTFS_H], [<ext4fs/ext2fs.h>],
[Define extfs header to use])
EXTFS_LIBS="-lext4fs"
])
])
AC_SUBST(EXTFS_LIBS)
])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment