[linux-lvm] merging configure.in between dm and lvm

Jim Meyering jim at meyering.net
Wed May 7 16:16:38 UTC 2008


I'm in the process of merging the configure.in files used by lvm and
device-mapper.  The goal is to make them as similar as reasonable while
the two packages are still separate, so that once dm and lvm coexist
there will only be minimal changes.

Some of my goals:
  - no changes in binaries
  - minimize user-visible changes
      [ so far there's one: I removed the --enable-jobs=NUM option. ]

Several types of changes:

For example, I've added some functions and header checks in dm's
configure.in that are not technically required, because they are required
for lvm.  Similarly, I've added a few in lvm's because dm had them.

I've adjusted autoconf quoting and reordered stanzas so
common ones line up (minimizing diffs).

I've shortened some of the longer-than-80-byte lines so that
I can see what's going on in a side-by-side diff.
-------------------

To ensure that no binary changes are induced into device-mapper, I did
this with a git tree, with the proposed changes on the a-conf-merge
branch.  I.e., simply configure and build twice (once with the patch
and once without), and compare the resulting trees, ignoring the files
we expect to change.

shell aliases:
alias g=git
alias Rm='command rm'

part of my ~/.gitconfig file (so e.g., 'g co' works like 'git checkout')
[alias]
	st = status
	co = checkout
	ci = commit
	br = branch

================================================
t=/tmp
g co a-conf-merge
autoreconf && ./configure CFLAGS=-g && make &&
  Rm -rf $t/patched && cp -a "$PWD" $t/patched
make distclean
g reset --hard HEAD

g co master
autoreconf && ./configure CFLAGS=-g && make &&
  Rm -rf $t/orig && cp -a "$PWD" $t/orig
make distclean
g reset --hard HEAD

diff -ur \
  -x config.status -x config.log -x .git -x autom4te.cache -x configure \
  -x configure.in -x configure.h -x configure.h.in -x libdevmapper.a \
  $t/orig $t/patched
================================================

I've eliminated most of the differences between the two configure.in
files, but haven't yet done the binary-comparison bit with lvm
(that'll be harder because there are far more combinations of
configure-time options to test).  I'll probably post both configure.in
patches tomorrow or Friday.  So, for now, here's a preliminary
version of the proposed device-mapper configure.in changes:
[omitting changes in derived+VC'd files]

Note that there are some FIXME comments near the end.
They mark some symbols whose names should be changed in the unified tree.
I'm sure there are more.  I can change them now or in a subsequent patch.
I'd prefer "later", so I can keep changes that also affect C code
separate for now.

Suggestions/feedback welcome,

Jim

---
 configure              | 5700 ++++++++++++++++++++++++++++++++++++------------
 configure.in           |  229 ++-
 include/configure.h.in |   92 +-
 3 files changed, 4509 insertions(+), 1512 deletions(-)

diff --git a/configure.in b/configure.in
index cab496f..ff6cf75 100644
--- a/configure.in
+++ b/configure.in
@@ -1,8 +1,6 @@
 ###############################################################################
-## Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
-## Copyright (C) 2004 Red Hat, Inc. All rights reserved.
-##
-## This file is part of the device-mapper userspace tools.
+## Copyright (C) 2000-2004 Sistina Software, Inc. All rights reserved.
+## Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
 ##
 ## This copyrighted material is made available to anyone wishing to use,
 ## modify, copy, or redistribute it subject to the terms and conditions
@@ -11,7 +9,6 @@
 ## You should have received a copy of the GNU General Public License
 ## along with this program; if not, write to the Free Software Foundation,
 ## Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-## MA 02111-1307, USA
 ################################################################################

 AC_PREREQ(2.57)
@@ -25,7 +22,7 @@ AC_CONFIG_HEADERS(include/configure.h)

 ################################################################################
 dnl -- Setup the directory where autoconf has auxilary files
-AC_CONFIG_AUX_DIR(autoconf) 
+AC_CONFIG_AUX_DIR(autoconf)

 ################################################################################
 dnl -- Get system type
@@ -33,21 +30,35 @@ AC_CANONICAL_TARGET([])

 case "$host_os" in
 	linux*)
-		CFLAGS="$CFLAGS"
 		COPTIMISE_FLAG="-O2"
 		CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym"
+		CLDWHOLEARCHIVE="-Wl,-whole-archive"
+		CLDNOWHOLEARCHIVE="-Wl,-no-whole-archive"
 		LDDEPS="$LDDEPS .export.sym"
-		LIB_SUFFIX="so"
-		DMIOCTLS="yes"
-		SELINUX="yes" ;;
+		LIB_SUFFIX=so
+		DEVMAPPER=yes
+		ODIRECT=yes
+		DMIOCTLS=yes
+		SELINUX=yes
+		REALTIME=yes
+		CLUSTER=internal
+		FSADM=no
+		;;
 	darwin*)
 		CFLAGS="$CFLAGS -no-cpp-precomp -fno-common"
 		COPTIMISE_FLAG="-O2"
 		CLDFLAGS="$CLDFLAGS"
