cd7ee1716b9d62d1cd167c448795a1e7fb2b0342
[openocd.git] / configure.ac
1 AC_PREREQ(2.64)
2 AC_INIT([openocd], [0.10.0-rc1-dev],
3   [OpenOCD Mailing List <openocd-devel@lists.sourceforge.net>])
4 AC_CONFIG_SRCDIR([src/openocd.c])
5
6 m4_include([config_subdir.m4])dnl
7
8 # check for makeinfo before calling AM_INIT_AUTOMAKE
9 AC_CHECK_PROG([MAKEINFO], [makeinfo], [makeinfo])
10 AS_IF([test "x$MAKEINFO" = "x"], [
11   MAKEINFO='echo makeinfo missing; true'
12   AC_MSG_WARN([Info documentation will not be built.])
13 ])
14 AC_SUBST([MAKEINFO])
15
16 AM_INIT_AUTOMAKE([-Wall -Wno-portability dist-bzip2 dist-zip subdir-objects])
17
18 AC_CONFIG_HEADERS([config.h])
19 AH_BOTTOM([
20 #include <helper/system.h>
21 #include <helper/types.h>
22 #include <helper/replacements.h>
23 ])
24
25 AC_LANG_C
26 AC_PROG_CC
27 AC_PROG_CC_C99
28 AM_PROG_CC_C_O
29 AC_PROG_RANLIB
30 PKG_PROG_PKG_CONFIG([0.23])
31
32 dnl disable checks for C++, Fortran and GNU Java Compiler
33 m4_defun([_LT_AC_LANG_CXX_CONFIG], [:])
34 m4_defun([_LT_AC_LANG_F77_CONFIG], [:])
35 m4_defun([_LT_AC_LANG_GCJ_CONFIG], [:])
36 AC_DISABLE_SHARED
37 AC_PROG_LIBTOOL
38 AC_SUBST([LIBTOOL_DEPS])
39
40 dnl configure checks required for Jim files (these are obsolete w/ C99)
41 AC_C_CONST
42 AC_TYPE_LONG_LONG_INT
43
44 AC_SEARCH_LIBS([ioperm], [ioperm])
45 AC_SEARCH_LIBS([dlopen], [dl])
46
47 AC_CHECK_HEADERS([sys/socket.h])
48 AC_CHECK_HEADERS([elf.h])
49 AC_CHECK_HEADERS([dirent.h])
50 AC_CHECK_HEADERS([fcntl.h])
51 AC_CHECK_HEADERS([malloc.h])
52 AC_CHECK_HEADERS([netdb.h])
53 AC_CHECK_HEADERS([poll.h])
54 AC_CHECK_HEADERS([pthread.h])
55 AC_CHECK_HEADERS([strings.h])
56 AC_CHECK_HEADERS([sys/ioctl.h])
57 AC_CHECK_HEADERS([sys/param.h])
58 AC_CHECK_HEADERS([sys/select.h])
59 AC_CHECK_HEADERS([sys/stat.h])
60 AC_CHECK_HEADERS([sys/sysctl.h])
61 AC_CHECK_HEADERS([sys/time.h])
62 AC_CHECK_HEADERS([sys/types.h])
63 AC_CHECK_HEADERS([unistd.h])
64 AC_CHECK_HEADERS([arpa/inet.h ifaddrs.h netinet/in.h netinet/tcp.h net/if.h], [], [], [dnl
65 #include <stdio.h>
66 #ifdef STDC_HEADERS
67 # include <stdlib.h>
68 # include <stddef.h>
69 #else
70 # ifdef HAVE_STDLIB_H
71 #  include <stdlib.h>
72 # endif
73 #endif
74 #ifdef HAVE_SYS_SOCKET_H
75 # include <sys/socket.h>
76 #endif
77 ])
78
79 AC_HEADER_ASSERT
80 AC_HEADER_STDBOOL
81 AC_HEADER_TIME
82
83 AC_C_BIGENDIAN
84
85 AC_CHECK_FUNCS([strndup])
86 AC_CHECK_FUNCS([strnlen])
87 AC_CHECK_FUNCS([gettimeofday])
88 AC_CHECK_FUNCS([usleep])
89 AC_CHECK_FUNCS([vasprintf])
90 AC_CHECK_FUNCS([realpath])
91
92 # guess-rev.sh only exists in the repository, not in the released archives
93 AC_MSG_CHECKING([whether to build a release])
94 AS_IF([test -x "$srcdir/guess-rev.sh"], [
95   build_release=no
96 ], [
97   build_release=yes
98 ])
99 AC_MSG_RESULT([$build_release])
100
101 # Adapter drivers
102 # 1st column -- configure option
103 # 2nd column -- description
104 # 3rd column -- symbol used for both config.h and automake
105 m4_define([ADAPTER_ARG], [m4_argn([1], $1)])
106 m4_define([ADAPTER_DESC], [m4_argn([2], $1)])
107 m4_define([ADAPTER_SYM], [m4_argn([3], $1)])
108 m4_define([ADAPTER_VAR], [enable_[]ADAPTER_ARG($1)])
109 m4_define([ADAPTER_OPT], [m4_translit(ADAPTER_ARG($1), [_], [-])])
110
111 m4_define([USB1_ADAPTERS],
112         [[[ftdi], [MPSSE mode of FTDI based devices], [FTDI]],
113         [[stlink], [ST-Link JTAG Programmer], [HLADAPTER_STLINK]],
114         [[ti_icdi], [TI ICDI JTAG Programmer], [HLADAPTER_ICDI]],
115         [[ulink], [Keil ULINK JTAG Programmer], [ULINK]],
116         [[usb_blaster_2], [Altera USB-Blaster II Compatible], [USB_BLASTER_2]],
117         [[vsllink], [Versaloon-Link JTAG Programmer], [VSLLINK]]])
118
119 m4_define([USB_ADAPTERS],
120         [[[osbdm], [OSBDM (JTAG only) Programmer], [OSBDM]],
121         [[opendous], [eStick/opendous JTAG Programmer], [OPENDOUS]],
122         [[aice], [Andes JTAG Programmer], [AICE]]])
123
124 m4_define([USB0_ADAPTERS],
125         [[[usbprog], [USBProg JTAG Programmer], [USBPROG]],
126         [[rlink], [Raisonance RLink JTAG Programmer], [RLINK]],
127         [[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]]])
128
129 m4_define([HIDAPI_ADAPTERS],
130         [[[cmsis_dap], [CMSIS-DAP Compliant Debugger], [CMSIS_DAP]]])
131
132 m4_define([LIBFTDI_ADAPTERS],
133         [[[usb_blaster], [Altera USB-Blaster Compatible], [USB_BLASTER]],
134         [[presto], [ASIX Presto Adapter], [PRESTO]],
135         [[openjtag], [OpenJTAG Adapter], [OPENJTAG]]])
136
137 m4_define([LIBJAYLINK_ADAPTERS],
138         [[[jlink], [SEGGER J-Link Programmer], [JLINK]]])
139
140
141 AC_ARG_ENABLE([doxygen-html],
142   AS_HELP_STRING([--disable-doxygen-html],
143     [Disable building Doxygen manual as HTML.]),
144   [doxygen_as_html=$enableval], [doxygen_as_html=yes])
145 AC_SUBST([doxygen_as_html])
146 AC_MSG_CHECKING([whether to build Doxygen as HTML])
147 AC_MSG_RESULT([$doxygen_as_html])
148
149 AC_ARG_ENABLE([doxygen-pdf],
150   AS_HELP_STRING([--enable-doxygen-pdf],
151     [Enable building Doxygen manual as PDF.]),
152   [doxygen_as_pdf=$enableval], [doxygen_as_pdf=no])
153 AC_SUBST([doxygen_as_pdf])
154 AC_MSG_CHECKING([whether to build Doxygen as PDF])
155 AC_MSG_RESULT([$doxygen_as_pdf])
156
157 AC_ARG_ENABLE([gccwarnings],
158   AS_HELP_STRING([--disable-gccwarnings], [Disable compiler warnings]),
159   [gcc_warnings=$enableval], [gcc_warnings=yes])
160
161 AC_ARG_ENABLE([wextra],
162   AS_HELP_STRING([--disable-wextra], [Disable extra compiler warnings]),
163   [gcc_wextra=$enableval], [gcc_wextra=$gcc_warnings])
164
165 AC_ARG_ENABLE([werror],
166   AS_HELP_STRING([--disable-werror], [Do not treat warnings as errors]),
167   [gcc_werror=$enableval], [gcc_werror=$gcc_warnings])
168
169 # set default verbose options, overridden by following options
170 debug_jtag_io=no
171 debug_usb_io=no
172 debug_usb_comms=no
173
174 AC_ARG_ENABLE([verbose],
175   AS_HELP_STRING([--enable-verbose],
176       [Enable verbose JTAG I/O messages (for debugging).]),
177   [
178   debug_jtag_io=$enableval
179   debug_usb_io=$enableval
180   debug_usb_comms=$enableval
181   ], [])
182
183 AC_ARG_ENABLE([verbose_jtag_io],
184   AS_HELP_STRING([--enable-verbose-jtag-io],
185       [Enable verbose JTAG I/O messages (for debugging).]),
186   [debug_jtag_io=$enableval], [])
187
188 AC_ARG_ENABLE([verbose_usb_io],
189   AS_HELP_STRING([--enable-verbose-usb-io],
190       [Enable verbose USB I/O messages (for debugging)]),
191   [debug_usb_io=$enableval], [])
192
193 AC_ARG_ENABLE([verbose_usb_comms],
194   AS_HELP_STRING([--enable-verbose-usb-comms],
195       [Enable verbose USB communication messages (for debugging)]),
196   [debug_usb_comms=$enableval], [])
197
198 AC_MSG_CHECKING([whether to enable verbose JTAG I/O messages]);
199 AC_MSG_RESULT([$debug_jtag_io])
200 AS_IF([test "x$debug_jtag_io" = "xyes"], [
201   AC_DEFINE([_DEBUG_JTAG_IO_],[1], [Print verbose JTAG I/O messages])
202 ])
203
204 AC_MSG_CHECKING([whether to enable verbose USB I/O messages]);
205 AC_MSG_RESULT([$debug_usb_io])
206 AS_IF([test "x$debug_usb_io" = "xyes"], [
207   AC_DEFINE([_DEBUG_USB_IO_],[1], [Print verbose USB I/O messages])
208 ])
209
210 AC_MSG_CHECKING([whether to enable verbose USB communication messages]);
211 AC_MSG_RESULT([$debug_usb_comms])
212 AS_IF([test "x$debug_usb_comms" = "xyes"], [
213   AC_DEFINE([_DEBUG_USB_COMMS_],[1], [Print verbose USB communication messages])
214 ])
215
216 debug_malloc=no
217 AC_ARG_ENABLE([malloc_logging],
218   AS_HELP_STRING([--enable-malloc-logging],
219       [Include free space in logging messages (requires malloc.h).]),
220   [debug_malloc=$enableval], [])
221
222 AC_MSG_CHECKING([whether to enable malloc free space logging]);
223 AC_MSG_RESULT([$debug_malloc])
224 AS_IF([test "x$debug_malloc" = "xyes"], [
225   AC_DEFINE([_DEBUG_FREE_SPACE_],[1], [Include malloc free space in logging])
226 ])
227
228 AC_ARG_ENABLE([dummy],
229   AS_HELP_STRING([--enable-dummy], [Enable building the dummy port driver]),
230   [build_dummy=$enableval], [build_dummy=no])
231
232 m4_define([AC_ARG_ADAPTERS], [
233   m4_foreach([adapter], [$1],
234         [AC_ARG_ENABLE(ADAPTER_OPT([adapter]),
235                 AS_HELP_STRING([--enable-ADAPTER_OPT([adapter])],
236                         [Enable building support for the ]ADAPTER_DESC([adapter])[ (default is $2)]),
237                 [], [ADAPTER_VAR([adapter])=$2])
238   ])
239 ])
240
241 AC_ARG_ADAPTERS([
242   USB1_ADAPTERS,
243   USB_ADAPTERS,
244   USB0_ADAPTERS,
245   HIDAPI_ADAPTERS,
246   LIBFTDI_ADAPTERS,
247   LIBJAYLINK_ADAPTERS
248   ],[auto])
249
250 AC_ARG_ENABLE([parport],
251   AS_HELP_STRING([--enable-parport], [Enable building the pc parallel port driver]),
252   [build_parport=$enableval], [build_parport=no])
253
254 AC_ARG_ENABLE([parport_ppdev],
255   AS_HELP_STRING([--disable-parport-ppdev],
256       [Disable use of ppdev (/dev/parportN) for parport (for x86 only)]),
257     [parport_use_ppdev=$enableval], [parport_use_ppdev=yes])
258
259 AC_ARG_ENABLE([parport_giveio],
260     AS_HELP_STRING([--enable-parport-giveio],
261       [Enable use of giveio for parport (for CygWin only)]),
262     [parport_use_giveio=$enableval], [parport_use_giveio=])
263
264 AC_ARG_ENABLE([jtag_vpi],
265   AS_HELP_STRING([--enable-jtag_vpi], [Enable building support for JTAG VPI]),
266   [build_jtag_vpi=$enableval], [build_jtag_vpi=no])
267
268 AC_ARG_ENABLE([amtjtagaccel],
269   AS_HELP_STRING([--enable-amtjtagaccel], [Enable building the Amontec JTAG-Accelerator driver]),
270   [build_amtjtagaccel=$enableval], [build_amtjtagaccel=no])
271
272 AC_ARG_ENABLE([zy1000_master],
273   AS_HELP_STRING([--enable-zy1000-master], [Use ZY1000 JTAG master registers]),
274   [build_zy1000_master=$enableval], [build_zy1000_master=no])
275
276 AC_ARG_ENABLE([zy1000],
277   AS_HELP_STRING([--enable-zy1000], [Enable ZY1000 interface]),
278   [build_zy1000=$enableval], [build_zy1000=no])
279
280 AC_ARG_ENABLE([ioutil],
281   AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]),
282   [build_ioutil=$enableval], [build_ioutil=no])
283
284 AS_CASE(["${host_cpu}"],
285   [arm*], [
286     AC_ARG_ENABLE([ep93xx],
287       AS_HELP_STRING([--enable-ep93xx], [Enable building support for EP93xx based SBCs]),
288       [build_ep93xx=$enableval], [build_ep93xx=no])
289
290     AC_ARG_ENABLE([at91rm9200],
291       AS_HELP_STRING([--enable-at91rm9200], [Enable building support for AT91RM9200 based SBCs]),
292       [build_at91rm9200=$enableval], [build_at91rm9200=no])
293
294     AC_ARG_ENABLE([bcm2835gpio],
295       AS_HELP_STRING([--enable-bcm2835gpio], [Enable building support for bitbanging on BCM2835 (as found in Raspberry Pi)]),
296       [build_bcm2835gpio=$enableval], [build_bcm2835gpio=no])
297   ],
298   [
299     build_ep93xx=no
300     build_at91rm9200=no
301     build_bcm2835gpio=no
302 ])
303
304 AC_ARG_ENABLE([gw16012],
305   AS_HELP_STRING([--enable-gw16012], [Enable building support for the Gateworks GW16012 JTAG Programmer]),
306   [build_gw16012=$enableval], [build_gw16012=no])
307
308 AC_ARG_ENABLE([oocd_trace],
309   AS_HELP_STRING([--enable-oocd_trace],
310   [Enable building support for some prototype OpenOCD+trace ETM capture hardware]),
311   [build_oocd_trace=$enableval], [build_oocd_trace=no])
312
313 AC_ARG_ENABLE([buspirate],
314   AS_HELP_STRING([--enable-buspirate], [Enable building support for the Buspirate]),
315   [build_buspirate=$enableval], [build_buspirate=no])
316
317 AC_ARG_ENABLE([sysfsgpio],
318   AS_HELP_STRING([--enable-sysfsgpio], [Enable building support for programming driven via sysfs gpios.]),
319   [build_sysfsgpio=$enableval], [build_sysfsgpio=no])
320
321 AS_CASE([$host_os],
322   [linux*], [],
323   [
324     AS_IF([test "x$build_sysfsgpio" = "xyes"], [
325       AC_MSG_ERROR([sysfsgpio is only available on linux])
326     ])
327 ])
328
329 AC_ARG_ENABLE([minidriver_dummy],
330   AS_HELP_STRING([--enable-minidriver-dummy], [Enable the dummy minidriver.]),
331   [build_minidriver_dummy=$enableval], [build_minidriver_dummy=no])
332
333 AC_ARG_ENABLE([internal-jimtcl],
334   AS_HELP_STRING([--disable-internal-jimtcl], [Disable building internal jimtcl]),
335   [use_internal_jimtcl=$enableval], [use_internal_jimtcl=yes])
336
337 AC_ARG_ENABLE([internal-libjaylink],
338   AS_HELP_STRING([--disable-internal-libjaylink],
339   [Disable building internal libjaylink]),
340   [use_internal_libjaylink=$enableval], [use_internal_libjaylink=yes])
341
342 build_minidriver=no
343 AC_MSG_CHECKING([whether to enable ZY1000 minidriver])
344 AS_IF([test "x$build_zy1000" = "xyes"], [
345   AS_IF([test "x$build_minidriver" = "xyes"], [
346     AC_MSG_ERROR([Multiple minidriver options have been enabled.])
347   ])
348   AC_DEFINE([HAVE_JTAG_MINIDRIVER_H], [1],
349       [Define to 1 if you have the <jtag_minidriver.h> header file.])
350   build_minidriver=yes
351 ])
352 AC_MSG_RESULT([$build_zy1000])
353
354 AC_ARG_ENABLE([remote-bitbang],
355   AS_HELP_STRING([--enable-remote-bitbang], [Enable building support for the Remote Bitbang jtag driver]),
356   [build_remote_bitbang=$enableval], [build_remote_bitbang=no])
357
358 AC_MSG_CHECKING([whether to enable dummy minidriver])
359 AS_IF([test "x$build_minidriver_dummy" = "xyes"], [
360   AS_IF([test "x$build_minidriver" = "xyes"], [
361     AC_MSG_ERROR([Multiple minidriver options have been enabled.])
362   ])
363   build_minidriver=yes
364   AC_DEFINE([BUILD_MINIDRIVER_DUMMY], [1], [Use the dummy minidriver.])
365   AC_DEFINE([HAVE_JTAG_MINIDRIVER_H], [1],
366       [Define to 1 if you have the <jtag_minidriver.h> header file.])
367 ])
368 AC_MSG_RESULT([$build_minidriver_dummy])
369
370 AC_MSG_CHECKING([whether standard drivers can be built])
371 AS_IF([test "x$build_minidriver" = "xyes"], [
372   AC_MSG_RESULT([no])
373   AC_MSG_WARN([Using the minidriver disables all other drivers.])
374   sleep 2
375 ], [
376   AC_MSG_RESULT([yes])
377 ])
378
379 AS_CASE(["${host_cpu}"],
380   [i?86|x86*], [],
381   [
382     AS_IF([test "x$parport_use_ppdev" = "xno"], [
383       AC_MSG_WARN([--disable-parport-ppdev is not supported by the host CPU])
384     ])
385     parport_use_ppdev=yes
386 ])
387
388 AS_CASE([$host],
389   [*-cygwin*], [
390     is_win32=yes
391     parport_use_ppdev=no
392
393     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[return __MINGW32__;]])],
394       [is_mingw=yes],[is_mingw=no])
395     AS_IF([test "x$is_mingw" = "xyes"], [
396       AS_IF([test "x$parport_use_giveio" = "xno"], [
397         AC_MSG_WARN([--disable-parport-giveio is not supported by MinGW32 hosts])
398       ])
399       parport_use_giveio=yes
400       is_cygwin=no
401     ], [
402       is_cygwin=yes
403       # sys/io.h needed under cygwin for parport access
404       AS_IF([test "x$build_parport" = "xyes"], [
405         AC_CHECK_HEADERS([sys/io.h],[],AC_MSG_ERROR([Please install the cygwin ioperm package]))
406       ])
407     ])
408   ],
409   [*-mingw* | *-msys*], [
410     is_mingw=yes
411     is_win32=yes
412     parport_use_ppdev=no
413
414     AS_IF([test "x$parport_use_giveio" = "xno"], [
415       AC_MSG_WARN([--disable-parport-giveio is not supported by MinGW32 hosts])
416     ])
417     parport_use_giveio=yes
418
419     AS_IF([test "x$build_buspirate" = "xyes"], [
420       AC_MSG_ERROR([buspirate currently not supported by MinGW32 hosts])
421     ])
422
423     AC_SUBST([HOST_CPPFLAGS], [-D__USE_MINGW_ANSI_STDIO])
424   ],
425   [*darwin*], [
426     is_darwin=yes
427
428     AS_IF([test "x$parport_use_giveio" = "xyes"], [
429       AC_MSG_WARN([--enable-parport-giveio cannot be used by Darwin hosts])
430     ])
431     parport_use_giveio=no
432   ],
433   [
434     AS_IF([test "x$parport_use_giveio" = "xyes"], [
435       AC_MSG_WARN([--enable-parport-giveio cannot be used by ]$host[ hosts])
436     ])
437     parport_use_giveio=no
438 ])
439
440 AS_IF([test "x$is_cygwin" = "xyes"], [
441     AC_DEFINE([IS_CYGWIN], [1], [1 if building for Cygwin.])
442 ], [
443     AC_DEFINE([IS_CYGWIN], [0], [0 if not building for Cygwin.])
444 ])
445
446 AS_IF([test "x$is_mingw" = "xyes"], [
447     AC_DEFINE([IS_MINGW], [1], [1 if building for Mingw.])
448 ], [
449     AC_DEFINE([IS_MINGW], [0], [0 if not building for Mingw.])
450 ])
451
452 AS_IF([test "x$is_win32" = "xyes"], [
453     AC_DEFINE([IS_WIN32], [1], [1 if building for Win32.])
454 ], [
455     AC_DEFINE([IS_WIN32], [0], [0 if not building for Win32.])
456 ])
457
458 AS_IF([test "x$is_darwin" = "xyes"], [
459     AC_DEFINE([IS_DARWIN], [1], [1 if building for Darwin.])
460 ], [
461     AC_DEFINE([IS_DARWIN], [0], [0 if not building for Darwin.])
462 ])
463
464 AS_IF([test "x$build_parport" = "xyes"], [
465   build_bitbang=yes
466   AC_DEFINE([BUILD_PARPORT], [1], [1 if you want parport.])
467 ], [
468   AC_DEFINE([BUILD_PARPORT], [0], [0 if you don't want parport.])
469 ])
470
471 AS_IF([test "x$build_dummy" = "xyes"], [
472   build_bitbang=yes
473   AC_DEFINE([BUILD_DUMMY], [1], [1 if you want dummy driver.])
474 ], [
475   AC_DEFINE([BUILD_DUMMY], [0], [0 if you don't want dummy driver.])
476 ])
477
478 AS_IF([test "x$build_ep93xx" = "xyes"], [
479   build_bitbang=yes
480   AC_DEFINE([BUILD_EP93XX], [1], [1 if you want ep93xx.])
481 ], [
482   AC_DEFINE([BUILD_EP93XX], [0], [0 if you don't want ep93xx.])
483 ])
484
485 AS_IF([test "x$build_zy1000" = "xyes"], [
486   AC_DEFINE([BUILD_ZY1000], [1], [1 if you want ZY1000.])
487 ], [
488   AC_DEFINE([BUILD_ZY1000], [0], [0 if you don't want ZY1000.])
489 ])
490
491 AS_IF([test "x$build_zy1000_master" = "xyes"], [
492   AC_DEFINE([BUILD_ZY1000_MASTER], [1], [1 if you want ZY1000 JTAG master registers.])
493 ], [
494   AC_DEFINE([BUILD_ZY1000_MASTER], [0], [0 if you don't want ZY1000 JTAG master registers.])
495 ])
496
497 AS_IF([test "x$build_at91rm9200" = "xyes"], [
498   build_bitbang=yes
499   AC_DEFINE([BUILD_AT91RM9200], [1], [1 if you want at91rm9200.])
500 ], [
501   AC_DEFINE([BUILD_AT91RM9200], [0], [0 if you don't want at91rm9200.])
502 ])
503
504 AS_IF([test "x$build_bcm2835gpio" = "xyes"], [
505   build_bitbang=yes
506   AC_DEFINE([BUILD_BCM2835GPIO], [1], [1 if you want bcm2835gpio.])
507 ], [
508   AC_DEFINE([BUILD_BCM2835GPIO], [0], [0 if you don't want bcm2835gpio.])
509 ])
510
511 AS_IF([test "x$parport_use_ppdev" = "xyes"], [
512   AC_DEFINE([PARPORT_USE_PPDEV], [1], [1 if you want parport to use ppdev.])
513 ], [
514   AC_DEFINE([PARPORT_USE_PPDEV], [0], [0 if you don't want parport to use ppdev.])
515 ])
516
517 AS_IF([test "x$parport_use_giveio" = "xyes"], [
518   AC_DEFINE([PARPORT_USE_GIVEIO], [1], [1 if you want parport to use giveio.])
519 ], [
520   AC_DEFINE([PARPORT_USE_GIVEIO], [0], [0 if you don't want parport to use giveio.])
521 ])
522
523 AS_IF([test "x$build_jtag_vpi" = "xyes"], [
524   AC_DEFINE([BUILD_JTAG_VPI], [1], [1 if you want JTAG VPI.])
525 ], [
526   AC_DEFINE([BUILD_JTAG_VPI], [0], [0 if you don't want JTAG VPI.])
527 ])
528
529 AS_IF([test "x$build_amtjtagaccel" = "xyes"], [
530   AC_DEFINE([BUILD_AMTJTAGACCEL], [1], [1 if you want the Amontec JTAG-Accelerator driver.])
531 ], [
532   AC_DEFINE([BUILD_AMTJTAGACCEL], [0], [0 if you don't want the Amontec JTAG-Accelerator driver.])
533 ])
534
535 AS_IF([test "x$build_gw16012" = "xyes"], [
536   AC_DEFINE([BUILD_GW16012], [1], [1 if you want the Gateworks GW16012 driver.])
537 ], [
538   AC_DEFINE([BUILD_GW16012], [0], [0 if you don't want the Gateworks GW16012 driver.])
539 ])
540
541 AS_IF([test "x$build_oocd_trace" = "xyes"], [
542   AC_DEFINE([BUILD_OOCD_TRACE], [1], [1 if you want the OpenOCD+trace ETM capture driver.])
543 ], [
544   AC_DEFINE([BUILD_OOCD_TRACE], [0], [0 if you don't want the OpenOCD+trace ETM capture driver.])
545 ])
546
547 AS_IF([test "x$build_buspirate" = "xyes"], [
548   AC_DEFINE([BUILD_BUSPIRATE], [1], [1 if you want the Buspirate JTAG driver.])
549 ], [
550   AC_DEFINE([BUILD_BUSPIRATE], [0], [0 if you don't want the Buspirate JTAG driver.])
551 ])
552
553 AS_IF([test "x$use_internal_jimtcl" = "xyes"], [
554   AS_IF([test -f "$srcdir/jimtcl/configure.ac"], [
555     AX_CONFIG_SUBDIR_OPTION([jimtcl], [--disable-install-jim --with-ext="eventloop array clock regexp stdlib tclcompat" --without-ext="default"])
556   ], [
557     AC_MSG_ERROR([jimtcl not found, run git submodule init and git submodule update.])
558   ])
559 ])
560
561 AS_IF([test "x$build_remote_bitbang" = "xyes"], [
562   build_bitbang=yes
563   AC_DEFINE([BUILD_REMOTE_BITBANG], [1], [1 if you want the Remote Bitbang JTAG driver.])
564 ], [
565   AC_DEFINE([BUILD_REMOTE_BITBANG], [0], [0 if you don't want the Remote Bitbang JTAG driver.])
566 ])
567
568 AS_IF([test "x$build_sysfsgpio" = "xyes"], [
569   build_bitbang=yes
570   AC_DEFINE([BUILD_SYSFSGPIO], [1], [1 if you want the SysfsGPIO driver.])
571 ], [
572   AC_DEFINE([BUILD_SYSFSGPIO], [0], [0 if you don't want SysfsGPIO driver.])
573 ])
574
575 PKG_CHECK_MODULES([LIBUSB1], [libusb-1.0], [
576         use_libusb1=yes
577         AC_DEFINE([HAVE_LIBUSB1], [1], [Define if you have libusb-1.x])
578         PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.9],
579                 [AC_DEFINE([HAVE_LIBUSB_ERROR_NAME], [1], [Define if your libusb has libusb_error_name()])],
580                 [AC_MSG_WARN([libusb-1.x older than 1.0.9 detected, consider updating])])
581         LIBUSB1_CFLAGS=`echo $LIBUSB1_CFLAGS | sed 's/-I/-isystem /'`
582         AC_MSG_NOTICE([libusb-1.0 header bug workaround: LIBUSB1_CFLAGS changed to "$LIBUSB1_CFLAGS"])
583         PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.16],
584                 [AC_DEFINE([HAVE_LIBUSB_GET_PORT_NUMBERS], [1], [Define if your libusb has libusb_get_port_numbers()])])
585   ], [
586         use_libusb1=no
587         AC_MSG_WARN([libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x instead])
588 ])
589
590 PKG_CHECK_MODULES([LIBUSB0], [libusb], [use_libusb0=yes], [use_libusb0=no])
591
592 for hidapi_lib in hidapi hidapi-hidraw hidapi-libusb; do
593         PKG_CHECK_MODULES([HIDAPI],[$hidapi_lib],[
594                 use_hidapi=yes
595                 break
596         ],[
597                 use_hidapi=no
598         ])
599 done
600
601 PKG_CHECK_MODULES([LIBFTDI], [libftdi1], [use_libftdi=yes], [
602         PKG_CHECK_MODULES([LIBFTDI], [libftdi], [use_libftdi=yes], [use_libftdi=no])
603 ])
604
605 PKG_CHECK_MODULES([LIBJAYLINK], [libjaylink >= 0.1],
606         [use_libjaylink=yes], [use_libjaylink=no])
607
608 m4_define([PROCESS_ADAPTERS], [
609   m4_foreach([adapter], [$1], [
610         AS_IF([test $2], [
611                 AS_IF([test "x$ADAPTER_VAR([adapter])" != "xno"], [
612                         AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [1], [1 if you want the ]ADAPTER_DESC([adapter]).)
613                 ], [
614                         AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [0], [0 if you do not want the ]ADAPTER_DESC([adapter]).)
615                 ])
616         ], [
617                 AS_IF([test "x$ADAPTER_VAR([adapter])" = "xyes"], [
618                         AC_MSG_ERROR([$3 is required for the ADAPTER_DESC([adapter])])
619                 ])
620                 ADAPTER_VAR([adapter])=no
621         ])
622         AM_CONDITIONAL(ADAPTER_SYM([adapter]), [test "x$ADAPTER_VAR([adapter])" != "xno"])
623   ])
624 ])
625
626 PROCESS_ADAPTERS([USB1_ADAPTERS], ["x$use_libusb1" = "xyes"], [libusb-1.x])
627 PROCESS_ADAPTERS([USB_ADAPTERS], ["x$use_libusb1" = "xyes" -o "x$use_libusb0" = "xyes"], [libusb-1.x or libusb-0.1])
628 PROCESS_ADAPTERS([USB0_ADAPTERS], ["x$use_libusb0" = "xyes"], [libusb-0.1])
629 PROCESS_ADAPTERS([HIDAPI_ADAPTERS], ["x$use_hidapi" = "xyes"], [hidapi])
630 PROCESS_ADAPTERS([LIBFTDI_ADAPTERS], ["x$use_libftdi" = "xyes"], [libftdi])
631 PROCESS_ADAPTERS([LIBJAYLINK_ADAPTERS], ["x$use_libusb1" = "xyes" -a "x$use_internal_libjaylink" = "xyes" -o "x$use_libjaylink" = "xyes"], [libusb-1.x or libjaylink-0.1])
632
633 AS_IF([test "x$build_openjtag" = "xyes"], [
634   AS_IF([test "x$use_libusb1" != "xyes" -a "x$use_libusb0" != "xyes"], [
635     AC_MSG_ERROR([libusb-1.x or libusb-0.1 is required for the OpenJTAG Programmer])
636     build_openjtag=no
637   ])
638 ])
639
640 AS_IF([test "x$enable_stlink" != "xno" -o "x$enable_ti_icdi" != "xno"], [
641         AC_DEFINE([BUILD_HLADAPTER], [1], [1 if you want the High Level JTAG driver.])
642 ], [
643         AC_DEFINE([BUILD_HLADAPTER], [0], [0 if you want the High Level JTAG driver.])
644 ])
645 AM_CONDITIONAL([HLADAPTER], [test "x$enable_stlink" != "xno" -o "x$enable_ti_icdi" != "xno"])
646
647 AS_IF([test "x$enable_jlink" != "xno"], [
648   AS_IF([test "x$use_internal_libjaylink" = "xyes"], [
649     AS_IF([test -f "$srcdir/src/jtag/drivers/libjaylink/configure.ac"], [
650       AX_CONFIG_SUBDIR_OPTION([src/jtag/drivers/libjaylink],
651                 [--enable-subproject-build])
652     ], [
653       AC_MSG_ERROR([Internal libjaylink not found, run either 'git submodule init' and 'git submodule update' or disable internal libjaylink with --disable-internal-libjaylink.])
654     ])
655   ])
656 ])
657
658 # Presto needs the bitq module
659 AS_IF([test "x$enable_presto" != "xno"], [
660   build_bitq=yes
661 ])
662
663 AM_CONDITIONAL([RELEASE], [test "x$build_release" = "xyes"])
664 AM_CONDITIONAL([PARPORT], [test "x$build_parport" = "xyes"])
665 AM_CONDITIONAL([DUMMY], [test "x$build_dummy" = "xyes"])
666 AM_CONDITIONAL([GIVEIO], [test "x$parport_use_giveio" = "xyes"])
667 AM_CONDITIONAL([EP93XX], [test "x$build_ep93xx" = "xyes"])
668 AM_CONDITIONAL([ZY1000], [test "x$build_zy1000" = "xyes"])
669 AM_CONDITIONAL([ZY1000_MASTER], [test "x$build_zy1000_master" = "xyes"])
670 AM_CONDITIONAL([IOUTIL], [test "x$build_ioutil" = "xyes"])
671 AM_CONDITIONAL([AT91RM9200], [test "x$build_at91rm9200" = "xyes"])
672 AM_CONDITIONAL([BCM2835GPIO], [test "x$build_bcm2835gpio" = "xyes"])
673 AM_CONDITIONAL([BITBANG], [test "x$build_bitbang" = "xyes"])
674 AM_CONDITIONAL([JTAG_VPI], [test "x$build_jtag_vpi" = "xyes" -o "x$build_jtag_vpi" = "xyes"])
675 AM_CONDITIONAL([USB_BLASTER_DRIVER], [test "x$enable_usb_blaster" != "xno" -o "x$enable_usb_blaster_2" != "xno"])
676 AM_CONDITIONAL([AMTJTAGACCEL], [test "x$build_amtjtagaccel" = "xyes"])
677 AM_CONDITIONAL([GW16012], [test "x$build_gw16012" = "xyes"])
678 AM_CONDITIONAL([OOCD_TRACE], [test "x$build_oocd_trace" = "xyes"])
679 AM_CONDITIONAL([REMOTE_BITBANG], [test "x$build_remote_bitbang" = "xyes"])
680 AM_CONDITIONAL([BUSPIRATE], [test "x$build_buspirate" = "xyes"])
681 AM_CONDITIONAL([SYSFSGPIO], [test "x$build_sysfsgpio" = "xyes"])
682 AM_CONDITIONAL([USE_LIBUSB0], [test "x$use_libusb0" = "xyes"])
683 AM_CONDITIONAL([USE_LIBUSB1], [test "x$use_libusb1" = "xyes"])
684 AM_CONDITIONAL([IS_CYGWIN], [test "x$is_cygwin" = "xyes"])
685 AM_CONDITIONAL([IS_MINGW], [test "x$is_mingw" = "xyes"])
686 AM_CONDITIONAL([IS_WIN32], [test "x$is_win32" = "xyes"])
687 AM_CONDITIONAL([IS_DARWIN], [test "x$is_darwin" = "xyes"])
688 AM_CONDITIONAL([BITQ], [test "x$build_bitq" = "xyes"])
689 AM_CONDITIONAL([USE_LIBFTDI], [test "x$use_libftdi" = "xyes"])
690 AM_CONDITIONAL([USE_HIDAPI], [test "x$use_hidapi" = "xyes"])
691 AM_CONDITIONAL([USE_LIBJAYLINK], [test "x$use_libjaylink" = "xyes"])
692
693 AM_CONDITIONAL([MINIDRIVER], [test "x$build_minidriver" = "xyes"])
694 AM_CONDITIONAL([MINIDRIVER_DUMMY], [test "x$build_minidriver_dummy" = "xyes"])
695
696 AM_CONDITIONAL([INTERNAL_JIMTCL], [test "x$use_internal_jimtcl" = "xyes"])
697 AM_CONDITIONAL([INTERNAL_LIBJAYLINK], [test "x$use_internal_libjaylink" = "xyes"])
698
699 # Look for environ alternatives.  Possibility #1: is environ in unistd.h or stdlib.h?
700 AC_MSG_CHECKING([for environ in unistd.h and stdlib.h])
701 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
702 #define _GNU_SOURCE
703 #include <unistd.h>
704 #include <stdlib.h>
705   ]], [[char **ep = environ;]]
706   )], [
707     AC_MSG_RESULT([yes])
708     has_environ=yes
709   ], [
710     AC_MSG_RESULT([no])
711
712     # Possibility #2: can environ be found in an available library?
713     AC_MSG_CHECKING([for extern environ])
714     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
715     extern char **environ;
716     ]], [[char **ep = environ;]]
717       )], [
718         AC_DEFINE(NEED_ENVIRON_EXTERN, [1], [Must declare 'environ' to use it.])
719         has_environ=yes
720       ], [
721         has_environ=no
722       ])
723     AC_MSG_RESULT([${has_environ}])
724   ])
725
726 AS_IF([test "x${has_environ}" != "xyes" ], [
727   AC_MSG_FAILURE([Could not find 'environ' in unistd.h or available libraries.])
728 ])
729
730 AC_DEFINE([_GNU_SOURCE],[1],[Use GNU C library extensions (e.g. stdndup).])
731
732 # set default gcc warnings
733 GCC_WARNINGS="-Wall -Wstrict-prototypes -Wformat-security -Wshadow"
734 AS_IF([test "x${gcc_wextra}" = "xyes"], [
735   GCC_WARNINGS="${GCC_WARNINGS} -Wextra -Wno-unused-parameter"
736   GCC_WARNINGS="${GCC_WARNINGS} -Wbad-function-cast"
737   GCC_WARNINGS="${GCC_WARNINGS} -Wcast-align"
738   GCC_WARNINGS="${GCC_WARNINGS} -Wredundant-decls"
739 ])
740 AS_IF([test "x${gcc_werror}" = "xyes"], [
741   GCC_WARNINGS="${GCC_WARNINGS} -Werror"
742 ])
743
744 # overide default gcc cflags
745 AS_IF([test "x$gcc_warnings" = "xyes"], [
746   AC_SUBST([GCC_WARNINGS], [$GCC_WARNINGS])
747 ])
748
749 AC_CONFIG_FILES([
750   Makefile
751 ])
752 AC_OUTPUT
753
754 echo
755 echo
756 echo OpenOCD configuration summary
757 echo --------------------------------------------------
758 m4_foreach([adapter], [USB1_ADAPTERS, USB_ADAPTERS, USB0_ADAPTERS,
759         HIDAPI_ADAPTERS, LIBFTDI_ADAPTERS, LIBJAYLINK_ADAPTERS],
760         [s=m4_format(["%-40s"], ADAPTER_DESC([adapter]))
761         AS_CASE([$ADAPTER_VAR([adapter])],
762                 [auto], [
763                         echo "$s"yes '(auto)'
764                 ],
765                 [yes], [
766                         echo "$s"yes
767                 ],
768                 [no], [
769                         echo "$s"no
770         ])
771 ])
772 echo
773
774 AS_IF([test "x$build_oocd_trace" = "xyes"], [
775   echo 'WARNING! Deprecated configure option (--enable-oocd_trace)'
776   echo 'The oocd_trace driver is deprecated and will be removed in the next release.'
777   echo 'If you regularly use this driver, please report to the OpenOCD Mailing List.'
778   echo
779 ])
780
781 AS_IF([test "x$build_zy1000" = "xyes" -o "x$build_zy1000_master" = "xyes"], [
782   echo 'WARNING! Deprecated configure option (--enable-zy1000, --enable-zy1000-master)'
783   echo 'Support for the ZY1000 platform is deprecated and will be removed in the next'
784   echo 'release. If you regularly use this platform, please report to the OpenOCD'
785   echo 'Mailing List.'
786   echo
787 ])
788
789 AS_IF([test "x$build_ioutil" = "xyes"], [
790   echo 'WARNING! Deprecated configure option (--enable-ioutil)'
791   echo 'Support for the ioutil functions is deprecated and will be removed in the next'
792   echo 'release. If you regularly depend on this functionality, please report to the'
793   echo 'OpenOCD Mailing List.'
794   echo
795 ])