2009-07-16 18:46:13

by Scott James Remnant

[permalink] [raw]
Subject: [PATCH] configure: Disable libblkid by default

Since util-linux-ng now builds libblkid by default, e2fsprogs
should not do so.

Signed-off-by: Scott James Remnant <scott-GeWIH/[email protected]>
---
configure | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
configure.in | 21 +++++++-----
2 files changed, 94 insertions(+), 20 deletions(-)

diff --git a/configure b/configure
index 769dc09..5c272d8 100755
--- a/configure
+++ b/configure
@@ -1499,7 +1499,7 @@ Optional Features:
--enable-blkid-debug enable blkid debugging
--disable-testio-debug disable the use of the test I/O manager for debugging
--disable-libuuid do not build private uuid library
- --disable-libblkid do not build private blkid library
+ --enable-libblkid build private blkid library
--disable-debugfs disable support of debugfs program
--disable-imager disable support of e2image program
--disable-resizer disable support of e2resize program
@@ -4684,18 +4684,89 @@ $as_echo "Enabling private blkid library" >&6; }
fi

else
- LIBBLKID='$(LIB)/libblkid'$LIB_EXT
-DEPLIBBLKID=$LIBBLKID
-STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
-DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
-PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
-DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
-cat >>confdefs.h <<\_ACEOF
-#define CONFIG_BUILD_FINDFS 1
+ if test -z "$PKG_CONFIG"; then
+ { { $as_echo "$as_me:$LINENO: error: pkg-config not installed; please install it." >&5
+$as_echo "$as_me: error: pkg-config not installed; please install it." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for blkid_get_cache in -lblkid" >&5
+$as_echo_n "checking for blkid_get_cache in -lblkid... " >&6; }
+if test "${ac_cv_lib_blkid_blkid_get_cache+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lblkid $LIBBLKID $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 blkid_get_cache ();
+int
+main ()
+{
+return blkid_get_cache ();
+ ;
+ return 0;
+}
_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_blkid_blkid_get_cache=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_blkid_blkid_get_cache=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_blkid_blkid_get_cache" >&5
+$as_echo "$ac_cv_lib_blkid_blkid_get_cache" >&6; }
+if test "x$ac_cv_lib_blkid_blkid_get_cache" = x""yes; then
+ LIBBLKID=`$PKG_CONFIG --libs blkid`;
+ STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`
+else
+ { { $as_echo "$as_me:$LINENO: error: external blkid library not found" >&5
+$as_echo "$as_me: error: external blkid library not found" >&2;}
+ { (exit 1); exit 1; }; }
+fi

-{ $as_echo "$as_me:$LINENO: result: Enabling private blkid library by default" >&5
-$as_echo "Enabling private blkid library by default" >&6; }
+BLKID_CMT=#
+{ $as_echo "$as_me:$LINENO: result: Disabling private blkid library by default" >&5
+$as_echo "Disabling private blkid library by default" >&6; }

fi

diff --git a/configure.in b/configure.in
index d11faec..25b9427 100644
--- a/configure.in
+++ b/configure.in
@@ -463,7 +463,7 @@ PROFILED_LIBBLKID=
DEPPROFILED_LIBBLKID=
BLKID_CMT=
AC_ARG_ENABLE([libblkid],
-[ --disable-libblkid do not build private blkid library],
+[ --enable-libblkid build private blkid library],
if test "$enableval" = "no"
then
if test -z "$PKG_CONFIG"; then
@@ -488,14 +488,17 @@ else
AC_MSG_RESULT([Enabling private blkid library])
fi
,
-LIBBLKID='$(LIB)/libblkid'$LIB_EXT
-DEPLIBBLKID=$LIBBLKID
-STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
-DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
-PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
-DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
-AC_DEFINE(CONFIG_BUILD_FINDFS)
-AC_MSG_RESULT([Enabling private blkid library by default])
+if test -z "$PKG_CONFIG"; then
+ AC_MSG_ERROR([pkg-config not installed; please install it.])
+fi
+
+AC_CHECK_LIB(blkid, blkid_get_cache,
+ [LIBBLKID=`$PKG_CONFIG --libs blkid`;
+ STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`],
+ [AC_MSG_ERROR([external blkid library not found])],
+ [$LIBBLKID])
+BLKID_CMT=#
+AC_MSG_RESULT([Disabling private blkid library by default])
)
AC_SUBST(LIBBLKID)
AC_SUBST(DEPLIBBLKID)
--
1.6.0.5


2009-07-17 14:36:37

by Theodore Y. Ts'o

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Thu, Jul 16, 2009 at 07:46:13PM +0100, Scott James Remnant wrote:
> Since util-linux-ng now builds libblkid by default, e2fsprogs
> should not do so.

