Hi

When you do not supply --with-drivers it defaults to "auto", which enables the autodetection algorithms (which add detected devices to the drivers list), and then it checks if drivers have not changed (it tests if it is still "auto") and if so it builds all drivers

The "all" option is added now, with the possibility to combine upper and lowercase names for the drivers (upekTS will work as well as UPEKts and UPEKTS and any other combination).

Anyway, the default behavior is set to "auto" because it will remove the unwanted ImageMagick dependency for most users (and there would be no questions "which driver should I use?"). I would personally let Daniel decide whether "auto" or "all" should be the default.

Pavel

PS. any more suggestions are welcome ;-)

Artem Egorkine wrote:
Besides, if I understand configure.ac correctly, you do not have a
"--with-drivers=all" option at all, as not supplying
"--with-drivers=..." will default to "--with-drivers=auto" behavior.
Am I right?

-Artem
diff -ur a/configure.ac b/configure.ac
--- a/configure.ac	2008-07-17 14:06:12.000000000 +0200
+++ b/configure.ac	2008-07-21 17:56:00.000000000 +0200
@@ -18,6 +18,106 @@
 AC_SUBST(lt_revision)
 AC_SUBST(lt_age)
 
+all_drivers="upekts upektc upeksonly vcom5s uru4000 fdu2000 aes1610 aes2501 aes4000"
+
+require_imagemagick='no'
+require_aeslib='no'
+enable_upekts='no'
+enable_upektc='no'
+enable_upeksonly='no'
+enable_vcom5s='no'
+enable_uru4000='no'
+enable_fdu2000='no'
+enable_aes1610='no'
+enable_aes2501='no'
+enable_aes4000='no'
+
+AC_ARG_WITH([drivers],[AS_HELP_STRING([--with-drivers],
+	[List of drivers to enable])],
+	[drivers="$withval"],
+	[drivers="auto"])
+
+drivers=`echo ${drivers} | sed -e 's/.*/\L&/'`
+
+if test "${drivers}" = "auto"; then
+	usbdev=`cat /proc/bus/usb/devices | grep -e "^P:" | sed -e 's/Vendor=//g' -e 's/ProdID=//g' -e 's/P:  //' -e 's/Rev=[a-z. 0-9]*//g' -e 's/ /-/'`
+	for driver in `ls -1 libfprint/drivers/`;do
+		for fpdev in `cat libfprint/drivers/${driver} | grep -E "vendor[ ]*=[ ]*0x([0-9a-f]{4}),[ ]*\.product[ ]*=[ ]*0x([0-9a-f]{4})" | sed -e 's/.*vendor[ ]*=[ ]*0x\([0-9a-f]\{4\}\),[ ]*\.product[ ]*=[ ]*0x\([0-9a-f]\{4\}\).*/\1-\2/g'`; do
+			for dev in ${usbdev}; do
+				if test "${fpdev}" = "${dev}"; then
+					drivers=${drivers},`echo ${driver}|head -c -3`
+				fi
+			done
+		done
+	done
+fi
+
+if test "${drivers}" = "auto"; then
+	drivers=${all_drivers}
+fi
+
+if test "${drivers}" = "all"; then
+	drivers=${all_drivers}
+fi
+
+for driver in `echo ${drivers} | sed -e 's/,/ /g' -e 's/,$//g'`; do
+	case ${driver} in
+		upekts)
+			AC_DEFINE([ENABLE_UPEKTS], [], [Build UPEK TouchStrip driver])
+			enable_upekts="yes"
+		;;
+		upektc)
+			AC_DEFINE([ENABLE_UPEKTC], [], [Build UPEK TouchChip driver])
+			enable_upektc="yes"
+		;;
+		upeksonly)
+			AC_DEFINE([ENABLE_UPEKSONLY], [], [Build UPEK TouchStrip sensor-only driver])
+			enable_upeksonly="yes"
+		;;
+		uru4000)
+			AC_DEFINE([ENABLE_URU4000], [], [Build Digital Persona U.are.U 4000 driver])
+			enable_uru4000="yes"
+		;;
+		fdu2000)
+			AC_DEFINE([ENABLE_FDU2000], [], [Build Secugen FDU 2000 driver])
+			enable_fdu2000="yes"
+		;;
+		vcom5s)
+			AC_DEFINE([ENABLE_VCOM5S], [], [Build Veridicom 5thSense driver])
+			enable_vcom5s="yes"
+		;;
+		aes2501)
+			AC_DEFINE([ENABLE_AES2501], [], [Build AuthenTec AES2501 driver])
+			require_aeslib="yes"
+			enable_aes2501="yes"
+		;;
+		aes1610)
+			AC_DEFINE([ENABLE_AES1610], [], [Build AuthenTec AES1610 driver])
+			require_aeslib="yes"
+			enable_aes1610="yes"
+		;;
+		aes4000)
+			AC_DEFINE([ENABLE_AES4000], [], [Build AuthenTec AES4000 driver])
+			require_aeslib="yes"
+			require_imagemagick="yes"
+			enable_aes4000="yes"
+		;;
+	esac
+done
+
+AM_CONDITIONAL([ENABLE_UPEKTS], [test "$enable_upekts" != "no"])
+#AM_CONDITIONAL([ENABLE_UPEKTC], [test "$enable_upektc" != "no"])
+AM_CONDITIONAL([ENABLE_UPEKSONLY], [test "$enable_upeksonly" != "no"])
+AM_CONDITIONAL([ENABLE_VCOM5S], [test "$enable_vcom5s" != "no"])
+AM_CONDITIONAL([ENABLE_URU4000], [test "$enable_uru4000" != "no"])
+#AM_CONDITIONAL([ENABLE_FDU2000], [test "$enable_fdu2000" != "no"])
+#AM_CONDITIONAL([ENABLE_AES1610], [test "$enable_aes1610" != "no"])
+AM_CONDITIONAL([ENABLE_AES2501], [test "$enable_aes2501" != "no"])
+AM_CONDITIONAL([ENABLE_AES4000], [test "$enable_aes4000" != "no"])
+AM_CONDITIONAL([REQUIRE_IMAGEMAGICK], [test "$require_imagemagick" != "no"])
+AM_CONDITIONAL([REQUIRE_AESLIB], [test "$require_aeslib" != "no"])
+
+
 PKG_CHECK_MODULES(LIBUSB, [libusb-1.0 >= 0.9.1])
 AC_SUBST(LIBUSB_CFLAGS)
 AC_SUBST(LIBUSB_LIBS)
