Accepting request 602573 from home:jeff_mahoney:branches:filesystems

- Fix building on SLE11:
  * btrfs-progs: convert: fix support for e2fsprogs < 1.42
  * btrfs-progs: build: detect whether -std=gnu90 is supported
  * btrfs-progs: build: autoconf 2.63 compatibility
  * Fixed mismerged addition of libbtrfsutil1 package description
- Added patches:
  * 0001-btrfs-progs-convert-fix-support-for-e2fsprogs-1.42.patch
  * 0002-btrfs-progs-build-autoconf-2.63-compatibility.patch
  * 0003-btrfs-progs-build-detect-whether-std-gnu90-is-suppor.patch

OBS-URL: https://build.opensuse.org/request/show/602573
OBS-URL: https://build.opensuse.org/package/show/filesystems/btrfsprogs?expand=0&rev=294
This commit is contained in:
David Sterba 2018-04-30 14:54:20 +00:00 committed by Git OBS Bridge
parent 832ad0cba9
commit 4d080a91b2
5 changed files with 344 additions and 10 deletions

View File

@ -0,0 +1,69 @@
From 1a9818aa0dcbcd48eadbb122a1433497f758db9a Mon Sep 17 00:00:00 2001
From: Jeff Mahoney <jeffm@suse.com>
Date: Fri, 27 Apr 2018 13:58:41 -0400
Subject: [PATCH 1/3] btrfs-progs: convert: fix support for e2fsprogs < 1.42
Patch-mainline: Submitted, linux-btrfs 26 Apr 2018
Commit 324d4c1857a (btrfs-progs: convert: Add larger device support)
introduced new dependencies on the 64-bit API provided by e2fsprogs.
That API was introduced in v1.42 (along with bigalloc).
This patch maps the following to their equivalents in e2fsprogs < 1.42.
- ext2fs_get_block_bitmap_range2
- ext2fs_inode_data_blocks2
- ext2fs_read_ext_attr2
Since we need to detect and define EXT2_FLAG_64BITS for compatibilty
anyway, it makes sense to use that to detect the older e2fsprogs instead
of defining a new flag ourselves.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
configure.ac | 6 +-----
convert/source-ext2.h | 12 +++++++++++-
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/configure.ac b/configure.ac
index af13a95..2dea1c6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -140,11 +140,7 @@ BTRFSCONVERT_EXT2=0
BTRFSCONVERT_REISERFS=0
if test "x$enable_convert" = xyes; then
if test "x$with_convert" = "xauto" || echo "$with_convert" | grep -q "ext2"; then
- PKG_CHECK_MODULES(EXT2FS, [ext2fs >= 1.42],,
- [PKG_CHECK_MODULES(EXT2FS, [ext2fs],
- [AC_DEFINE([HAVE_OLD_E2FSPROGS], [1],
- [E2fsprogs does not support BIGALLOC])]
- )])
+ PKG_CHECK_MODULES(EXT2FS, [ext2fs])
PKG_CHECK_MODULES(COM_ERR, [com_err])
convertfs="${convertfs:+$convertfs,}ext2"
BTRFSCONVERT_EXT2=1
diff --git a/convert/source-ext2.h b/convert/source-ext2.h
index 80833b2..c321412 100644
--- a/convert/source-ext2.h
+++ b/convert/source-ext2.h
@@ -33,8 +33,18 @@
* BIGALLOC.
* Unlike normal RO compat flag, BIGALLOC affects how e2fsprogs check used
* space, and btrfs-convert heavily relies on it.
+ *
+ * e2fsprogs 1.42 also introduced the 64-bit API. Any file system
+ * that requires it will have EXT4_FEATURE_INCOMPAT_64BIT set and
+ * will fail to open with earlier releases. We can map it to the
+ * older API without risk of corruption.
*/
-#ifdef HAVE_OLD_E2FSPROGS
+#ifndef EXT2_FLAG_64BITS
+#define EXT2_FLAG_64BITS (0)
+#define ext2fs_get_block_bitmap_range2 ext2fs_get_block_bitmap_range
+#define ext2fs_inode_data_blocks2 ext2fs_inode_data_blocks
+#define ext2fs_read_ext_attr2 ext2fs_read_ext_attr
+#define ext2fs_blocks_count(s) ((s)->s_blocks_count)
#define EXT2FS_CLUSTER_RATIO(fs) (1)
#define EXT2_CLUSTERS_PER_GROUP(s) (EXT2_BLOCKS_PER_GROUP(s))
#define EXT2FS_B2C(fs, blk) (blk)
--
1.7.12.4

View File