I'm not going to be applying these patches for quite some time. I'd
much rather have packaging scripts that *know* they will be packaging
alongside util-linux-ng use --disable-libblkid, etc. so we don't break
things for folks who might need to build e2fsprogs for distributions
that are still using util-linux --- which at the moment still have the
vast majority of the installed base, and every so often people do
actually care about running updated filesystem utilities on an older
enterprise distribution.

The at the minimum I'll want to make sure that the debian/rules file
packaged with e2fsprogs can build both for util-linux and
util-linux-ng for similar reasons, especially since Lamont hasn't
gotten back to us about potentially getting util-linux-ng packaged for
Debian yet.

- Ted

2009-07-17 14:54:39

by Scott James Remnant

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Fri, 2009-07-17 at 10:36 -0400, Theodore Tso wrote:

> On Thu, Jul 16, 2009 at 07:46:13PM +0100, Scott James Remnant wrote:
> > Since util-linux-ng now builds libblkid by default, e2fsprogs
> > should not do so.
>
> I'm not going to be applying these patches for quite some time. I'd
> much rather have packaging scripts that *know* they will be packaging
> alongside util-linux-ng use --disable-libblkid, etc. so we don't break
> things for folks who might need to build e2fsprogs for distributions
> that are still using util-linux --- which at the moment still have the
> vast majority of the installed base, and every so often people do
> actually care about running updated filesystem utilities on an older
> enterprise distribution.
>
But you didn't accept those patches I sent either.

> The at the minimum I'll want to make sure that the debian/rules file
> packaged with e2fsprogs can build both for util-linux and
> util-linux-ng for similar reasons, especially since Lamont hasn't
> gotten back to us about potentially getting util-linux-ng packaged for
> Debian yet.
>
I've done the packaging for him, it's just waiting on him to get back
home to sponsor the uploads.

Scott
--
Scott James Remnant
scott-GeWIH/[email protected]


Attachments:
signature.asc (197.00 B)
This is a digitally signed message part

2009-07-17 15:02:07

by Theodore Y. Ts'o

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Fri, Jul 17, 2009 at 03:54:39PM +0100, Scott James Remnant wrote:
> > I'm not going to be applying these patches for quite some time. I'd
> > much rather have packaging scripts that *know* they will be packaging
> > alongside util-linux-ng use --disable-libblkid, etc. so we don't break
> > things for folks who might need to build e2fsprogs for distributions
> > that are still using util-linux --- which at the moment still have the
> > vast majority of the installed base, and every so often people do
> > actually care about running updated filesystem utilities on an older
> > enterprise distribution.
>
> But you didn't accept those patches I sent either.

If I recall correctly the last set of patches unconditionally used
--disable-libblkid, and what I need is.....

> > ... at the minimum I'll want to make sure that the debian/rules file
> > packaged with e2fsprogs can build both for util-linux and
> > util-linux-ng for similar reasons, especially since Lamont hasn't
> > gotten back to us about potentially getting util-linux-ng packaged for
> > Debian yet.

So the patch ideal patch I'd like to see is one where you can toggle a
flag and debian/rules will either build for util-linux or
util-linux-ng. If you've sent such a patch, my apologies for
overlooking it, but as I recall the only patch I got made the
unconditional changes to debian/rules. When I commented on that you
said that you understood that was just a proof-of-concept patch, and
so I let things drop.

> I've done the packaging for him, it's just waiting on him to get back
> home to sponsor the uploads.

Are the .deb packages somewhere where I can examine them?

- Ted

2009-07-17 15:14:54

by Scott James Remnant

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Fri, 2009-07-17 at 11:02 -0400, Theodore Tso wrote:

> > > ... at the minimum I'll want to make sure that the debian/rules file
> > > packaged with e2fsprogs can build both for util-linux and
> > > util-linux-ng for similar reasons, especially since Lamont hasn't
> > > gotten back to us about potentially getting util-linux-ng packaged for
> > > Debian yet.
>
> So the patch ideal patch I'd like to see is one where you can toggle a
> flag and debian/rules will either build for util-linux or
> util-linux-ng. If you've sent such a patch, my apologies for
> overlooking it
>
I did, it's the patches that are applied to the Ubuntu source package:

http://kernel.ubuntu.com/git?p=scott/e2fsprogs.git;a=commit;h=d69bff01e2c034c7d620f7c0baf9b700761034a4

http://kernel.ubuntu.com/git?p=scott/e2fsprogs.git;a=commit;h=1e869195141920331b00c0d594898b8b322e07a3

http://kernel.ubuntu.com/git?p=scott/e2fsprogs.git;a=commit;h=2177ed0c6a8f83afa7a9fbef0c04b699c3d52238