@@ -31,9 +131,11 @@
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
+if test "$require_imagemagick" != "no"; then
 PKG_CHECK_MODULES(IMAGEMAGICK, "ImageMagick")
 AC_SUBST(IMAGEMAGICK_CFLAGS)
 AC_SUBST(IMAGEMAGICK_LIBS)
+fi;
 
 # Examples build
 AC_ARG_ENABLE([examples-build], [AS_HELP_STRING([--enable-examples-build],
diff -ur a/libfprint/Makefile.am b/libfprint/Makefile.am
--- a/libfprint/Makefile.am	2008-07-17 14:06:23.000000000 +0200
+++ b/libfprint/Makefile.am	2008-07-20 11:09:49.000000000 +0200
@@ -10,8 +10,8 @@
 FDU2000_SRC = drivers/fdu2000.c
 VCOM5S_SRC = drivers/vcom5s.c
 
-DRIVER_SRC = $(UPEKTS_SRC) $(AES4000_SRC) $(AES2501_SRC) $(URU4000_SRC) $(VCOM5S_SRC) $(UPEKSONLY_SRC)
-#DRIVER_SRC = $(AES1610_SRC) $(UPEKTC_SRC) $(FDU2000_SRC)
+DRIVER_SRC = ""
+OTHER_SRC = ""
 
 NBIS_SRC = \
 	nbis/include/bozorth.h \
@@ -50,9 +50,54 @@
 	nbis/mindtct/sort.c \
 	nbis/mindtct/util.c
 
-libfprint_la_CFLAGS = -fvisibility=hidden -I$(srcdir)/nbis/include $(LIBUSB_CFLAGS) $(GLIB_CFLAGS) $(IMAGEMAGICK_CFLAGS) $(CRYPTO_CFLAGS) $(AM_CFLAGS)
+libfprint_la_CFLAGS = -fvisibility=hidden -I$(srcdir)/nbis/include $(LIBUSB_CFLAGS) $(GLIB_CFLAGS) $(CRYPTO_CFLAGS) $(AM_CFLAGS)
 libfprint_la_LDFLAGS = -version-info @lt_major@:@lt_revision@:@lt_age@
-libfprint_la_LIBADD = -lm $(LIBUSB_LIBS) $(GLIB_LIBS) $(IMAGEMAGICK_LIBS) $(CRYPTO_LIBS)
+libfprint_la_LIBADD = -lm $(LIBUSB_LIBS) $(GLIB_LIBS) $(CRYPTO_LIBS)
+
+if ENABLE_UPEKTS
+DRIVER_SRC += $(UPEKTS_SRC)
+endif
+
+if ENABLE_UPEKSONLY
+DRIVER_SRC += $(UPEKSONLY_SRC)
+endif
+
+#if ENABLE_UPEKTC
+#DRIVER_SRC += $(UPEKTC_SRC)
+#endif
+
+if ENABLE_URU4000
+DRIVER_SRC += $(URU4000_SRC)
+endif
+
+if ENABLE_VCOM5S
+DRIVER_SRC += $(VCOM5S_SRC)
+endif
+
+#if ENABLE_FDU2000
+#DRIVER_SRC += $(FDU2000_SRC)
+#endif
+
+#if ENABLE_AES1610
+#DRIVER_SRC += $(AES1610_SRC)
+#endif
+
+if ENABLE_AES2501
+DRIVER_SRC += $(AES2501_SRC)
+endif
+
+if ENABLE_AES4000
+DRIVER_SRC += $(AES4000_SRC)
+endif
+
+if REQUIRE_IMAGEMAGICK
+libfprint_la_CFLAGS += $(IMAGEMAGICK_CFLAGS) -DREQUIRE_IMAGEMAGICK
+libfprint_la_LIBADD += $(IMAGEMAGICK_LIBS)
+endif
+
+if REQUIRE_AESLIB
+OTHER_SRC += aeslib.c aeslib.h
+endif
 
 libfprint_la_SOURCES =	\
 	fp_internal.h	\
@@ -64,9 +109,8 @@
 	imgdev.c	\
 	poll.c		\
 	sync.c		\
-	aeslib.c	\
-	aeslib.h	\
 	$(DRIVER_SRC)	\
+	$(OTHER_SRC)	\
 	$(NBIS_SRC)
 
 pkginclude_HEADERS = fprint.h
diff -ur a/libfprint/core.c b/libfprint/core.c
--- a/libfprint/core.c	2008-07-17 14:06:28.000000000 +0200
+++ b/libfprint/core.c	2008-07-20 11:09:49.000000000 +0200
@@ -327,18 +327,38 @@
 }
 
 static struct fp_driver * const primitive_drivers[] = {
+#ifdef ENABLE_UPEKTS
 	&upekts_driver,
+#endif
 };
 
 static struct fp_img_driver * const img_drivers[] = {
+#ifdef ENABLE_AES4000
 	&aes4000_driver,
+#endif
+#ifdef ENABLE_AES2501
 	&aes2501_driver,
+#endif
+#ifdef ENABLE_URU4000
 	&uru4000_driver,
+#endif
+#ifdef ENABLE_VCOM5S
 	&vcom5s_driver,
+#endif
+#ifdef ENABLE_UPEKSONLY
 	&upeksonly_driver,
-	/* &aes1610_driver,
+#endif
+	/*
+#ifdef ENABLE_AES1610
+	&aes1610_driver,
+#endif
+#ifdef ENABLE_UPEKTC
 	&upektc_driver,
-	&fdu2000_driver, */
+#endif
+#ifdef ENABLE_FDU2000
+	&fdu2000_driver,
+#endif
+	*/
 };
 
 static void register_drivers(void)
diff -ur a/libfprint/fp_internal.h b/libfprint/fp_internal.h
--- a/libfprint/fp_internal.h	2008-07-17 14:06:38.000000000 +0200
+++ b/libfprint/fp_internal.h	2008-07-20 11:09:49.000000000 +0200
@@ -233,15 +233,33 @@
 	void (*deactivate)(struct fp_img_dev *dev);
 };
 
+#ifdef ENABLE_UPEKTS
 extern struct fp_driver upekts_driver;
+#endif
+#ifdef ENABLE_UPEKTC
 extern struct fp_img_driver upektc_driver;
+#endif
+#ifdef ENABLE_UPEKSONLY
 extern struct fp_img_driver upeksonly_driver;
+#endif
+#ifdef ENABLE_URU4000
 extern struct fp_img_driver uru4000_driver;
+#endif
+#ifdef ENABLE_AES1610
 extern struct fp_img_driver aes1610_driver;
+#endif
+#ifdef ENABLE_AES2501
 extern struct fp_img_driver aes2501_driver;
+#endif
+#ifdef ENABLE_AES4000
 extern struct fp_img_driver aes4000_driver;
+#endif
+#ifdef ENABLE_FDU2000
 extern struct fp_img_driver fdu2000_driver;
+#endif
+#ifdef ENABLE_VCOM5S
 extern struct fp_img_driver vcom5s_driver;
+#endif
 
 extern libusb_context *fpi_usb_ctx;
 extern GSList *opened_devices;
diff -ur a/libfprint/imgdev.c b/libfprint/imgdev.c
--- a/libfprint/imgdev.c	2008-07-17 14:06:33.000000000 +0200
+++ b/libfprint/imgdev.c	2008-07-20 11:09:49.000000000 +0200
@@ -20,7 +20,9 @@
 #include <errno.h>
 
 #include <glib.h>
+#ifdef REQUIRE_IMAGEMAGICK
 #include <magick/ImageMagick.h>
+#endif
 
 #include "fp_internal.h"
 
@@ -87,6 +89,7 @@
 	return imgdrv->change_state(imgdev, state);
 }
 
+#ifdef REQUIRE_IMAGEMAGICK
 static struct fp_img *im_resize(struct fp_img *img, unsigned int factor)
 {
 	Image *mimg;
@@ -129,6 +132,7 @@
 
 	return newimg;
 }
+#endif
 
 /* check image properties and resize it if necessary. potentially returns a new
  * image after freeing the old one. */
@@ -157,6 +161,7 @@
 		return -EINVAL;
 	}
 
+#ifdef REQUIRE_IMAGEMAGICK
 	if (imgdrv->enlarge_factor > 1) {
 		/* FIXME: enlarge_factor should not exist! instead, MINDTCT should
 		 * actually look at the value of the pixels-per-mm parameter and
@@ -166,6 +171,7 @@
 		fp_img_free(img);
 		*_img = tmp;
 	}
+#endif
 	return 0;
 }
 
_______________________________________________
fprint mailing list
[email protected]
http://lists.reactivated.net/mailman/listinfo/fprint

Reply via email to