-		LDDEPS="$LDDEPS"
-		LIB_SUFFIX="dylib"
-		DMIOCTLS="no"
-		SELINUX="no" ;;
+		CLDWHOLEARCHIVE="-all_load"
+		CLDNOWHOLEARCHIVE=
+		LIB_SUFFIX=dylib
+		DEVMAPPER=yes
+		ODIRECT=no
+		DMIOCTLS=no
+		SELINUX=no
+		REALTIME=no
+		CLUSTER=none
+		FSADM=no
+		;;
 esac

 ################################################################################
@@ -58,20 +69,26 @@ usrlibdir='${prefix}/lib'
 dnl -- Checks for programs.
 AC_PROG_AWK
 AC_PROG_CC
+
+dnl probably no longer needed in 2008, but...
 AC_PROG_GCC_TRADITIONAL
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_MAKE_SET
 AC_PROG_RANLIB
+AC_PATH_PROG(CFLOW_CMD, cflow)
+AC_PATH_PROG(CSCOPE_CMD, cscope)

 ################################################################################
 dnl -- Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
 AC_HEADER_TIME

-AC_CHECK_HEADERS(ctype.h dirent.h errno.h fcntl.h getopt.h inttypes.h limits.h stdarg.h stdio.h stdlib.h string.h sys/ioctl.h sys/param.h sys/stat.h sys/types.h unistd.h,,AC_MSG_ERROR(bailing out))
-
+AC_CHECK_HEADERS([ctype.h dirent.h errno.h fcntl.h getopt.h inttypes.h limits.h \
+  stdarg.h stdio.h stdlib.h string.h sys/ioctl.h sys/param.h sys/stat.h \
+  sys/types.h unistd.h], , [AC_MSG_ERROR(bailing out)])
 AC_CHECK_HEADERS(termios.h sys/statvfs.h)
 ################################################################################
 dnl -- Checks for typedefs, structures, and compiler characteristics.
@@ -82,13 +99,24 @@ AC_TYPE_OFF_T
 AC_TYPE_PID_T
 AC_TYPE_SIGNAL
 AC_TYPE_SIZE_T
+AC_TYPE_MODE_T
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+AC_STRUCT_TM

 ################################################################################
-dnl -- Checks for functions
-AC_CHECK_FUNCS(memset mkdir rmdir strchr strdup strerror strrchr uname,,AC_MSG_ERROR(bailing out))
+dnl -- Check for functions
+AC_CHECK_FUNCS([gethostname getpagesize memset mkdir rmdir munmap setlocale \
+  strcasecmp strchr strdup strncasecmp strerror strrchr strstr strtol strtoul \
+  uname], , [AC_MSG_ERROR(bailing out)])
+AC_FUNC_ALLOCA
 AC_FUNC_CLOSEDIR_VOID
+AC_FUNC_FORK
+AC_FUNC_LSTAT
 AC_FUNC_MALLOC
+AC_FUNC_MEMCMP
+AC_FUNC_MMAP
 AC_FUNC_STAT
+AC_FUNC_STRTOD
 AC_FUNC_VPRINTF

 ################################################################################
@@ -96,10 +124,6 @@ dnl -- Prefix is /usr by default, the exec_prefix default is setup later
 AC_PREFIX_DEFAULT(/usr)

 ################################################################################
-dnl -- Parallel make jobs?
-AC_ARG_ENABLE(jobs, [  --enable-jobs=NUM       Number of jobs to run simultaneously], JOBS=-j$enableval)
-
-################################################################################
 dnl -- Setup the ownership of the files
 AC_MSG_CHECKING(file owner)
 OWNER="root"