> > I've done the packaging for him, it's just waiting on him to get back
> > home to sponsor the uploads.
>
> Are the .deb packages somewhere where I can examine them?
>
Yes, they're in Ubuntu.

Scott
--
Scott James Remnant
[email protected]


Attachments:
signature.asc (197.00 B)
This is a digitally signed message part

2009-07-19 11:56:17

by Theodore Y. Ts'o

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Fri, Jul 17, 2009 at 04:14:54PM +0100, Scott James Remnant wrote:
> > So the patch ideal patch I'd like to see is one where you can toggle a
> > flag and debian/rules will either build for util-linux or
> > util-linux-ng. If you've sent such a patch, my apologies for
> > overlooking it
> >
> I did, it's the patches that are applied to the Ubuntu source package:

I've attached the cleaned up version which I've just checked into
e2fsprogs below. I've created a single switch, UTIL_LINUX_NG=yes,
since the DISABLE_BLKID and DISABLE_UUID switches were never
orthogonal (the combination !DISABLE_BLKID and DISABLE_UUID wouldn't
do the right thing), and DISABLE_BLKID also disabled fsck as a
surprising side-effect.

I also changed the generation of debian/control from being automatic
to being something which must be manually done by the maintainer;
that's because dpkg-buildpackage, and in particular, dpkg-source,
looks at the debian/control file before debian/rules has a chance to
create it.

> > > I've done the packaging for him, it's just waiting on him to get back
> > > home to sponsor the uploads.
> >
> > Are the .deb packages somewhere where I can examine them?
> >
> Yes, they're in Ubuntu.

I just took a quick look at them, and it appears that they are missing
the libblkid1-dbg, libuuid1-dbg, and uuid-runtime-dbg packages.

Also, apparently no once noticed until now, but there's a bug in the
util-linux-ng's uuid.sym file. The uuid_pack and uuid_unpack symbols
are missing, because someone forgot to include them in the uuid.sym
file. The debian symbol generation system which I see you carefully
moved over detected the problem, but you apparently didn't take a
close enough look at its output to detect the warning messages.

BTW, **why** is util-linux-ng gratuitously introducing backwards
incompatibility such that packages built with util-linux-ng won't work
with the older shared libraries? There's no reason to do this.

There is a hint in the (obsolete) comments in uuid.sym that suggests a
reason why, but it's not justified for libuuid:

/*
* The symbol versioning ensures that a new application requiring symbol foo()
* can't run with old libblkid.so not providing foo() - the global SONAME
* version info can't enforce this since we never change the SONAME.
*
* The original libuuid from e2fsprogs (<=1.41.5) does not to use
* symbol versioning -- all the original symbols are in UUID_1.0 now.
*/

Argh, util-linux-ng 2.16 has already been released; is it too late to
undo this change?

- Ted

commit 95f65c3d70a7a883c3c98d7f53feed970dc64271
Author: Theodore Ts'o <[email protected]>
Date: Sat Jul 18 22:14:58 2009 -0400

debian: Allow building with util-linux-ng

If building with util-linux-ng, we will use the external libblkid and
libuuid, as well as disabling the internal fsck.

Signed-off-by: "Theodore Ts'o" <[email protected]>

diff --git a/debian/control b/debian/control.in
similarity index 95%
rename from debian/control
rename to debian/control.in
index f930ddd..f0f364f 100644
--- a/debian/control
+++ b/debian/control.in
@@ -2,7 +2,11 @@ Source: e2fsprogs
Section: admin
Priority: required
Maintainer: Theodore Y. Ts'o <[email protected]>
-Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, pkg-config, dietlibc-dev (>> 0.30) [alpha amd64 arm hppa i386 ia64 powerpc ppc64 s390 sparc], debhelper (>= 7.0)
+ifdef(`UTIL_LINUX_NG',
+``Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, pkg-config, dietlibc-dev (>> 0.30) [alpha amd64 arm hppa i386 ia64 powerpc ppc64 s390 sparc], debhelper (>= 7.0), m4, libblkid-dev (>= 2.16), uuid-dev (>= 2.16)
+'',
+``Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, pkg-config, dietlibc-dev (>> 0.30) [alpha amd64 arm hppa i386 ia64 powerpc ppc64 s390 sparc], debhelper (>= 7.0), m4
+'')dnl
Standards-Version: 3.8.2
Homepage: http://e2fsprogs.sourceforge.net

@@ -70,7 +74,7 @@ Description: command-line interface parsing library - headers and static librari
It was originally inspired by the Multics SubSystem library.
.
This package contains the development environment for the ss library.
-
+ifdef(`UTIL_LINUX_NG',,``
Package: libuuid1
Section: libs
Depends: passwd, ${shlibs:Depends}
@@ -174,6 +178,7 @@ Description: block device id library - headers and static libraries
system instead.
.
This package contains the development environment for the blkid library.
+'')dnl

