[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] Re: KLIBC support for device-mapper



On Sun, 2005-03-06 at 15:19 +0200, Martin Schlemmer wrote:
> Hi,
> 
> This patch adds support for compiling device-mapper against klibc (as of
> klibc-0.213).  Detecting klibc is still fairly crappy, but I will see if
> we can get that simplified via support from klibc side.
> 

Ok, this is a new patch replacing the previous one.  It needs
klibc-0.217 or 1.0 at least to work.

Comments will be appreciated.


Thanks,

-- 
Martin Schlemmer



-- 
---------------------[ Ciphire Signature ]----------------------
From: azarah nosferatu za org signed email body (356 characters)
Date: on 09 March 2005 at 11:57:53 UTC
To:   dm-devel redhat com
----------------------------------------------------------------
: Ciphire has secured this email against identity theft.
: Free download at www.ciphire.com. The garbled lines
: below are the sender's verifiable digital signature.
----------------------------------------------------------------
00fAAAAAEAAADB5C5CZAEAAPcCAAIAAgACACAjYe/qeWoHRrdDE3mOifT0WPgp92
kbkclxgX1lQsV9VwEAJOQiG+Djg3e7Ai63e8AMF0Hl/gle8q4Ud88Lecx5fcUpaV
5J3bEsvF9qOzLIbuIusij5fNCeJhZjBQGFEgYE9g==
------------------[ End Ciphire Signed Message ]----------------
diff -urpN device-mapper.1.01.00/aclocal.m4 device-mapper.1.01.00.klibc/aclocal.m4
--- device-mapper.1.01.00/aclocal.m4	1970-01-01 02:00:00.000000000 +0200
+++ device-mapper.1.01.00.klibc/aclocal.m4	2005-03-08 00:03:59.000000000 +0200
@@ -0,0 +1,75 @@
+# klibc.m4 serial 99
+## Copyright (C) 1995-2003 Free Software Foundation, Inc.
+## This file is free software, distributed under the terms of the GNU
+## General Public License.  As a special exception to the GNU General
+## Public License, this file may be distributed as part of a program
+## that contains a configuration script generated by Autoconf, under
+## the same distribution terms as the rest of that program.
+##
+## This file can can be used in projects which are not available under
+## the GNU General Public License or the GNU Library General Public
+## License but which still want to provide support for the GNU gettext
+## functionality.
+## Please note that the actual code of the GNU gettext library is covered
+## by the GNU Library General Public License, and the rest of the GNU
+## gettext package package is covered by the GNU General Public License.
+## They are *not* in the public domain.
+
+# Authors:
+#   Martin Schlemmer <azarah nosferatu za org>, 2005.
+
+
+# AC_CHECK_KLIBC
+# --------------
+# Check if the user wants KLIBC support enabled.  If so, set KLIBC=yes and
+# fill in KLIBC_PREFIX, KLIBC_BINDIR, KLIBC_SBINDIR, KLIBC_LIBDIR and
+# KLIBC_INCLUDEDIR.  CC is also set to the proper klcc executable.
+# NOTE:  This should be called before AC_PROG_CC, and before header, function
+#        or type checks.
+AC_DEFUN([AC_CHECK_KLIBC],
+[AC_BEFORE([$0], [AC_PROG_CC])
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_ARG_ENABLE([klibc],
+              [AS_HELP_STRING([--enable-klibc],
+                              [Use this to link the tools to klibc. Set KLCC
+                               to the absolute file name of klcc if not in
+                               the PATH.])],
+              [KLIBC=yes], [KLIBC=no])
+
+if test "X$KLIBC" = Xyes; then
+  # Basic cross compiling support.  I do not think it is wise to use
+  # AC_CHECK_TOOL, because if we are cross compiling, we do not want
+  # just 'klcc' to be returned ...
+  if test "X$cross_compiling" = Xyes; then
+    AC_CHECK_PROGS([KLCC], [${host_alias}-klcc], [no])
+  else
+    AC_CHECK_PROGS([KLCC], [klcc], [no])
+  fi
+  if test "X$KLCC" = Xno; then
+    AC_MSG_ERROR([cannot find klibc frontend 'klcc'!])
+  fi
+
+  CC="$KLCC"
+  CFLAGS="-Os"
+  KLIBC_KCROSS="$($KLCC -print-klibc-kcross 2>/dev/null)"
+  KLIBC_PREFIX="$($KLCC -print-klibc-prefix 2>/dev/null)"
+  KLIBC_BIN_DIR="$($KLCC -print-klibc-bindir 2>/dev/null)"
+  KLIBC_SBIN_DIR="${KLIBC_PREFIX}/${KLIBC_KCROSS}sbin"
+  KLIBC_LIB_DIR="$($KLCC -print-klibc-libdir 2>/dev/null)"
+  KLIBC_INCLUDE_DIR="$($KLCC -print-klibc-includedir 2>/dev/null)"
+
+  # At least KLIBC_LIB_DIR should be valid, else klibc is too old or
+  # something went wrong
+  if test ! -d "$KLIBC_LIB_DIR"; then
+    AC_MSG_ERROR([your klibc installation is too old or not functional!])
+  fi
+fi
+
+AC_SUBST(KLIBC)
+AC_SUBST(KLIBC_PREFIX)
+AC_SUBST(KLIBC_BIN_DIR)
+AC_SUBST(KLIBC_SBIN_DIR)
+AC_SUBST(KLIBC_LIB_DIR)
+AC_SUBST(KLIBC_INCLUDE_DIR)
+])# AC_CHECK_KLIBC
+
diff -urpN device-mapper.1.01.00/configure.in device-mapper.1.01.00.klibc/configure.in
--- device-mapper.1.01.00/configure.in	2005-01-06 00:00:39.000000000 +0200
+++ device-mapper.1.01.00.klibc/configure.in	2005-03-07 17:07:42.000000000 +0200
@@ -27,38 +27,52 @@ AC_CONFIG_AUX_DIR(autoconf) 
 dnl -- Get system type
 AC_CANONICAL_SYSTEM
 
