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