Package: e2fsprogs-udeb
XC-Package-Type: udeb
@@ -245,7 +250,7 @@ Description: debugging information for e2fsprogs
and its libraries, contained in the e2fsprogs and e2fsck-static packages.
The debug information is used for execution tracing and core
dump analysis.
-
+ifdef(`UTIL_LINUX_NG',,``
Package: uuid-runtime-dbg
Section: debug
Priority: extra
@@ -256,6 +261,7 @@ Description: debugging information for uuid-runtime
uuid runtime programs, contained in the uuid-runtime package.
The debugging information is used for execution tracing and core
dump analysis.
+'')dnl

Package: e2fslibs-dbg
Section: debug
@@ -286,7 +292,7 @@ Description: debugging information for libss2
This package includes the debug information useful for debugging the
ss library, contained in the libss2 package. The debug information
is used for execution tracing and core dump analysis.
-
+ifdef(`UTIL_LINUX_NG',,``
Package: libblkid1-dbg
Section: debug
Priority: extra
@@ -306,3 +312,4 @@ Description: debugging information for libuuid1
This package includes the debug information useful for debugging the
UUID library, contained in the libuuid1 package. The debug
information is used for execution tracing and core dump analysis.
+'')dnl
diff --git a/debian/rules b/debian/rules
index 9520b02..1ba79ff 100755
--- a/debian/rules
+++ b/debian/rules
@@ -10,6 +10,13 @@
# be paranoid
export LC_ALL=C