-case "$host_os" in
-	linux*)
-		CFLAGS="$CFLAGS"
-		COPTIMISE_FLAG="-O2"
-		CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym"
-		LDDEPS="$LDDEPS .export.sym"
-		SOFLAG="-shared" ;;
-	darwin*)
-		CFLAGS="$CFLAGS -no-cpp-precomp -fno-common"
-		COPTIMISE_FLAG="-O2"
-		CLDFLAGS="$CLDFLAGS"
-		LDDEPS="$LDDEPS"
-		SOFLAG="-dynamiclib" ;;
-esac
-
 ################################################################################
 dnl -- Checks for programs.
 AC_PROG_AWK
-AC_PROG_CC
-AC_PROG_GCC_TRADITIONAL
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_MAKE_SET
 AC_PROG_RANLIB
 
 ################################################################################
+dnl -- Enables linking to klibc
+dnl -- We need to do this before header checks, as we need to set CC
+AC_CHECK_KLIBC
+
+################################################################################
+dnl -- Checks for CC.
+dnl -- Should be after klibc check.
+AC_PROG_CC
+AC_PROG_GCC_TRADITIONAL
+
+################################################################################
+dnl -- Set system type flags, etc
+dnl -- We do not want this with klibc
+if test x$KLIBC != xyes; then
+	case "$host_os" in
+		linux*)
+			CFLAGS="$CFLAGS"
+			COPTIMISE_FLAG="-O2"
+			CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym"
+			LDDEPS="$LDDEPS .export.sym"
+			SOFLAG="-shared" ;;
+		darwin*)
+			CFLAGS="$CFLAGS -no-cpp-precomp -fno-common"
+			COPTIMISE_FLAG="-O2"
+			CLDFLAGS="$CLDFLAGS"
+			LDDEPS="$LDDEPS"
+			SOFLAG="-dynamiclib" ;;
+	esac
+fi
+
+################################################################################
 dnl -- Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_STDC
 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 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))
 
 ################################################################################
 dnl -- Checks for typedefs, structures, and compiler characteristics.
@@ -191,7 +205,10 @@ fi
 
 ################################################################################
 dnl -- Check for getopt