@ -0,0 +1,30 @@
From ce3c33cd54a4de8a3c49c11806fae195328b4413 Mon Sep 17 00:00:00 2001
From: Jeff Mahoney <jeffm@suse.com>
Date: Fri, 27 Apr 2018 14:50:08 -0400
Subject: [PATCH 2/3] btrfs-progs: build: autoconf 2.63 compatibility
Patch-mainline: Submitted, linux-btrfs 30 Apr 2018
Commit 2e1932e6a38 (btrfs-progs: build: simplify version tracking)
started m4_chomp to strip the newlines from the version file. m4_chomp
was introduced in autoconf 2.64 but SLE11 ships with autoconf 2.63.
For purposes of just stripping the newline, m4_flatten is sufficient.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 2dea1c6..9e5603b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
AC_INIT([btrfs-progs],
- m4_chomp(m4_include([VERSION])),
+ m4_flatten(m4_include([VERSION])),
[linux-btrfs@vger.kernel.org],,
[http://btrfs.wiki.kernel.org])
--
1.7.12.4

View File

@ -0,0 +1,217 @@
From 7b71ff68c7027a1fa9329ad9167625b81ea3aab2 Mon Sep 17 00:00:00 2001
From: Jeff Mahoney <jeffm@suse.com>
Date: Fri, 27 Apr 2018 14:47:28 -0400
Subject: [PATCH 3/3 v2] btrfs-progs: build: detect whether -std=gnu90 is
supported
Patch-mainline: Submitted, linux-btrfs 30 Apr 2018
GCC releases prior to 4.5.0 don't support -std=gnu90 so btrfs-progs won't
build at all on older distros. We can detect whether the compiler
supports -std=gnu90 and fall back to -std=gnu89 if it doesn't.
AX_CHECK_COMPILE_FLAG is the right way to do this, but it depends on
autoconf 2.64. AX_GCC_VERSION has been deprecated, so we'll use that
only for earlier autoconf versions so we can drop it when we drop
support for older autoconf releases.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
Makefile | 1 -
Makefile.inc.in | 1 +
configure.ac | 1 +
m4/ax_check_compile_flag.m4 | 74 +++++++++++++++++++++++++++++++++++++++++++++
m4/ax_gcc_version.m4 | 37 +++++++++++++++++++++++
m4/btrfs_detect_cstd.m4 | 20 ++++++++++++
6 files changed, 133 insertions(+), 1 deletion(-)
create mode 100644 m4/ax_check_compile_flag.m4
create mode 100644 m4/ax_gcc_version.m4
create mode 100644 m4/btrfs_detect_cstd.m4
diff --git a/Makefile b/Makefile
index 5ba76d2..c0eb3d6 100644
--- a/Makefile
+++ b/Makefile
@@ -63,7 +63,6 @@ ABSTOPDIR = $(shell pwd)
TOPDIR := .
# Common build flags
-CSTD = -std=gnu90
CFLAGS = $(SUBST_CFLAGS) \
$(CSTD) \
-include config.h \
diff --git a/Makefile.inc.in b/Makefile.inc.in
index 52410f6..fb32461 100644
--- a/Makefile.inc.in
+++ b/Makefile.inc.in
@@ -4,6 +4,7 @@
export
CC = @CC@
+CSTD = @BTRFS_CSTD_FLAGS@
LN_S = @LN_S@
AR = @AR@
RM = @RM@
diff --git a/configure.ac b/configure.ac
index 9e5603b..4f63bb6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,6 +26,7 @@ AC_CONFIG_SRCDIR([btrfs.c])
AC_PREFIX_DEFAULT([/usr/local])
AC_PROG_CC
+BTRFS_DETECT_CSTD
AC_CANONICAL_HOST
AC_C_CONST
AC_C_VOLATILE
diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4
new file mode 100644
index 0000000..dcabb92
--- /dev/null
+++ b/m4/ax_check_compile_flag.m4
@@ -0,0 +1,74 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+# Check whether the given FLAG works with the current language's compiler
+# or gives an error. (Warnings, however, are ignored)
+#
+# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+# success/failure.
+#
+# If EXTRA-FLAGS is defined, it is added to the current language's default
+# flags (e.g. CFLAGS) when the check is done. The check is thus made with
+# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
+# force the compiler to issue an error when a bad flag is given.
+#
+# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 5
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+ AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+ [AS_VAR_SET(CACHEVAR,[yes])],
+ [AS_VAR_SET(CACHEVAR,[no])])
+ _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_VAR_IF(CACHEVAR,yes,
+ [m4_default([$2], :)],
+ [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
diff --git a/m4/ax_gcc_version.m4 b/m4/ax_gcc_version.m4
new file mode 100644
index 0000000..63914d5
--- /dev/null
+++ b/m4/ax_gcc_version.m4
@@ -0,0 +1,37 @@
+dnl @synopsis AX_GCC_VERSION(MAJOR, MINOR, PATCHLEVEL, [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary check wither gcc is at least version MAJOR.MINOR.PATCHLEVEL
+dnl @category InstalledPackages
+dnl
+dnl Check whether we are using gcc and, if so, whether its version
+dnl is at least MAJOR.MINOR.PATCHLEVEL
+dnl
+dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+dnl success/failure.
+dnl
+dnl @version 2005-05-30
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj@alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_GCC_VERSION],
+[
+AC_REQUIRE([AC_PROG_CC])
+AC_CACHE_CHECK(whether we are using gcc $1.$2.$3 or later, ax_cv_gcc_$1_$2_$3,
+[
+ax_cv_gcc_$1_$2_$3=no
+if test "$GCC" = "yes"; then
+dnl The semicolon after "yes" below is to pacify NeXT's syntax-checking cpp.
+AC_EGREP_CPP(yes, [
+#ifdef __GNUC__
+# if (__GNUC__ > $1) || (__GNUC__ == $1 && __GNUC_MINOR__ > $2) \
+ || (__GNUC__ == $1 && __GNUC_MINOR__ == $2 && __GNUC_PATCHLEVEL__ >= $3)
+ yes;
+# endif
+#endif
+], [ax_cv_gcc_$1_$2_$3=yes])
+fi
+])
+if test "$ax_cv_gcc_$1_$2_$3" = yes; then
+ m4_default([$4], :)
+else
+ m4_default([$5], :)
+fi
+])
diff --git a/m4/btrfs_detect_cstd.m4 b/m4/btrfs_detect_cstd.m4
new file mode 100644
index 0000000..f0c45d9
--- /dev/null
+++ b/m4/btrfs_detect_cstd.m4
@@ -0,0 +1,20 @@
+dnl We prefer -std=gnu90 but gcc versions prior to 4.5.0 don't support
+dnl it. AX_CHECK_COMPILE_FLAG is the right way to determine whether a
+dnl particular version of gcc supports a flag, but it requires autoconf
+dnl 2.64. Since (for now) we still want to support older releases
+dnl that ship with autoconf 2.63, we the also-deprecated AX_GCC_VERSION
+dnl macro there.
+AC_DEFUN([BTRFS_DETECT_CSTD],
+[
+ m4_version_prereq([2.64], [
+ AX_CHECK_COMPILE_FLAG([-std=gnu90],
+ [BTRFS_CSTD_FLAGS=-std=gnu90],
+ [BTRFS_CSTD_FLAGS=-std=gnu89])
+ ], [
+ AX_GCC_VERSION([4], [5], [0],
+ [BTRFS_CSTD_FLAGS=-std=gnu90],
+ [BTRFS_CSTD_FLAGS=-std=gnu89])
+ ])
+ AC_SUBST([BTRFS_CSTD_FLAGS])
+]) dnl BTRFS_DETECT_CSTD
+
--
1.7.12.4

View File

@ -1,3 +1,16 @@
-------------------------------------------------------------------
Mon Apr 30 14:39:07 UTC 2018 - jeffm@suse.com
- Fix building on SLE11:
* btrfs-progs: convert: fix support for e2fsprogs < 1.42
* btrfs-progs: build: detect whether -std=gnu90 is supported
* btrfs-progs: build: autoconf 2.63 compatibility
* Fixed mismerged addition of libbtrfsutil1 package description
- Added patches:
* 0001-btrfs-progs-convert-fix-support-for-e2fsprogs-1.42.patch
* 0002-btrfs-progs-build-autoconf-2.63-compatibility.patch
* 0003-btrfs-progs-build-detect-whether-std-gnu90-is-suppor.patch
-------------------------------------------------------------------
Tue Apr 24 00:00:00 CEST 2018 - dsterba@suse.cz

View File

@ -46,6 +46,9 @@ Source4: setup-btrfs.sh
Source5: sles11-defaults.h
Patch1: mkfs-default-features.patch
Patch2: 0001-btrfs-progs-convert-fix-support-for-e2fsprogs-1.42.patch
Patch3: 0002-btrfs-progs-build-autoconf-2.63-compatibility.patch
Patch4: 0003-btrfs-progs-build-detect-whether-std-gnu90-is-suppor.patch
%if %build_docs
BuildRequires: asciidoc
@ -136,6 +139,15 @@ Group: System/Kernel
Conflicts: udev < %{udev_with_btrfs_builtin}
BuildArch: noarch
%description udev-rules
This package contains the udev rule file for configuring device mapper
devices that are components of btrfs file systems. It is meant to be
used with versions of udev that contain the "built-in" btrfs command
(v190 and newer). Older versions of udev will call the version of
"btrfs ready" contained in the btrfsprogs package, which does the right
thing.
%endif
%package -n libbtrfsutil1
Summary: Utility library for interacting with Btrfs
Group: System/Libraries
@ -155,18 +167,12 @@ Requires: libbtrfsutil1 = %{version}
This package contains the libraries and headers files for developers to
build applications to interface with Btrfs using libbtrfsutil.
%description udev-rules
This package contains the udev rule file for configuring device mapper
devices that are components of btrfs file systems. It is meant to be
used with versions of udev that contain the "built-in" btrfs command
(v190 and newer). Older versions of udev will call the version of
"btrfs ready" contained in the btrfsprogs package, which does the right
thing.
%endif
%prep
%setup -q -n btrfs-progs-v%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%build
./autogen.sh
@ -362,7 +368,6 @@ done
%files -n libbtrfsutil-devel
%defattr(-, root, root)
%dir %{_includedir}
%{_includedir}/btrfsutil.h
%{_libdir}/libbtrfsutil.so