Initial commit
[platform/upstream/ccid.git] / configure.ac
1 # Process this file with autoconf to produce a configure script.
2 # You may need to use autoconf 2.56 or newer
3
4 # Require autoconf 2.61
5 AC_PREREQ([2.69])
6
7 AC_INIT([ccid],[1.4.33])
8 AC_CONFIG_SRCDIR(src/ifdhandler.c)
9 AC_CONFIG_AUX_DIR([.])
10 AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip subdir-objects foreign)
11 AC_CONFIG_MACRO_DIR([m4])
12
13 # silent build by default
14 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
15
16 # Default install dir
17 AC_PREFIX_DEFAULT(/usr/local)
18
19 # Automake boilerplate.
20 AC_CANONICAL_HOST
21
22 # create a config.h file (Automake will add -DHAVE_CONFIG_H)
23 AC_CONFIG_HEADERS([config.h])
24
25 # Options
26 AM_MAINTAINER_MODE
27
28 # Checks for programs.
29 AC_PROG_CC
30 AM_PROG_CC_C_O
31 AC_PROG_CPP
32 AC_PROG_INSTALL
33 AC_PROG_MAKE_SET
34 AC_PROG_LN_S
35 AM_PROG_LEX
36 AM_PROG_AR
37 PKG_PROG_PKG_CONFIG
38
39 # check pcsc-lite version
40 PCSC_NEEDED_VERSION="1.8.3"
41 PKG_CHECK_EXISTS([libpcsclite],
42         [PKG_CHECK_MODULES(PCSC, libpcsclite >= $PCSC_NEEDED_VERSION, [],
43         [
44         if test -f /usr/local/lib/pkgconfig/libpcsclite.pc -a "x$PKG_CONFIG" != x ; then
45                 AC_MSG_ERROR([use PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure])
46           else
47                 AC_MSG_WARN([install pcsc-lite $PCSC_NEEDED_VERSION or later])
48           fi
49         ])],
50         [AC_MSG_WARN([libpcsclite not found by pkg-config])]
51 )
52
53 saved_CPPFLAGS="$CPPFLAGS"
54 CPPFLAGS="$CPPFLAGS $PCSC_CFLAGS"
55 PCSC_ERROR_MSG="install pcsc-lite $PCSC_NEEDED_VERSION or later, or use ./configure PCSC_CFLAGS=..."
56 AC_CHECK_HEADER(ifdhandler.h,, [AC_MSG_ERROR([$PCSC_ERROR_MSG])])
57 AC_CHECK_HEADER(reader.h,, [AC_MSG_ERROR([$PCSC_ERROR_MSG])])
58 CPPFLAGS="$saved_CPPFLAGS"
59
60 # Add libtool support.
61 # Static lib is disabled by default. Use --enable-static if needed
62 LT_INIT(disable-static)
63 LT_INIT
64
65 # Automatically update the libtool script if it becomes out-of-date.
66 AC_SUBST(LIBTOOL_DEPS)
67
68 # Checks for header files.
69 AC_HEADER_STDC
70 AC_CHECK_HEADERS(errno.h fcntl.h stdlib.h unistd.h termios.h string.h sys/time.h sys/types.h stdarg.h arpa/inet.h stdio.h,,
71         [AC_MSG_ERROR([some header files not found])])
72
73 # Checks for typedefs, structures, and compiler characteristics.
74 AC_C_CONST
75 AC_TYPE_SIZE_T
76 AC_HEADER_TIME
77
78 # Checks for library functions.
79 AC_CHECK_FUNCS(select strerror strncpy memcpy strlcpy strlcat)
80
81 # Select OS specific versions of source files.
82 AC_SUBST(BUNDLE_HOST)
83 AC_SUBST(DYN_LIB_EXT)
84 BUNDLE_HOST=`uname | sed -e s,/,_,`
85 DYN_LIB_EXT="so"
86 case "$BUNDLE_HOST" in
87 Darwin)
88         BUNDLE_HOST=MacOS
89         DYN_LIB_EXT="dylib"
90         ;;
91 SunOS)
92         BUNDLE_HOST=Solaris
93         ;;
94         esac
95
96 # --disable-libusb
97 AC_ARG_ENABLE(libusb,
98         AS_HELP_STRING([--disable-libusb],[do not use libusb]),
99         [ use_libusb="${enableval}" ], [ use_libusb=yes ] )
100
101 # check if libusb is used
102 LIBUSB_NEEDED_VERSION="1.0.9"
103 if test "x$use_libusb" != xno ; then
104         PKG_CHECK_EXISTS([libusb-1.0], [
105         PKG_CHECK_MODULES(LIBUSB, libusb-1.0 >= $LIBUSB_NEEDED_VERSION, [],
106                 [
107                 AC_MSG_WARN([install libusb $LIBUSB_NEEDED_VERSION or later])
108                 PKG_CHECK_MODULES(LIBUSB, libusb-1.0)
109                 ])
110         ])
111
112         saved_CPPFLAGS="$CPPFLAGS"
113         saved_LIBS="$LIBS"
114
115         CPPFLAGS="$CPPFLAGS $LIBUSB_CFLAGS"
116         LIBS="$LDFLAGS $LIBUSB_LIBS"
117
118         AC_CHECK_HEADERS(libusb.h, [],
119                 [ AC_MSG_ERROR([libusb.h not found, install libusb or use ./configure LIBUSB_CFLAGS=...]) ])
120
121         AC_MSG_CHECKING([for libusb_init])
122         AC_TRY_LINK_FUNC(libusb_init, [ AC_MSG_RESULT([yes]) ],
123                 [ AC_MSG_ERROR([libusb not found, use ./configure LIBUSB_LIBS=...]) ])
124
125         CPPFLAGS="$saved_CPPFLAGS"
126         LIBS="$saved_LIBS"
127
128         use_libusb=yes
129 fi
130 AC_SUBST(LIBUSB_CFLAGS)
131 AC_SUBST(LIBUSB_LIBS)
132 AM_CONDITIONAL(WITH_LIBUSB, test "${use_libusb}" != "no")
133
134 # --enable-composite-as-multislot
135 use_composite_as_multislot=no
136 AC_ARG_ENABLE(composite-as-multislot,
137         AS_HELP_STRING([--enable-composite-as-multislot],[composite device are seen as multi-slots]),
138         [ use_composite_as_multislot="${enableval}" ] )
139
140 if test "x$use_composite_as_multislot" = xyes; then
141         AC_DEFINE(USE_COMPOSITE_AS_MULTISLOT, 1, [composite device are seen as multi-slots])
142 fi
143
144 # check if the compiler support -fvisibility=hidden (GCC >= 4)
145 saved_CFLAGS="$CFLAGS"
146 CFLAGS="$CFLAGS -fvisibility=hidden"
147 AC_MSG_CHECKING([for -fvisibility=hidden])
148 AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])],
149     [   AC_MSG_RESULT([yes])
150         SYMBOL_VISIBILITY="-fvisibility=hidden" ],
151     AC_MSG_RESULT([no]))
152 CFLAGS="$saved_CFLAGS"
153 AC_SUBST(SYMBOL_VISIBILITY)
154
155 # --disable-multi-thread
156 AC_ARG_ENABLE(multi-thread,
157         AS_HELP_STRING([--disable-multi-thread],[disable multi threading]),
158         [ multithread="${enableval}" ], [ multithread=yes ] )
159
160 if test "${multithread}" != no ; then
161         AX_PTHREAD(
162                 [ AC_DEFINE(HAVE_PTHREAD, 1,
163                         [Define if you have POSIX threads libraries and header files.])
164                 ], [ AC_MSG_ERROR([POSIX thread support required]) ])
165
166         multithread=yes
167 fi
168
169 # --enable-bundle=NAME
170 AC_ARG_ENABLE(bundle,
171         AS_HELP_STRING([--enable-bundle=NAME],[bundle directory name
172         (default ifd-ccid.bundle)]),
173         [bundle="${enableval}"], [bundle=false])
174 if test "${bundle}" = false ; then
175         bundle="ifd-ccid.bundle"
176 fi
177 AC_DEFINE_UNQUOTED(BUNDLE, "$bundle", [bundle directory name])
178
179 # --enable-usbdropdir=DIR
180 AC_ARG_ENABLE(usbdropdir,
181         AS_HELP_STRING([--enable-usbdropdir=DIR],[directory containing USB
182         drivers (default to pcscd config or $(prefix)/pcsc/drivers)]),
183         [usbdropdir="${enableval}"], [usbdropdir=false])
184 if test "${usbdropdir}" = false ; then
185         usbdropdir=`$PKG_CONFIG libpcsclite --variable=usbdropdir`
186 fi
187 AC_DEFINE_UNQUOTED(PCSCLITE_HP_DROPDIR, "$usbdropdir", [directory containing USB drivers])
188 if test "${usbdropdir}" = "" ; then
189         AC_MSG_ERROR([use --enable-usbdropdir=DIR])
190 fi
191
192 # --enable-twinserial
193 AC_ARG_ENABLE(twinserial,
194         AS_HELP_STRING([--enable-twinserial],[also compile and install the serial Twin driver]),
195         [twinserial="${enableval}"], [twinserial=no])
196 AM_CONDITIONAL(WITH_TWIN_SERIAL, test "${twinserial}" != "no")
197
198 # --enable-ccidtwindir=DIR
199 AC_ARG_ENABLE(ccidtwindir,
200         AS_HELP_STRING([--enable-ccidtwindir=DIR],[directory to install the
201         serial Twin driver (default to pcscd config or $(prefix)/pcsc/drivers/serial)]),
202         [ccidtwindir="${enableval}"], [ccidtwindir=false])
203 if test "${ccidtwindir}" = false ; then
204         ccidtwindir=$usbdropdir/serial
205 fi
206
207 # --enable-serialconfdir=DIR
208 AC_ARG_ENABLE(serialconfdir,
209         AS_HELP_STRING([--enable-serialconfdir=dir],[directory containing
210                 serial drivers (default to pcscd config)]),
211         [serialconfdir="${enableval}"], [serialconfdir=false])
212 if test "${serialconfdir}" = false ; then
213         serialconfdir=`$PKG_CONFIG libpcsclite --variable=serialconfdir`
214 fi
215
216 # --disable-pcsclite
217 AC_ARG_ENABLE(pcsclite,
218         AS_HELP_STRING([--disable-pcsclite],[do not use pcsc-lite debug support]),
219         [ pcsclite="${enableval}" ], [ pcsclite=yes ] )
220
221 if test "${pcsclite}" != no ; then
222         # check that pcsc-lite is installed
223         OLD_LIBS="$LIBS"
224         OLD_CFLAGS="$CFLAGS"
225         LIBS="$LIBS $PCSC_LIBS"
226         CFLAGS="$CFLAGS $PCSC_CFLAGS"
227         AC_MSG_CHECKING([for SCardEstablishContext])
228         AC_TRY_LINK_FUNC(SCardEstablishContext,
229             [ AC_MSG_RESULT([yes]) ],
230                 [ AC_MSG_ERROR([SCardEstablishContext() not found, install pcsc-lite, or use PCSC_LIBS=...  ./configure]) ])
231         LIBS="$OLD_LIBS"
232         CFLAGS="$OLD_CFLAGS"
233
234         pcsclite=yes
235 fi
236 AM_CONDITIONAL(WITHOUT_PCSC, test "${pcsclite}" != "yes")
237
238
239
240 # --enable-syslog
241 AC_ARG_ENABLE(syslog,
242         AS_HELP_STRING([--enable-syslog],[use syslog(3) instead of printf() for debug (Yosemite 10.10)]),
243         [ use_syslog="${enableval}" ], [ use_syslog=no ] )
244
245 if test x$use_syslog = xyes; then
246   AC_DEFINE(USE_SYSLOG, 1, [Use syslog(3) for debug])
247 fi
248
249 # --enable-oslog
250 AC_ARG_ENABLE(oslog,
251         AS_HELP_STRING([--enable-oslog],[use os_log(3) instead of printf() for debug (Sierra 10.12)]),
252         [ use_oslog="${enableval}" ], [ use_oslog=no ] )
253
254 if test x$use_oslog = xyes; then
255   AC_DEFINE(USE_OS_LOG, 1, [Use os_log(3) for debug])
256 fi
257
258
259 # --disable-class
260 AC_ARG_ENABLE(class,
261         AS_HELP_STRING([--disable-class],[remove the CCIDCLASSDRIVER from Info.plist]),
262         [class="${enableval}"], [class=yes])
263 if test "${class}" != yes ; then
264         NOCLASS="--no-class"
265 fi
266 AC_SUBST(NOCLASS)
267
268 # --enable-embedded
269 AC_ARG_ENABLE(embedded,
270   AS_HELP_STRING([--enable-embedded],[limit RAM and CPU ressources by disabling features (log)]),
271   [ use_embedded="${enableval}" ])
272
273 if test x$use_embedded = xyes; then
274   AC_DEFINE(NO_LOG, 1, [Disable logging support])
275 fi
276
277 # --enable-zlp
278 AC_ARG_ENABLE(zlp,
279   AS_HELP_STRING([--enable-zlp],[enable the Zero Length Packet patch for some Gemalto readers]),
280   [ use_zlp="${enableval}" ])
281
282 if test x$use_zlp = xyes; then
283   AC_DEFINE(ENABLE_ZLP, 1, [Enable Zero Length Packet patch])
284 fi
285
286 # Setup dist stuff
287 AC_SUBST(ac_aux_dir)
288 AC_SUBST(bundle)
289 AC_SUBST(usbdropdir)
290 AC_SUBST(ccidtwindir)
291 AC_SUBST(serialconfdir)
292 AS_AC_EXPAND(bindir_exp,$bindir)
293 AS_AC_EXPAND(sysconfdir_exp,$sysconfdir)
294
295 cat << EOF
296
297 libccid has been configured with following options:
298
299 Version:             ${PACKAGE_VERSION}
300 User binaries:       $(eval eval eval echo "${bindir_exp}")
301 Configuration files: $(eval eval eval echo "${sysconfdir_exp}")
302
303
304 Host:                ${host}
305 Compiler:            ${CC}
306 Preprocessor flags:  ${CPPFLAGS}
307 Compiler flags:      ${CFLAGS}
308 Preprocessor flags:  ${CPPFLAGS}
309 Linker flags:        ${LDFLAGS}
310 Libraries:           ${LIBS}
311
312 PCSC_CFLAGS:         ${PCSC_CFLAGS}
313 PCSC_LIBS:           ${PCSC_LIBS}
314 PTHREAD_CFLAGS:      ${PTHREAD_CFLAGS}
315 PTHREAD_LIBS:        ${PTHREAD_LIBS}
316 BUNDLE_HOST:         ${BUNDLE_HOST}
317 DYN_LIB_EXT:         ${DYN_LIB_EXT}
318 LIBUSB_CFLAGS:       ${LIBUSB_CFLAGS}
319 LIBUSB_LIBS:         ${LIBUSB_LIBS}
320 SYMBOL_VISIBILITY:   ${SYMBOL_VISIBILITY}
321 NOCLASS:             ${NOCLASS}
322
323 libusb support:          ${use_libusb}
324 composite as multislot:  ${use_composite_as_multislot}
325 multi threading:         ${multithread}
326 bundle directory name:   ${bundle}
327 USB drop directory:      ${usbdropdir}
328 serial Twin support:     ${twinserial}
329 serial twin install dir: ${ccidtwindir}
330 serial config directory: ${serialconfdir}
331 compiled for pcsc-lite:  ${pcsclite}
332 syslog debug:            ${use_syslog}
333 os_log debug:            ${use_oslog}
334 class driver:            ${class}
335
336 EOF
337
338 # Write Makefiles.
339 AC_CONFIG_FILES(Makefile
340         src/Makefile
341         readers/Makefile
342         contrib/Makefile
343         contrib/Kobil_mIDentity_switch/Makefile
344         contrib/RSA_SecurID/Makefile
345         examples/Makefile)
346
347 AC_OUTPUT
348