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