+# Allow distro-specific behaviour
+DISTRO :=$(shell sed -ne '/DISTRIB_ID/s/.*=//p' /etc/lsb-release || echo Debian)
+SYS_BLKID_VER :=$(shell dpkg-query -W -f '${version}\n' libblkid1 | cut -b 1)
+ifeq ($(SYS_BLKID_VER),2)
+UTIL_LINUX_NG ?= yes
+endif
+
# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
@@ -26,10 +33,15 @@ COMERR_VERSION = $(shell grep ELF_VERSION lib/et/Makefile.in | cut '-d ' -f3)
COMERR_SOVERSION = $(shell grep ELF_SO_VERSION lib/et/Makefile.in | cut '-d ' -f3)
SS_VERSION = $(shell grep ELF_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
SS_SOVERSION = $(shell grep ELF_SO_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
+
+ifneq ($(UTIL_LINUX_NG),yes)
UUID_VERSION = $(shell grep ELF_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
UUID_SOVERSION = $(shell grep ELF_SO_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
+
BLKID_VERSION = $(shell grep ELF_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
BLKID_SOVERSION = $(shell grep ELF_SO_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
+endif
+
EXT2FS_SOVERSION = $(shell grep ELF_SO_VERSION lib/ext2fs/Makefile.in | cut '-d ' -f3)
E2P_SOVERSION = $(shell grep ELF_SO_VERSION lib/e2p/Makefile.in | cut '-d ' -f3)

@@ -39,14 +51,17 @@ topdir=$(shell pwd)
debdir=${topdir}/debian
tmpdir=${debdir}/tmp
udebdir=${debdir}/e2fsprogs-udeb
+ifneq ($(UTIL_LINUX_NG),yes)
blkidudebdir=${debdir}/libblkid1-udeb
uuidudebdir=${debdir}/libuuid1-udeb
+endif
libcomerrdir=${debdir}/libcomerr${COMERR_SOVERSION}
comerrdevdir=${debdir}/comerr-dev
libcomerrdbgdir=${debdir}/libcomerr2-dbg
libssdir=${debdir}/libss${SS_SOVERSION}
ssdevdir=${debdir}/ss-dev
libssdbgdir=${debdir}/libss2-dbg
+ifneq ($(UTIL_LINUX_NG),yes)
libblkiddir=${debdir}/libblkid${BLKID_SOVERSION}
libblkiddevdir=${debdir}/libblkid-dev
libblkiddbgdir=${debdir}/libblkid1-dbg
@@ -55,6 +70,7 @@ uuiddevdir=${debdir}/uuid-dev
libuuiddbgdir=${debdir}/libuuid1-dbg
uuidruntimedir=${debdir}/uuid-runtime
uuidruntimedbgdir=${debdir}/uuid-runtime-dbg
+endif
libext2dir=${debdir}/e2fslibs
libext2devdir=${debdir}/e2fslibs-dev
libext2dbgdir=${debdir}/e2fslibs-dbg
@@ -71,13 +87,15 @@ MANDIR=/usr/share/man
mandir=${tmpdir}${MANDIR}

UDEB_NAME = $(package)-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-UDEB_PRIORITY = $(shell grep '^Package: e2fsprogs-udeb' debian/control -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+UDEB_PRIORITY = $(shell grep '^Package: e2fsprogs-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)

+ifneq ($(UTIL_LINUX_NG),yes)
BLKID_UDEB_NAME = libblkid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-BLKID_UDEB_PRIORITY = $(shell grep '^Package: libblkid1-udeb' debian/control -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+BLKID_UDEB_PRIORITY = $(shell grep '^Package: libblkid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)

UUID_UDEB_NAME = libuuid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
-UUID_UDEB_PRIORITY = $(shell grep '^Package: libuuid1-udeb' debian/control -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+UUID_UDEB_PRIORITY = $(shell grep '^Package: libuuid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2)
+endif

STAMPSDIR=debian/stampdir
CFGSTDSTAMP=${STAMPSDIR}/configure-std-stamp
@@ -115,7 +133,13 @@ endif
BF_CCOPTS = -Os -fomit-frame-pointer

COMMON_CONF_FLAGS = \
- --enable-elf-shlibs --infodir=/usr/share/info --enable-fsck
+ --enable-elf-shlibs --infodir=/usr/share/info
+ifeq ($(UTIL_LINUX_NG),yes)
+COMMON_CONF_FLAGS += --disable-fsck --disable-libblkid \
+ --disable-libuuid --disable-uuidd
+else
+COMMON_CONF_FLAGS += --enable-fsck
+endif

STD_CONF_FLAGS = --with-ccopts="${CCOPTS}" --enable-compression

@@ -145,6 +169,16 @@ ismips=ismips
endif
endif

+M4_ARGS=
+ifeq ($(UTIL_LINUX_NG),yes)
+M4_ARGS+=-DUTIL_LINUX_NG
+else
+M4_ARGS+=-UUTIL_LINUX_NG
+endif
+
+debian/control: debian/control.in debian/rules
+ m4 $(M4_ARGS) < debian/control.in > $@
+
${CFGSTDSTAMP}:
dh_testdir

@@ -325,11 +359,13 @@ install-udeb: build
ln -s e2fsck fsck.ext3 ; ln -s mke2fs mkfs.ext2 ; \
ln -s mke2fs mkfs.ext3 ; ln -s mke2fs mkfs.ext4)

+ifneq ($(UTIL_LINUX_NG),yes)
mkdir -p ${blkidudebdir}/lib
mv ${udebdir}/lib/libblkid.* ${blkidudebdir}/lib

mkdir -p ${uuidudebdir}/lib
mv ${udebdir}/lib/libuuid.* ${uuidudebdir}/lib
+endif

binary-indep:
# no arch-independant debs.
@@ -358,9 +394,11 @@ binary-arch: install install-udeb

# symlinks to prepare dh_installdocs run

+ifneq ($(UTIL_LINUX_NG),yes)
mkdir -p ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}
mkdir -p ${debdir}/libblkid-dev/usr/share/doc
ln -sf libblkid${BLKID_SOVERSION} ${debdir}/libblkid-dev/usr/share/doc/libblkid-dev
+endif

mkdir -p ${debdir}/libss${SS_SOVERSION}/usr/share/doc/libss${SS_SOVERSION}
mkdir -p ${debdir}/ss-dev/usr/share/doc
@@ -370,16 +408,20 @@ binary-arch: install install-udeb
mkdir -p ${debdir}/comerr-dev/usr/share/doc
ln -sf libcomerr${COMERR_SOVERSION} ${debdir}/comerr-dev/usr/share/doc/comerr-dev

+ifneq ($(UTIL_LINUX_NG),yes)
mkdir -p ${debdir}/libuuid${UUID_SOVERSION}/usr/share/doc/libuuid${UUID_SOVERSION}
mkdir -p ${debdir}/uuid-dev/usr/share/doc
# ln -sf libuuid${UUID_SOVERSION} ${debdir}/uuid-dev/usr/share/doc/uuid-dev
+endif

mkdir -p ${debdir}/e2fslibs/usr/share/doc/e2fslibs
mkdir -p ${debdir}/e2fslibs-dev/usr/share/doc
ln -sf e2fslibs ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev

+ifneq ($(UTIL_LINUX_NG),yes)
$(INSTALL) -p -m 0644 debian/libblkid.copyright \
${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}/copyright
+endif

dh_installdocs -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb

@@ -416,11 +458,15 @@ binary-arch: install install-udeb
dh_installinfo -pe2fslibs-dev ${stdbuilddir}/doc/libext2fs.info

DH_OPTIONS= dh_installchangelogs -pe2fsprogs \
- -plibblkid${BLKID_SOVERSION} -plibcomerr${COMERR_SOVERSION} \
- -plibss${SS_SOVERSION} -plibuuid${UUID_SOVERSION} \
- -pe2fslibs -puuid-dev -puuid-runtime -pe2fsck-static \
- -pe2fsprogs-dbg -puuid-runtime-dbg -pe2fslibs-dbg \
- -plibcomerr2-dbg -plibss2-dbg -plibblkid1-dbg -plibuuid1-dbg
+ -plibcomerr${COMERR_SOVERSION} \
+ -plibss${SS_SOVERSION} \
+ -pe2fslibs -pe2fsck-static \
+ -pe2fsprogs-dbg -pe2fslibs-dbg \
+ -plibcomerr2-dbg -plibss2-dbg
+ifneq ($(UTIL_LINUX_NG),yes)
+ DH_OPTIONS= dh_installchangelogs -plibuuid${UUID_SOVERSION} \
+ -puuid-dev -puuid-runtime -puuid-runtime-dbg -plibuuid1-dbg
+endif

dh_fixperms
ifneq ($(ismips),)
@@ -431,8 +477,10 @@ endif

# debug package stuff
rm -rf ${udebdir}/usr
+ifneq ($(UTIL_LINUX_NG),yes)
rm -rf ${blkidudebdir}/usr
rm -rf ${uuidudebdir}/usr
+endif

mkdir -p ${debugdir}/usr/lib
mv ${maindir}/usr/lib/debug ${debugdir}/usr/lib
@@ -441,9 +489,11 @@ endif
${debugdir}/usr/lib/debug
rm -rf ${e2fsckstaticdir}/usr/lib

+ifneq ($(UTIL_LINUX_NG),yes)
mkdir -p ${uuidruntimedbgdir}/usr/lib
mv ${uuidruntimedir}/usr/lib/debug ${uuidruntimedbgdir}/usr/lib
rmdir ${uuidruntimedir}/usr/lib
+endif

mkdir -p ${libext2dbgdir}/usr/lib
mv ${libext2dir}/usr/lib/debug ${libext2dbgdir}/usr/lib
@@ -457,6 +507,7 @@ endif
mv ${libssdir}/usr/lib/debug ${libssdbgdir}/usr/lib
rmdir ${libssdir}/usr/lib

+ifneq ($(UTIL_LINUX_NG),yes)
mkdir -p ${libuuiddbgdir}/usr/lib
mv ${libuuiddir}/usr/lib/debug ${libuuiddbgdir}/usr/lib
rmdir ${libuuiddir}/usr/lib
@@ -464,10 +515,15 @@ endif
mkdir -p ${libblkiddbgdir}/usr/lib
mv ${libblkiddir}/usr/lib/debug ${libblkiddbgdir}/usr/lib
rmdir ${libblkiddir}/usr/lib
+endif

# dpkg symbol handling
ifneq (,$(findstring update-symbols,$(DEB_BUILD_OPTIONS)))
- for i in e2fslibs libcomerr2 libss2 libblkid1 libuuid1; \
+SYMBOL_LIBS := e2fslibs libcomerr2 libss2
+ifneq ($(UTIL_LINUX_NG),yes)
+SYMBOL_LIBS += libblkid1 libuuid1
+endif
+ for i in $(SYMBOL_LIBS); \
do \
echo "Generating symbols for $$i..."; \
dpkg-gensymbols -p$$i -Pdebian/$$i > debian/$$i.tmp-patch; \
@@ -480,8 +536,10 @@ endif
$(INSTALL) -p -m 0644 debian/e2fsprogs.copyright \
${debugdir}/usr/share/doc/e2fsprogs-dbg/copyright

+ifneq ($(UTIL_LINUX_NG),yes)
$(INSTALL) -p -m 0644 debian/uuid-runtime.copyright \
${uuidruntimedbgdir}/usr/share/doc/uuid-runtime-dbg/copyright
+endif

$(INSTALL) -p -m 0644 debian/e2fslibs.copyright \
${libext2dbgdir}/usr/share/doc/e2fslibs-dbg/copyright
@@ -492,21 +550,25 @@ endif
$(INSTALL) -p -m 0644 debian/libss2.copyright \
${libssdbgdir}/usr/share/doc/libss2-dbg/copyright

+ifneq ($(UTIL_LINUX_NG),yes)
$(INSTALL) -p -m 0644 debian/libblkid.copyright \
${libblkiddbgdir}/usr/share/doc/libblkid1-dbg/copyright

$(INSTALL) -p -m 0644 debian/libuuid1.copyright \
${libuuiddbgdir}/usr/share/doc/libuuid1-dbg/copyright
+endif

dh_compress

dh_makeshlibs -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
dh_makeshlibs -plibcomerr${COMERR_SOVERSION} \
-V 'libcomerr2 (>= 1.33-3)'
+ifneq ($(UTIL_LINUX_NG),yes)
dh_makeshlibs -plibblkid${BLKID_SOVERSION} -V 'libblkid1 (>= 1.39-1)'
echo "udeb: libblkid 1 libblkid1-udeb" >> \
debian/libblkid1/DEBIAN/shlibs
echo "udeb: libuuid 1 libuuid1-udeb" >> debian/libuuid1/DEBIAN/shlibs
+endif

dh_installdeb
dh_shlibdeps -l${stdbuilddir}/lib
@@ -521,20 +583,28 @@ endif
-u '-v${COMERR_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
DH_OPTIONS= dh_gencontrol -pss-dev \
-u '-v${SS_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
+ifneq ($(UTIL_LINUX_NG),yes)
DH_OPTIONS= dh_gencontrol -puuid-dev \
-u '-v${UUID_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}'
+endif
dh_gencontrol -pe2fsprogs-udeb -- -fdebian/files~
+ifneq ($(UTIL_LINUX_NG),yes)
dh_gencontrol -plibblkid1-udeb -- -fdebian/files~
dh_gencontrol -plibuuid1-udeb -- -fdebian/files~
+endif

dpkg-distaddfile $(UDEB_NAME) debian-installer $(UDEB_PRIORITY)
+ifneq ($(UTIL_LINUX_NG),yes)
dpkg-distaddfile $(BLKID_UDEB_NAME) debian-installer $(BLKID_UDEB_PRIORITY)
dpkg-distaddfile $(UUID_UDEB_NAME) debian-installer $(UUID_UDEB_PRIORITY)
+endif
dh_md5sums -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
dh_builddeb -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb
dh_builddeb -pe2fsprogs-udeb --filename=$(UDEB_NAME)
+ifneq ($(UTIL_LINUX_NG),yes)
dh_builddeb -plibblkid1-udeb --filename=$(BLKID_UDEB_NAME)
dh_builddeb -plibuuid1-udeb --filename=$(UUID_UDEB_NAME)
+endif

binary: binary-indep binary-arch

2009-07-19 14:59:10

by Scott James Remnant

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Sun, 2009-07-19 at 07:56 -0400, Theodore Tso wrote:

> > > > I've done the packaging for him, it's just waiting on him to get back
> > > > home to sponsor the uploads.
> > >
> > > Are the .deb packages somewhere where I can examine them?
> > >
> > Yes, they're in Ubuntu.
>
> I just took a quick look at them, and it appears that they are missing
> the libblkid1-dbg, libuuid1-dbg, and uuid-runtime-dbg packages.
>
We auto-generate debug packages for all binaries in Ubuntu, extracted
from the compiler, e.g.:

http://ddebs.ubuntu.com/pool/main/u/util-linux/libblkid1-dbgsym_2.16-1ubuntu1_i386.ddeb

Since I'm not a Debian maintainer, I don't know how such things are done
in Debian so left this for you and/or Lamont to fill in.

> Also, apparently no once noticed until now, but there's a bug in the
> util-linux-ng's uuid.sym file. The uuid_pack and uuid_unpack symbols
> are missing, because someone forgot to include them in the uuid.sym
> file. The debian symbol generation system which I see you carefully
> moved over detected the problem, but you apparently didn't take a
> close enough look at its output to detect the warning messages.
>
I just copied the symbols file over and applied the update your output
said.

> BTW, **why** is util-linux-ng gratuitously introducing backwards
> incompatibility such that packages built with util-linux-ng won't work
> with the older shared libraries? There's no reason to do this.
>
> There is a hint in the (obsolete) comments in uuid.sym that suggests a
> reason why, but it's not justified for libuuid:
>
You'd have to ask Karel about that one.

However I think now it's happened, we shouldn't back it out again.

Scott
--
Scott James Remnant
[email protected]


Attachments:
signature.asc (197.00 B)
This is a digitally signed message part

2009-07-19 21:27:21

by Karel Zak

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default


Hi Ted,

On Sun, Jul 19, 2009 at 07:56:17AM -0400, Theodore Tso wrote:
> Also, apparently no once noticed until now, but there's a bug in the
> util-linux-ng's uuid.sym file. The uuid_pack and uuid_unpack symbols
> are missing, because someone forgot to include them in the uuid.sym
> file.

is it really bug? Why do you want to export symbols that are not part
of the library API?

I don't see uuid_pack and uuid_unpack in uuid.h. I guess nobody use
these symbols ;-)

> BTW, **why** is util-linux-ng gratuitously introducing backwards
> incompatibility such that packages built with util-linux-ng won't work
> with the older shared libraries? There's no reason to do this.

Good point. I agree that (at first glance) there's no reason for this
change. But...

"If possible, projects implementing generally usable DSOs
should use symbol versioning from day one."
-- How To Write Shared Libraries, Ulrich Drepper

I agree with Ulrich, symbol versioning is really really good thing.

Unfortunately, it's not possible to combine versioned symbols with
anonymous (without version) symbols. It means after first change to
the library ABI we will need to introduce UUID_1.0 for old symbols.

The move from e2fsprogs to util-linux-ng is excellent opportunity
to introduce ABI versioning to libuuid. I don't think this change has
negative impact to our distributions in practice.

How often people need to mix old libuuid (from e2fsprogs) with
applications compiled against new libuuid (from util-linux-ng)? I
guess almost never...

> Argh, util-linux-ng 2.16 has already been released; is it too late to
> undo this change?

I think yes, it's too late.

A new version (2.16.1) without UUID_1.0 will require mass rebuild in
all distributions/systems where are libuuid applications with ABI
versioning. IMHO this is much more painful that impossibility to
downgrade to the old libuuid (from e2fsprogs).

Maybe we can add --disable-{libuuid,libblkid}-versioning for people
who need to bypass the default behaviour.

Karel

--
Karel Zak <[email protected]>

2009-07-20 14:23:37

by Theodore Y. Ts'o

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Sun, Jul 19, 2009 at 11:27:14PM +0200, Karel Zak wrote:
>
> On Sun, Jul 19, 2009 at 07:56:17AM -0400, Theodore Tso wrote:
> > Also, apparently no once noticed until now, but there's a bug in the
> > util-linux-ng's uuid.sym file. The uuid_pack and uuid_unpack symbols
> > are missing, because someone forgot to include them in the uuid.sym
> > file.
>
> is it really bug? Why do you want to export symbols that are not part
> of the library API?

You're right; I took a closer look at it, and they aren't part of the
library API.

> Unfortunately, it's not possible to combine versioned symbols with
> anonymous (without version) symbols. It means after first change to
> the library ABI we will need to introduce UUID_1.0 for old symbols.

Yes, but I would have preferred to do so on a per symbol basis. And
the UUID library isn't one that's likely to change in the future.

> > Argh, util-linux-ng 2.16 has already been released; is it too late to
> > undo this change?
>
> I think yes, it's too late.
>
> A new version (2.16.1) without UUID_1.0 will require mass rebuild in
> all distributions/systems where are libuuid applications with ABI
> versioning. IMHO this is much more painful that impossibility to
> downgrade to the old libuuid (from e2fsprogs).

Sigh, you're probably right.

> Maybe we can add --disable-{libuuid,libblkid}-versioning for people
> who need to bypass the default behaviour.

There are some commercial programs that might use libuuid --- minor
ones, like SAP R/3. So they might want to create programs that work
on both RHEL 5 and RHEL 6. The only way I can think of doing this is
to build the link libraries without the map file, and the shared
library with the map file.

- Ted

2009-07-20 14:26:41

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Mon, Jul 20, 2009 at 10:23:37AM -0400, Theodore Tso wrote:
> There are some commercial programs that might use libuuid --- minor
> ones, like SAP R/3. So they might want to create programs that work
> on both RHEL 5 and RHEL 6. The only way I can think of doing this is
> to build the link libraries without the map file, and the shared
> library with the map file.

If you want one binary to run on multiple distributions you'll always
have to build on the older one anyway.


2009-07-20 14:37:02

by Scott James Remnant

[permalink] [raw]
Subject: Re: [PATCH] configure: Disable libblkid by default

On Mon, 2009-07-20 at 10:23 -0400, Theodore Tso wrote:

> On Sun, Jul 19, 2009 at 11:27:14PM +0200, Karel Zak wrote:
> > Maybe we can add --disable-{libuuid,libblkid}-versioning for people
> > who need to bypass the default behaviour.
>
> There are some commercial programs that might use libuuid --- minor
> ones, like SAP R/3. So they might want to create programs that work
> on both RHEL 5 and RHEL 6. The only way I can think of doing this is
> to build the link libraries without the map file, and the shared
> library with the map file.
>
Actually, it's far easier than that - just build on RHEL 5

You have to do that to be safe against symbol changes in other libraries
(like libc) anyway.

Scott
--
Scott James Remnant
scott-GeWIH/[email protected]


Attachments:
signature.asc (197.00 B)
This is a digitally signed message part