@@ -154,7 +178,7 @@ AC_ARG_WITH(device-mode,
 AC_MSG_RESULT($DEVICE_MODE)

 ################################################################################
-dnl -- Enable Debugging
+dnl -- Enable debugging
 AC_MSG_CHECKING(whether to enable debugging)
 AC_ARG_ENABLE(debug,    [  --enable-debug          Enable debugging],
 DEBUG=$enableval, DEBUG=no)
@@ -163,6 +187,8 @@ AC_MSG_RESULT($DEBUG)
 dnl -- Normally turn off optimisation for debug builds
 if test x$DEBUG = xyes; then
 	COPTIMISE_FLAG=
+else
+	CSCOPE_CMD=
 fi

 ################################################################################
@@ -174,7 +200,7 @@ AC_ARG_WITH(optimisation,
 AC_MSG_RESULT($COPTIMISE_FLAG)

 ################################################################################
-dnl -- Disable Compatibility mode
+dnl -- Compatibility mode
 AC_ARG_ENABLE(compat,   [  --enable-compat         Enable support for old device-mapper versions],
 COMPAT=$enableval, COMPAT=no)

@@ -193,27 +219,32 @@ dnl -- Enable pkg-config
 AC_ARG_ENABLE(pkgconfig,   [  --enable-pkgconfig      Install pkgconfig support],
 PKGCONFIG=$enableval, PKGCONFIG=no)

-################################################################################
-dnl -- Enables staticly-linked tools
-AC_ARG_ENABLE(static_link, [  --enable-static_link    Use this to link the tools to their libraries
-                          statically.  Default is dynamic linking],  STATIC_LINK=$enableval, STATIC_LINK=no)
-
-################################################################################
 dnl -- Clear default exec_prefix - install into /sbin rather than /usr/sbin
 if [[ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ]];
  then  exec_prefix="";
 fi;

-
 ################################################################################
 dnl -- getline included in recent libc

-AC_CHECK_LIB(c, getline, AC_DEFINE([HAVE_GETLINE], 1, [Define to 1 if getline is available.]))
+AC_CHECK_LIB(c, getline, AC_DEFINE([HAVE_GETLINE], 1,
+  [Define to 1 if getline is available.]))

 ################################################################################
 dnl -- canonicalize_file_name included in recent libc

-AC_CHECK_LIB(c, canonicalize_file_name, AC_DEFINE([HAVE_CANONICALIZE_FILE_NAME], 1, [Define to 1 if canonicalize_file_name is available.]))
+AC_CHECK_LIB(c, canonicalize_file_name,
+  AC_DEFINE([HAVE_CANONICALIZE_FILE_NAME], 1,
+    [Define to 1 if canonicalize_file_name is available.]))
+
+################################################################################
+dnl -- Enables statically-linked tools
+AC_MSG_CHECKING(whether to use static linking)
+AC_ARG_ENABLE(static_link,
+  [  --enable-static_link    Use this to link the tools to their libraries
+                          statically.  Default is dynamic linking],
+  STATIC_LINK=$enableval, STATIC_LINK=no)
+AC_MSG_RESULT($STATIC_LINK)

 ################################################################################
 dnl -- Disable selinux
@@ -221,36 +252,37 @@ AC_MSG_CHECKING(whether to enable selinux support)
 AC_ARG_ENABLE(selinux, [  --disable-selinux       Disable selinux support],
 SELINUX=$enableval)
 AC_MSG_RESULT($SELINUX)
- 
+
 ################################################################################
 dnl -- Check for selinux
 if test x$SELINUX = xyes; then
 	AC_CHECK_LIB(sepol, sepol_check_context, HAVE_SEPOL=yes, HAVE_SEPOL=no)

 	if test x$HAVE_SEPOL = xyes; then
-		AC_DEFINE([HAVE_SEPOL], 1, [Define to 1 if sepol_check_context is available.])
+		AC_DEFINE([HAVE_SEPOL], 1,
+		  [Define to 1 if sepol_check_context is available.])
 		LIBS="-lsepol $LIBS"
 	fi

 	AC_CHECK_LIB(selinux, is_selinux_enabled, HAVE_SELINUX=yes, HAVE_SELINUX=no)

 	if test x$HAVE_SELINUX = xyes; then
-		AC_DEFINE([HAVE_SELINUX], 1, [Define to 1 if selinux is available.])
+		AC_DEFINE([HAVE_SELINUX], 1, [Define to 1 to include support for selinux.])
 		LIBS="-lselinux $LIBS"
 	else
 		AC_MSG_WARN(Disabling selinux)
 	fi

-	# With --enable-static_link and selinux enabled, linking dmsetup
+	# With --enable-static_link and selinux enabled, linking
 	# fails on at least Debian unstable due to unsatisfied references
 	# to pthread_mutex_lock and _unlock.  See if we need -lpthread.
 	if test "$STATIC_LINK-$HAVE_SELINUX" = yes-yes; then
-		dm_saved_libs=$LIBS
+		lvm_saved_libs=$LIBS
 		LIBS="$LIBS -static"
 		AC_SEARCH_LIBS([pthread_mutex_lock], [pthread],
 		  [test "$ac_cv_search_pthread_mutex_lock" = "none required" ||
 				LIB_PTHREAD=-lpthread])
-		LIBS=$dm_saved_libs
+		LIBS=$lvm_saved_libs
 	fi
 fi

@@ -259,6 +291,22 @@ dnl -- Check for getopt
 AC_CHECK_HEADERS(getopt.h, AC_DEFINE([HAVE_GETOPTLONG], 1, [Define to 1 if getopt_long is available.]))

 ################################################################################
+dnl -- Check for readline (Shamelessly copied from parted 1.4.17)
+if test x$READLINE = xyes; then
+	AC_CHECK_LIB(readline, readline, ,
+		AC_MSG_ERROR(
+GNU Readline could not be found which is required for the
+--enable-readline option (which is enabled by default).  Either disable readline
+support with --disable-readline or download and install readline from:
+	ftp.gnu.org/gnu/readline
+Note: if you are using precompiled packages you will also need the development
+package as well (which may be called readline-devel or something similar).
+)
+	)
+	AC_CHECK_FUNC(rl_completion_matches, AC_DEFINE([HAVE_RL_COMPLETION_MATCHES], 1, [Define to 1 if rl_completion_matches() is available.]))
+fi
+
+################################################################################
 dnl -- Internationalisation stuff
 AC_MSG_CHECKING(whether to enable internationalisation)
 AC_ARG_ENABLE(nls, [  --enable-nls            Enable Native Language Support],
@@ -275,9 +323,9 @@ if test x$INTL = xyes; then
 	fi;

 	AC_ARG_WITH(localedir,
-  		    [  --with-localedir=DIR    Translation files in DIR [[PREFIX/share/locale]] ],
-  		    [ LOCALEDIR="$withval" ],
-  		    [ LOCALEDIR='${prefix}/share/locale' ])
+		    [  --with-localedir=DIR    Translation files in DIR [[PREFIX/share/locale]] ],
+		    [ LOCALEDIR="$withval" ],
+		    [ LOCALEDIR='${prefix}/share/locale' ])
 fi


@@ -330,7 +378,7 @@ if test "${with_kernelversion+set}" = set; then
 fi

 if test "x${kernelvsn}" = x; then
-  if test "x${missingkernel}" = "x"; then 
+  if test "x${missingkernel}" = "x"; then
     kernelvsn=`awk -F ' = ' '/^VERSION/ {v=$2} /^PATCH/ {p=$2} /^SUBLEVEL/ {s=$2} /^EXTRAVERSION/ {e=$2} END {printf "%d.%d.%d%s",v,p,s,e}' $kerneldir/Makefile`
   else
     kernelvsn="UNKNOWN"
@@ -364,11 +412,7 @@ then
 fi
 AC_MSG_RESULT($interface)

-if test "-f VERSION" ; then
-  DM_LIB_VERSION="\"`cat VERSION|sed -e \"s/([[0-9.]]*)/\0-$interface/\"`\""
-else
-  DM_LIB_VERSION="Unknown version ($interface)"
-fi
+DM_LIB_VERSION="\"`cat VERSION 2>/dev/null || echo Unknown`\""

 AC_DEFINE_UNQUOTED(DM_LIB_VERSION, $DM_LIB_VERSION, [Library version])

@@ -377,9 +421,9 @@ dnl -- dmeventd pidfile and executable path
 AH_TEMPLATE(DMEVENTD_PIDFILE, [Path to dmeventd pidfile.])
 if test "$DMEVENTD" = yes; then
 	AC_ARG_WITH(dmeventd-pidfile,
-  		    [  --with-dmeventd-pidfile=PATH    dmeventd pidfile [[/var/run/dmeventd.pid]] ],
-  		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE,"$withval") ],
-  		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE,"/var/run/dmeventd.pid") ])
+		    [  --with-dmeventd-pidfile=PATH    dmeventd pidfile [[/var/run/dmeventd.pid]] ],
+		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE,"$withval") ],
+		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE,"/var/run/dmeventd.pid") ])
 fi

 AH_TEMPLATE(DMEVENTD_PATH, [Path to dmeventd binary.])
