pcsc-lite/configure.ac

487 lines
13 KiB
Plaintext

# -*- mode: m4; -*-
# Process this file with autoconf to produce a configure script
AC_PREREQ([2.69])
AC_INIT([pcsc-lite],[1.9.6])
AC_CONFIG_SRCDIR(src/pcscdaemon.c)
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip)
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR(m4)
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_CANONICAL_HOST
AC_PROG_CC
AC_C_BIGENDIAN
# Check for some target-specific stuff
case "$host" in
*-*-hpux*)
CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED"
;;
*-*-solaris*)
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
LDFLAGS="$LDFLAGS -L/usr/local/lib -R/usr/local/lib"
need_dash_r=1
;;
*-*-sunos4*)
CPPFLAGS="$CPPFLAGS -DSUNOS4"
;;
*-*-aix*)
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
LDFLAGS="$LDFLAGS -L/usr/local/lib"
if (test "$LD" != "gcc" && test -z "$blibpath"); then
blibpath="/usr/lib:/lib:/usr/local/lib"
fi
;;
*-*-osf*)
CPPFLAGS="$CPPFLAGS -D_POSIX_PII_SOCKET"
;;
*-*-darwin*)
AC_SUBST(COREFOUNDATION)
COREFOUNDATION="-Wl,-framework,CoreFoundation"
AC_SUBST(IOKIT)
IOKIT="-Wl,-framework,IOKit"
if test "$GCC" = "yes"; then
CFLAGS="$CFLAGS -no-cpp-precomp"
fi
use_libusb=no
AC_MSG_WARN([libusb disabled on Darwin for pcsc-lite])
;;
esac
# Options
AM_MAINTAINER_MODE
# Checks for programs
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_LEX([noyywrap])
if test $LEX = ":"
then
AC_MSG_ERROR([no lex or flex found])
fi
PKG_PROG_PKG_CONFIG
AM_PROG_CC_C_O
AM_PROG_AR
# Special check for pthread support
AX_PTHREAD([
AC_DEFINE(HAVE_PTHREAD, 1,
[Define if you have POSIX threads libraries and header files.])
],[
AC_MSG_ERROR([POSIX thread support required])
])
CC="$PTHREAD_CC"
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_CFLAGS)
# check for pthread_cancel()
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
AC_CHECK_FUNCS(pthread_cancel)
CFLAGS="$saved_CFLAGS"
# Add libtool support
# Static lib is disabled by default. Use --enable-static if needed
LT_INIT(disable-static)
LT_INIT
# Automatically update the libtool script if it becomes out-of-date
#AC_SUBST(LIBTOOL_DEPS)
# Checks for header files
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([getopt.h sys/filio.h syslog.h dl.h fcntl.h alloca.h])
# Checks for typedefs, structures, and compiler characteristics
AC_C_CONST
AC_TYPE_UID_T
AC_TYPE_SIZE_T
AC_STRUCT_DIRENT_D_TYPE
# Checks for library functions
AC_FUNC_ERROR_AT_LINE
AC_FUNC_STAT
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(getopt_long nanosleep strerror vsnprintf)
AC_FUNC_ALLOCA
# C Compiler features
AC_C_INLINE
if test "$GCC" = "yes"; then
CFLAGS="-Wall -fno-common $CFLAGS"
fi
# check if the compiler support -fvisibility=hidden (GCC >= 4)
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fvisibility=hidden"
AC_MSG_CHECKING([for -fvisibility=hidden])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])],
[ AC_MSG_RESULT([yes])
SYMBOL_VISIBILITY="-fvisibility=hidden" ],
AC_MSG_RESULT([no]))
CFLAGS="$saved_CFLAGS"
AC_SUBST(SYMBOL_VISIBILITY)
AC_SEARCH_LIBS([dlopen], [dl dld], [], [
AC_MSG_ERROR([unable to find the dlopen() function])
])
# Use 'uname' output as an architecture define
PCSC_ARCH=`uname | sed -e s,/,_,`
case "$PCSC_ARCH" in
Darwin)
PCSC_ARCH=MacOS
;;
SunOS)
PCSC_ARCH=Solaris
;;
esac
AC_DEFINE_UNQUOTED(PCSC_ARCH, "$PCSC_ARCH", [PC/SC target architecture])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} $PCSC_ARCH $host"
# --disable-documentation
AC_ARG_ENABLE(documentation,
AS_HELP_STRING([--disable-documentation],[do not build documentation]),
[ enable_doc="${enableval}" ], [ enable_doc="yes" ] )
AM_CONDITIONAL(ENABLE_DOC, test "$enable_doc" != "no")
# See if socket() is found from libsocket
AC_CHECK_LIB(socket, socket, [LIBS="$LIBS -lsocket"])
# check for mq_getattr()
AC_CHECK_LIB(rt, mq_getattr, [LIBS="$LIBS -lrt"])
# check for libsystemd
AC_ARG_ENABLE(libsystemd,
AS_HELP_STRING([--disable-libsystemd],[do not use libsystemd]),
[ use_libsystemd="${enableval}" ], [ use_libsystemd="yes" ] )
if test "$use_libsystemd" != "no"; then
PKG_CHECK_MODULES(LIBSYSTEMD, libsystemd,,
[ AC_MSG_ERROR([install libsystemd-dev or use --disable-libsystemd]) ])
AC_DEFINE(USE_LIBSYSTEMD, 1, [Use libsystemd])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} libsystemd"
fi
# --disable-serial
AC_ARG_ENABLE(serial,
AS_HELP_STRING([--disable-serial],[do not use serial reader.conf files]),
[ use_serial="${enableval}" ], [ use_serial="yes" ] )
AM_CONDITIONAL(ENABLE_SERIAL, test "$use_serial" != "no")
if test "$use_serial" != "no"; then
AC_DEFINE(USE_SERIAL, 1, [Use serial conf file mechanism])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} serial"
fi
# --disable-usb
AC_ARG_ENABLE(usb,
AS_HELP_STRING([--disable-usb],[do not use usb hotplug]),
[ use_usb="${enableval}" ], [ use_usb="yes" ] )
AM_CONDITIONAL(ENABLE_USB, test "$use_usb" != "no")
if test "$use_usb" != "no"; then
AC_DEFINE(USE_USB, 1, [Use USB hotplug mechanism])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} usb"
fi
# --enable-libudev
AC_ARG_ENABLE(libudev,
AS_HELP_STRING([--disable-libudev],[do not use libudev]),
[ use_libudev="${enableval}" ],
[ if test "$PCSC_ARCH" != "Linux" ; then
use_libudev="no"
else
use_libudev="${use_libudev-yes}"
fi ])
# disable libudev check is USB is not used
if test "$use_usb" = "no"; then
use_libudev="no"
fi
# check if libudev is used
if test "x$use_libudev" != xno ; then
PKG_CHECK_MODULES(LIBUDEV, libudev, [],
[ AC_MSG_ERROR([install libudev-dev or use --disable-libudev]) ])
saved_CPPFLAGS="$CPPFLAGS"
saved_LIBS="$LIBS"
CPPFLAGS="$CPPFLAGS $LIBUDEV_CFLAGS"
LIBS="$LDFLAGS $LIBUDEV_LIBS"
AC_CHECK_HEADERS(libudev.h, [],
[ AC_MSG_ERROR([libudev.h not found, use ./configure LIBUDEV_CFLAGS=...]) ])
LIBS="$LIBS $COREFOUNDATION $IOKIT"
AC_MSG_CHECKING([for udev_monitor_unref])
AC_TRY_LINK_FUNC(udev_monitor_unref, [ AC_MSG_RESULT([yes]) ],
[ AC_MSG_ERROR([udev_monitor_unref not found, use ./configure LIBUDEV_LIBS=...]) ])
# everything needed for libudev support is present
use_libudev=yes
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
fi
AC_SUBST(LIBUDEV_CFLAGS)
AC_SUBST(LIBUDEV_LIBS)
if test x$use_libudev = xyes; then
AC_DEFINE(HAVE_LIBUDEV, 1, [Libudev is available])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} libudev"
fi
# --enable-libusb
AC_ARG_ENABLE(libusb,
AS_HELP_STRING([--enable-libusb],[use libusb]),
[ use_libusb="${enableval}" ],
[ if test "x$use_libudev" = xyes ; then use_libusb="${use_libusb-no}" ;
else use_libusb="${use_libusb-yes}" ; fi ] )
# disable libusb check is USB is not used
if test "$use_usb" = "no"; then
use_libusb="no"
fi
# check if libusb is used
if test "x$use_libusb" != xno ; then
if test "x$use_libudev" != xno ; then
AC_MSG_ERROR([You can't use libudev _and_ libusb. Select only one.])
fi
PKG_CHECK_MODULES(LIBUSB, libusb-1.0, [],
[
AC_MSG_RESULT([no])
AC_CHECK_PROG([LIBUSBCONFIG], [libusb-config], [yes])
if test "$LIBUSBCONFIG" = "yes" ; then
LIBUSB_CFLAGS="$LIBUSB_CFLAGS `libusb-config --cflags`"
LIBUSB_LIBS="$LIBUSB_LIBS `libusb-config --libs`"
else
AC_MSG_WARN([libusb-config not found.])
fi
])
saved_CPPFLAGS="$CPPFLAGS"
saved_LIBS="$LIBS"
CPPFLAGS="$CPPFLAGS $LIBUSB_CFLAGS"
LIBS="$LDFLAGS $LIBUSB_LIBS"
AC_CHECK_HEADERS(libusb.h, [],
[ AC_MSG_ERROR([libusb.h not found, use ./configure LIBUSB_CFLAGS=...]) ])
LIBS="$LIBS $COREFOUNDATION $IOKIT"
AC_MSG_CHECKING([for libusb_init])
AC_TRY_LINK_FUNC(libusb_init, [ AC_MSG_RESULT([yes]) ],
[ AC_MSG_ERROR([libusb not found, use ./configure LIBUSB_LIBS=...]) ])
# everything needed for libusb support is present
use_libusb=yes
CPPFLAGS="$saved_CPPFLAGS"
LIBS="$saved_LIBS"
fi
AC_SUBST(LIBUSB_CFLAGS)
AC_SUBST(LIBUSB_LIBS)
if test x$use_libusb = xyes; then
AC_DEFINE(HAVE_LIBUSB, 1, [Libusb is available])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} libusb"
fi
# --enable-polkit
POLKIT_MINIMUM=0.111
AC_ARG_ENABLE(polkit,
AS_HELP_STRING([--enable-polkit],
[Build with polkit support]),
use_polkit=$enableval, use_polkit=no)
if test "$use_polkit" != "no"; then
PKG_CHECK_MODULES(POLKIT, [polkit-gobject-1 >= $POLKIT_MINIMUM], [use_polkit=yes], [use_polkit=no])
if test "$use_polkit" != "no";then
AC_DEFINE([HAVE_POLKIT], 1, [Build polkit access control support])
polkit_policy_dir=$($PKG_CONFIG polkit-gobject-1 --variable=policydir)
AC_SUBST(POLICY_DIR, [$polkit_policy_dir])
else
use_polkit=no
AC_MSG_ERROR([[
***
*** polkit >= $POLKIT_MINIMUM was not found. Access control will be disabled.
*** You may get it from http://www.freedesktop.org/software/polkit/
*** ]])
fi
fi
AM_CONDITIONAL(ENABLE_POLKIT, test "$use_polkit" != "no")
# --with-systemdsystemunitdir=DIR
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
[], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
if test "x$with_systemdsystemunitdir" != xno; then
AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
fi
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
# --enable-embedded
AC_ARG_ENABLE(embedded,
AS_HELP_STRING([--enable-embedded],[limit RAM and CPU ressources by disabling features (log)]),
[ use_embedded="${enableval}" ])
if test x$use_embedded = xyes; then
AC_DEFINE(NO_LOG, 1, [Disable logging support])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} nolog"
fi
# --enable-usbdropdir=DIR
AC_ARG_ENABLE(usbdropdir,
AS_HELP_STRING([--enable-usbdropdir=DIR],[directory containing USB
drivers (default /usr/local/lib/pcsc/drivers)]),
[usbdropdir="${enableval}"], [usbdropdir=false])
if test x${usbdropdir} = xfalse ; then
if test "x$libdir" != xNONE; then
usbdropdir="$libdir/pcsc/drivers"
else
usbdropdir="$ac_default_libdir/pcsc/drivers"
fi
fi
AX_RECURSIVE_EVAL($usbdropdir,usbdropdir_exp)
usbdropdir=$usbdropdir_exp
AC_DEFINE_UNQUOTED(PCSCLITE_HP_DROPDIR, "$usbdropdir", [directory containing USB drivers])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} usbdropdir=${usbdropdir}"
# --enable-debugatr
AC_ARG_ENABLE(debugatr,
AS_HELP_STRING([--enable-debugatr],[enable ATR debug messages from pcscd]),
[ case "${enableval}" in
yes) debugatr=true ;;
no) debugatr=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-debugatr]) ;;
esac], [debugatr=false])
if test x${debugatr} = xtrue ; then
AC_DEFINE(ATR_DEBUG, 1, [display ATR parsing debug messages.])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} debugatr"
fi
# --enable-ipcdir=DIR
AC_ARG_ENABLE(ipcdir,
AS_HELP_STRING([--enable-ipcdir=DIR],[directory containing IPC files
(default /run/pcscd)]),
[ipcdir="${enableval}"], [ipcdir=false])
if test x${ipcdir} = xfalse ; then
ipcdir="/run/pcscd"
fi
AC_DEFINE_UNQUOTED(USE_IPCDIR, "$ipcdir", [directory containing IPC files])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} ipcdir=${ipcdir}"
CPPFLAGS="-I\${top_srcdir}/src $CPPFLAGS"
# --enable-confdir=DIR
AC_ARG_ENABLE(confdir,
AS_HELP_STRING([--enable-confdir=DIR],[directory containing reader configurations (default ${sysconfdir}/reader.conf.d)]),
[confdir="${enableval}"],
[confdir="${sysconfdir}/reader.conf.d"])
# --disable-filter
AC_ARG_ENABLE(filter,
AS_HELP_STRING([--disable-filter],[disable reader filtering using
PCSCLITE_FILTER_IGNORE_READER_NAMES and PCSCLITE_FILTER_EXTEND_READER_NAMES]),
[ use_filter="${enableval}" ], [ use_filter="yes" ])
if test x$use_filter = xyes; then
AC_DEFINE(FILTER_NAMES, 1, [Filter reader names])
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} filter"
fi
# --disable-strict
AC_ARG_ENABLE(
[strict],
[AS_HELP_STRING([--disable-strict],[disable strict compile mode @<:@enabled@:>@])],
,
[enable_strict="yes"]
)
if test "${enable_strict}" = "yes"; then
CFLAGS="-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}"
fi
# Setup dist stuff
AC_SUBST(usbdropdir)
AC_SUBST(ipcdir)
AC_SUBST(serialconfdir)
AC_SUBST(host_to_ccid_16)
AC_SUBST(host_to_ccid_32)
AX_RECURSIVE_EVAL($confdir,confdir_exp)
AX_RECURSIVE_EVAL($sbindir,sbindir_exp)
PCSCLITE_CONFIG_DIR="${confdir_exp}"
AC_SUBST(PCSCLITE_CONFIG_DIR)
AC_SUBST(sbindir_exp)
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} configdir=${PCSCLITE_CONFIG_DIR}"
AC_DEFINE_UNQUOTED([PCSCLITE_FEATURES], ["${PCSCLITE_FEATURES}"], [Enabled PC/SC lite features])
cat << EOF
PC/SC lite has been configured with following options:
Version: ${PACKAGE_VERSION}
System binaries: ${sbindir_exp}
Configuration dir: ${PCSCLITE_CONFIG_DIR}
Host: ${host}
Compiler: ${CC}
Preprocessor flags: ${CPPFLAGS}
Compiler flags: ${CFLAGS}
Preprocessor flags: ${CPPFLAGS}
Linker flags: ${LDFLAGS}
Libraries: ${LIBS}
PTHREAD_CFLAGS: ${PTHREAD_CFLAGS}
PTHREAD_LIBS: ${PTHREAD_LIBS}
PCSC_ARCH: ${PCSC_ARCH}
polkit support: ${use_polkit}
polkit policy dir: ${polkit_policy_dir}
libudev support: ${use_libudev}
libusb support: ${use_libusb}
USB drop directory: ${usbdropdir}
ATR parsing messages: ${debugatr}
ipcdir: ${ipcdir}
use serial: ${use_serial}
use usb: ${use_usb}
use libsystemd: ${use_libsystemd}
systemd unit directory: ${with_systemdsystemunitdir}
serial config dir.: ${confdir_exp}
filter: ${use_filter}
documentation: ${enable_doc}
PCSCLITE_FEATURES: ${PCSCLITE_FEATURES}
EOF
# Write Makefiles
AC_CONFIG_FILES([
Makefile
doc/Makefile
doc/doxygen.conf
doc/pcscd.8
doc/reader.conf.5
doc/example/Makefile
etc/Makefile
src/Makefile
src/libpcsclite.pc
src/pcscd.h
src/PCSC/pcsclite.h
src/spy/Makefile
])
AC_OUTPUT