-AC_CHECK_HEADERS(getopt.h, CFLAGS="$CFLAGS -DHAVE_GETOPTLONG")
+dnl -- We do not want this with klibc
+if test x$KLIBC != xyes; then
+	AC_CHECK_HEADERS(getopt.h, CFLAGS="$CFLAGS -DHAVE_GETOPTLONG")
+fi
 
 ################################################################################
 dnl -- Internationalisation stuff
@@ -320,6 +337,7 @@ AC_SUBST(tmpdir)
 AC_SUBST(CFLAGS)
 AC_SUBST(COPTIMISE_FLAG)
 AC_SUBST(CLDFLAGS)
+AC_SUBST(LDFLAGS)
 AC_SUBST(LDDEPS)
 AC_SUBST(SOFLAG)
 AC_SUBST(DEBUG)
diff -urpN device-mapper.1.01.00/dmsetup/Makefile.in device-mapper.1.01.00.klibc/dmsetup/Makefile.in
--- device-mapper.1.01.00/dmsetup/Makefile.in	2004-07-03 20:17:32.000000000 +0200
+++ device-mapper.1.01.00.klibc/dmsetup/Makefile.in	2005-03-07 10:35:22.000000000 +0200
@@ -17,11 +17,20 @@ top_srcdir = @top_srcdir@
 VPATH = @srcdir@
 
 TARGETS = dmsetup
-INSTALL_TYPE = install_dynamic
 
-ifeq ("@STATIC_LINK@", "yes")
-  TARGETS += dmsetup.static
-  INSTALL_TYPE += install_static
+ifeq ("@KLIBC@", "yes")
+  DMLIBS += -ldevmapper_klibc
+  DM_LIBRARY = libdevmapper_klibc.a
+  INSTALL_TYPE = install_dynamic
+else
+  DMLIBS += -ldevmapper
+  DM_LIBRARY = libdevmapper.so
+  INSTALL_TYPE = install_dynamic
+
+  ifeq ("@STATIC_LINK@", "yes")
+    TARGETS += dmsetup.static
+    INSTALL_TYPE += install_static
+  endif
 endif
 
 SOURCES = dmsetup.c
@@ -29,13 +38,13 @@ CLEAN_TARGETS = dmsetup dmsetup.static
 
 include ../make.tmpl
 
-dmsetup: $(OBJECTS) $(interfacedir)/libdevmapper.so
-	$(CC) -o $@ $(OBJECTS) $(LDFLAGS) \
-	      -L$(interfacedir) -L$(DESTDIR)/lib -ldevmapper $(LIBS)
+dmsetup: $(OBJECTS) $(interfacedir)/$(DM_LIBRARY)
+	$(CC) -o $@ $(OBJECTS) $(LDFLAGS) -L$(interfacedir) \
+	      -L$(DESTDIR)/lib $(DMLIBS) $(LIBS)
 
 dmsetup.static: $(OBJECTS) $(interfacedir)/libdevmapper.a
-	$(CC) -o $@ $(OBJECTS) $(LDFLAGS) -static \
-	      -L$(interfacedir) -L$(DESTDIR)/lib -ldevmapper $(LIBS)
+	$(CC) -o $@ $(OBJECTS) $(LDFLAGS) -static -L$(interfacedir) \
+	      -L$(DESTDIR)/lib $(DMLIBS) $(LIBS)
 
 install: $(INSTALL_TYPE)
 