@@ -392,53 +436,80 @@ if test "$DMEVENTD" = yes; then
                 dmeventd_prefix=""
         fi
 	AC_ARG_WITH(dmeventd-path,
-  		    [  --with-dmeventd-path=PATH       dmeventd path [[${exec_prefix}/sbin/dmeventd]] ],
-  		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PATH,"$withval") ],
-  		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PATH,"$dmeventd_prefix/sbin/dmeventd") ])
+		    [  --with-dmeventd-path=PATH       dmeventd path [[${exec_prefix}/sbin/dmeventd]] ],
+		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PATH,"$withval") ],
+		    [ AC_DEFINE_UNQUOTED(DMEVENTD_PATH,"$dmeventd_prefix/sbin/dmeventd") ])
 fi
 ################################################################################
-AC_SUBST(usrlibdir)
-AC_SUBST(JOBS)
-AC_SUBST(STATIC_LINK)
-AC_SUBST(OWNER)
-AC_SUBST(GROUP)
-AC_SUBST(LIBS)
-AC_SUBST(interface)
-AC_SUBST(kerneldir)
-AC_SUBST(missingkernel)
-AC_SUBST(kernelvsn)
-AC_SUBST(tmpdir)
 AC_SUBST(CFLAGS)
-AC_SUBST(COPTIMISE_FLAG)
+AC_SUBST(CFLOW_CMD)
 AC_SUBST(CLDFLAGS)