diff -urpN device-mapper.1.01.00/lib/Makefile.in device-mapper.1.01.00.klibc/lib/Makefile.in
--- device-mapper.1.01.00/lib/Makefile.in	2005-01-06 20:22:44.000000000 +0200
+++ device-mapper.1.01.00.klibc/lib/Makefile.in	2005-03-06 14:20:10.000000000 +0200
@@ -21,8 +21,12 @@ SOURCES = libdm-common.c libdm-file.c $(
 
 INCLUDES = -I$(interface)
 
-LIB_STATIC = $(interface)/libdevmapper.a
-LIB_SHARED = $(interface)/libdevmapper.so
+ifeq ("@KLIBC@", "yes")
+  LIB_STATIC = $(interface)/libdevmapper_klibc.a
+else
+  LIB_STATIC = $(interface)/libdevmapper.a
+  LIB_SHARED = $(interface)/libdevmapper.so
+endif
 
 CFLAGS += -DDEVICE_UID= DEVICE_UID@ -DDEVICE_GID= DEVICE_GID@ \
 	  -DDEVICE_MODE= DEVICE_MODE@
@@ -32,35 +36,39 @@ include ../make.tmpl
 .PHONY: install_dynamic install_static \
 	install_fs install_ioctl install_ioctl_static
 
-INSTALL_TYPE = install_dynamic
-
-ifeq ("@STATIC_LINK@", "yes")
-  INSTALL_TYPE += install_static
+ifeq ("@KLIBC@", "yes")
+  INSTALL_TYPE = install_static
+else
+  INSTALL_TYPE = install_dynamic
+
+  ifeq ("@STATIC_LINK@", "yes")
+    INSTALL_TYPE += install_static
+  endif
 endif
 
 install: $(INSTALL_TYPE)
 
 install_dynamic: install_ interface@
-	$(LN_S) -f libdevmapper.so.$(LIB_VERSION) $(libdir)/libdevmapper.so
+	$(LN_S) -f $(notdir $(LIB_SHARED)).$(LIB_VERSION) $(libdir)/$(notdir $(LIB_SHARED))
 	$(INSTALL) -D $(OWNER) $(GROUP) -m 444 libdevmapper.h \
 		$(includedir)/libdevmapper.h
 
 install_static: install_ interface@_static
-	$(LN_S) -f libdevmapper.a.$(LIB_VERSION) $(libdir)/libdevmapper.a
+	$(LN_S) -f $(notdir $(LIB_STATIC)).$(LIB_VERSION) $(libdir)/$(notdir $(LIB_STATIC))
 	$(INSTALL) -D $(OWNER) $(GROUP) -m 444 libdevmapper.h \
 		$(includedir)/libdevmapper.h
 
-install_fs: fs/libdevmapper.so
+install_fs: fs/$(notdir $(LIB_SHARED))
 	$(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \
-		$(libdir)/libdevmapper.so.$(LIB_VERSION)
+		$(libdir)/$(notdir $(LIB_SHARED)).$(LIB_VERSION)
 
-install_ioctl: ioctl/libdevmapper.so
+install_ioctl: ioctl/$(notdir $(LIB_SHARED))
 	$(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \
-		$(libdir)/libdevmapper.so.$(LIB_VERSION)
+		$(libdir)/$(notdir $(LIB_SHARED)).$(LIB_VERSION)
 
-install_ioctl_static: ioctl/libdevmapper.a
+install_ioctl_static: ioctl/$(notdir $(LIB_STATIC))
 	$(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \
-		$(libdir)/libdevmapper.a.$(LIB_VERSION)
+		$(libdir)/$(notdir $(LIB_STATIC)).$(LIB_VERSION)
 
 .PHONY: distclean_lib distclean
 
diff -urpN device-mapper.1.01.00/lib/ioctl/libdm-iface.c device-mapper.1.01.00.klibc/lib/ioctl/libdm-iface.c
--- device-mapper.1.01.00/lib/ioctl/libdm-iface.c	2005-01-13 00:10:14.000000000 +0200
+++ device-mapper.1.01.00.klibc/lib/ioctl/libdm-iface.c	2005-03-06 14:00:40.000000000 +0200
@@ -120,24 +120,30 @@ static int _get_proc_number(const char *
 			    uint32_t *number)
 {
 	FILE *fl;
-	char nm[256];
-	int c;
+	char nm[256], buf[300];
+	int num, size;
 
 	if (!(fl = fopen(file, "r"))) {
 		log_error("%s: fopen failed: %s", file, strerror(errno));
 		return 0;
 	}
 
-	while (!feof(fl)) {
-		if (fscanf(fl, "%d %255s\n", number, &nm[0]) == 2) {
+	/* Use fread+sscanf for klibc compatibility. */
+	do {
+		size = 0;
+		do {
+			num = fread(&buf[size], sizeof(char), 1, fl);
+			if (num > 0)
+				size++;
+		} while (num > 0 && buf[size - 1] != '\n');
+		buf[size] = '\0';
+		if (sscanf(buf, "%d %255s\n", number, &nm[0]) == 2) {
 			if (!strcmp(name, nm)) {
 				fclose(fl);
 				return 1;
 			}
-		} else do {
-			c = fgetc(fl);
-		} while (c != EOF && c != '\n');
-	}
+		}
+	} while (num > 0);
 	fclose(fl);
 
 	log_error("%s: No entry for %s found", file, name);
diff -urpN device-mapper.1.01.00/lib/libdm-file.c device-mapper.1.01.00.klibc/lib/libdm-file.c
--- device-mapper.1.01.00/lib/libdm-file.c	2005-01-06 20:22:44.000000000 +0200
+++ device-mapper.1.01.00.klibc/lib/libdm-file.c	2005-03-06 12:43:18.000000000 +0200
@@ -16,10 +16,12 @@
 #include "lib.h"
 #include "libdm-file.h"
 
-#include <sys/file.h>
+#ifndef __KLIBC__
+# include <sys/file.h>
+# include <malloc.h>
+#endif
 #include <fcntl.h>
 #include <dirent.h>
-#include <malloc.h>
 
 static int _create_dir_recursive(const char *dir)
 {
diff -urpN device-mapper.1.01.00/make.tmpl.in device-mapper.1.01.00.klibc/make.tmpl.in
--- device-mapper.1.01.00/make.tmpl.in	2004-07-03 20:17:32.000000000 +0200
+++ device-mapper.1.01.00.klibc/make.tmpl.in	2005-03-08 00:04:51.000000000 +0200
@@ -34,9 +34,15 @@ SOFLAG += @SOFLAG@
 prefix = @prefix@
 exec_prefix = @exec_prefix@
 bindir = $(DESTDIR)@bindir@
-includedir = $(DESTDIR)@includedir@
-libdir = $(DESTDIR)@libdir@
-sbindir = $(DESTDIR)@sbindir@
+ifeq ("@KLIBC@", "no")
+  includedir = $(DESTDIR)@includedir@
+  libdir = $(DESTDIR)@libdir@
+  sbindir = $(DESTDIR)@sbindir@
+else
+  includedir = $(DESTDIR)@KLIBC_INCLUDE_DIR@
+  libdir = $(DESTDIR)@KLIBC_LIB_DIR@
+  sbindir = $(DESTDIR)@KLIBC_SBIN_DIR@
+endif
 infodir = $(DESTDIR)@infodir@
 mandir = $(DESTDIR)@mandir@
 localedir = $(DESTDIR)@LOCALEDIR@
@@ -56,7 +62,12 @@ endif
 
 SUFFIXES = .c .d .o .so .a .po .pot .mo
 
-CFLAGS += -fPIC -Wall -Wundef -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline
+CFLAGS+=-fPIC -Wall -Wundef -Wcast-align -Wwrite-strings -Winline
+
+ifeq ("@KLIBC@", "no")
+  # These ones make klibc compiles very loud
+  CFLAGS+=-Wshadow -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
+endif
 
 #CFLAGS += -W -Wconversion -Wpointer-arith -Wredundant-decls -Wbad-function-cast -Wcast-qual -Wmissing-noreturn
 
---------------------[ Ciphire Signature ]----------------------
From: azarah nosferatu za org signed 'text' (13928 bytes)
Date: on 09 March 2005 at 11:57:53 UTC
To:   dm-devel redhat com
----------------------------------------------------------------
: Ciphire has secured this email against identity theft.
: Free download at www.ciphire.com. The garbled lines
: below are the sender's verifiable digital signature.
----------------------------------------------------------------
01fAAAAAEAAADB5C5CaDYAADADAAIAAgACACAjYe/qeWoHRrdDE3mOifT0WPgp92
kbkclxgX1lQsV9VwEAJOQiG+Djg3e7Ai63e8AMF0Hl/gle8q4Ud88Lecx5fcUcYM
C8IVEPhlhjiU316WuClbJp4eHYdJfcJ8naTC+h+A==
--------------------[ End Ciphire Signature ]-------------------

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]