-AC_SUBST(LDDEPS)
-AC_SUBST(LIB_SUFFIX)
-AC_SUBST(DEBUG)
-AC_SUBST(DM_LIB_VERSION)
+AC_SUBST(CLDNOWHOLEARCHIVE)
+AC_SUBST(CLDWHOLEARCHIVE)
+AC_SUBST(CLUSTER)
+AC_SUBST(CLVMD)
+AC_SUBST(CMDLIB)
+# FIXME: rename to DEVICE_MAPPER_COMPAT
 AC_SUBST(COMPAT)
-AC_SUBST(DMIOCTLS)
-AC_SUBST(MSGFMT)
-AC_SUBST(LOCALEDIR)
-AC_SUBST(INTL_PACKAGE)
-AC_SUBST(INTL)
-AC_SUBST(DEVICE_UID)
+# FIXME: rename to LVM_ETC_DIR
+AC_SUBST(CONFDIR)
+AC_SUBST(COPTIMISE_FLAG)
+AC_SUBST(CSCOPE_CMD)
+AC_SUBST(DEBUG)
+# FIXME: rename to start with DM_
 AC_SUBST(DEVICE_GID)
+# FIXME: rename to start with DM_
 AC_SUBST(DEVICE_MODE)
+# FIXME: rename to start with DM_
+AC_SUBST(DEVICE_UID)
+AC_SUBST(DEVMAPPER)
+AC_SUBST(DMDIR)
+# Rename to BUILD_DMEVENTD
 AC_SUBST(DMEVENTD)
+AC_SUBST(DMIOCTLS)
+AC_SUBST(DM_LIB_VERSION)
+AC_SUBST(FSADM)
+AC_SUBST(GROUP)
+AC_SUBST(HAVE_LIBDL)
+AC_SUBST(HAVE_REALTIME)
+AC_SUBST(HAVE_SELINUX)
+AC_SUBST(INTL)
+AC_SUBST(INTL_PACKAGE)
+AC_SUBST(JOBS)
+AC_SUBST(LDDEPS)
+AC_SUBST(LIBS)
+AC_SUBST(LIB_SUFFIX)
+AC_SUBST(LOCALEDIR)
+AC_SUBST(LVM1)
+AC_SUBST(LVM1_FALLBACK)
+AC_SUBST(LVM_VERSION)
+AC_SUBST(MIRRORS)
+AC_SUBST(MSGFMT)
+AC_SUBST(OWNER)
 AC_SUBST(PKGCONFIG)
+AC_SUBST(POOL)
+AC_SUBST(SNAPSHOTS)
+AC_SUBST(STATICDIR)
+AC_SUBST(STATIC_LINK)
 AC_SUBST([LIB_PTHREAD])
+AC_SUBST(interface)
+AC_SUBST(kerneldir)
+AC_SUBST(kernelvsn)
+AC_SUBST(missingkernel)
+AC_SUBST(tmpdir)
+AC_SUBST(usrlibdir)

 ################################################################################
-dnl -- First and last lines should not contain files to generate in order to 
+dnl -- First and last lines should not contain files to generate in order to
 dnl -- keep utility scripts running properly
 AC_CONFIG_FILES([\
 Makefile								\
 make.tmpl                                                               \
 include/Makefile                                                        \
 dmsetup/Makefile							\
-lib/Makefile							 	\
+lib/Makefile								\
 lib/libdevmapper.pc							\
-dmeventd/Makefile						 	\
+dmeventd/Makefile							\
 dmeventd/libdevmapper-event.pc						\
 kernel/Makefile								\
 man/Makefile								\




More information about the linux-lvm mailing list