Audit and eliminate redundant #include directives in core target files.
[fw/openocd] / configure.in
index 458bb0c6ea9e93205c4cf69420a708b4e6022491..9d6c90f64c2f4eac9654dd37500aa0bd32967207 100644 (file)
@@ -1,18 +1,38 @@
-AC_PREREQ(2.59)
-AC_INIT(configure.in)
+AC_PREREQ(2.60)
+AC_INIT([openocd], [0.2.0-in-development],
+       [OpenOCD Mailing List <openocd-development@lists.berlios.de>])
+AC_CONFIG_SRCDIR([src/openocd.c])
 
 AC_CANONICAL_HOST
 
 AC_SEARCH_LIBS([ioperm], [ioperm])
 AC_SEARCH_LIBS([dlopen], [dl])
 
+AC_CHECK_HEADERS(arpa/inet.h)
+AC_CHECK_HEADERS(elf.h)
+AC_CHECK_HEADERS(dirent.h)
+AC_CHECK_HEADERS(fcntl.h)
+AC_CHECK_HEADERS(ifaddrs.h)
 AC_CHECK_HEADERS(jtag_minidriver.h)
+AC_CHECK_HEADERS(malloc.h)
+AC_CHECK_HEADERS(netdb.h)
+AC_CHECK_HEADERS(netinet/in.h)
+AC_CHECK_HEADERS(netinet/tcp.h)
+AC_CHECK_HEADERS(net/if.h)
+AC_CHECK_HEADERS(pthread.h)
+AC_CHECK_HEADERS(strings.h)
+AC_CHECK_HEADERS(sys/ioctl.h)
 AC_CHECK_HEADERS(sys/param.h)
+AC_CHECK_HEADERS(sys/poll.h)
+AC_CHECK_HEADERS(sys/select.h)
+AC_CHECK_HEADERS(sys/socket.h)
+AC_CHECK_HEADERS(sys/stat.h)
 AC_CHECK_HEADERS(sys/time.h)
-AC_CHECK_HEADERS(elf.h)
-AC_CHECK_HEADERS(strings.h)
-AC_CHECK_HEADERS(stdbool.h)
+AC_CHECK_HEADERS(sys/types.h)
+AC_CHECK_HEADERS(unistd.h)
 
+AC_HEADER_ASSERT
+AC_HEADER_STDBOOL
 AC_HEADER_TIME
 
 AC_C_BIGENDIAN
@@ -28,6 +48,7 @@ build_bitq=no
 is_cygwin=no
 is_mingw=no
 is_win32=no
+is_darwin=no
 build_release=yes
 
 AC_ARG_ENABLE(release,
@@ -110,10 +131,11 @@ true
 )
 
 #========================================
-# FTD2XXX support comes in 3 forms.
+# FTD2XXX support comes in 4 forms.
 #    (1) win32 - via a zip file
 #    (2) linux - via a tar file
 #    (3) linux/cygwin/mingw - via libftdi
+#    (4) darwin - installed under /usr/local
 #
 # In case (1) and (2) we need to know where the package was unpacked.
 
@@ -189,6 +211,64 @@ AC_ARG_ENABLE(werror,
        AS_HELP_STRING([--disable-werror], [Do not treat warnings as errors]),
        [gcc_werror=$enableval], [gcc_werror=$gcc_warnings])
 
+# set default verbose options, overridden by following options
+debug_jtag_io=no
+debug_usb_io=no
+debug_usb_comms=no
+
+AC_ARG_ENABLE(verbose,
+       AS_HELP_STRING([--enable-verbose],
+               [Enable verbose JTAG I/O messages (for debugging).]), 
+       [
+       debug_jtag_io=$enableval
+       debug_usb_io=$enableval
+       debug_usb_comms=$enableval
+       ], [])
+
+AC_ARG_ENABLE(verbose_jtag_io,
+       AS_HELP_STRING([--enable-verbose-jtag-io],
+               [Enable verbose JTAG I/O messages (for debugging).]), 
+       [debug_jtag_io=$enableval], [])
+AC_ARG_ENABLE(verbose_usb_io,
+       AS_HELP_STRING([--enable-verbose-usb-io],
+               [Enable verbose USB I/O messages (for debugging)]), 
+       [debug_usb_io=$enableval], [])
+AC_ARG_ENABLE(verbose_usb_comms,
+       AS_HELP_STRING([--enable-verbose-usb-comms],
+               [Enable verbose USB communication messages (for debugging)]), 
+       [debug_usb_comms=$enableval], [])
+
+AC_MSG_CHECKING([whether to enable verbose JTAG I/O messages]);
+AC_MSG_RESULT($debug_jtag_io)
+if test $debug_jtag_io = yes; then
+  AC_DEFINE([_DEBUG_JTAG_IO_],[1], [Print verbose JTAG I/O messages])
+fi
+
+AC_MSG_CHECKING([whether to enable verbose USB I/O messages]);
+AC_MSG_RESULT($debug_usb_io)
+if test $debug_usb_io = yes; then
+  AC_DEFINE([_DEBUG_USB_IO_],[1], [Print verbose USB I/O messages])
+fi
+
+AC_MSG_CHECKING([whether to enable verbose USB communication messages]);
+AC_MSG_RESULT($debug_usb_comms)
+if test $debug_usb_comms = yes; then
+  AC_DEFINE([_DEBUG_USB_COMMS_],[1], [Print verbose USB communication messages])
+fi
+
+
+debug_malloc=no
+AC_ARG_ENABLE(malloc_logging,
+       AS_HELP_STRING([--enable-malloc-logging],
+               [Include free space in logging messages (requires malloc.h).]), 
+       [debug_malloc=$enableval], [])
+
+AC_MSG_CHECKING([whether to enable malloc free space logging]);
+AC_MSG_RESULT($debug_malloc)
+if test $debug_malloc = yes; then
+  AC_DEFINE([_DEBUG_FREE_SPACE_],[1], [Include malloc free space in logging])
+fi
+
 
 AC_ARG_ENABLE(parport,
   AS_HELP_STRING([--enable-parport], [Enable building the pc parallel port driver]), 
@@ -305,6 +385,7 @@ case $host in
        fi
        
     AC_DEFINE(IS_WIN32, 1, [1 if building for Win32.])
+    AC_DEFINE(IS_DARWIN, 0, [0 if not building for Darwin.])
     ;; 
   *-mingw*) 
     is_mingw=yes
@@ -314,11 +395,22 @@ case $host in
 
     AC_DEFINE(IS_MINGW, 1, [1 if building for MinGW.])
     AC_DEFINE(IS_WIN32, 1, [1 if building for Win32.])
+    AC_DEFINE(IS_DARWIN, 0, [0 if not building for Darwin.])
     ;; 
+  *darwin*)
+    is_darwin=yes
+
+    parport_use_giveio=no
+
+    AC_DEFINE(IS_CYGWIN, 0, [0 if not building for Cygwin.])
+    AC_DEFINE(IS_WIN32, 0, [0 if not building for Win32.])
+    AC_DEFINE(IS_DARWIN, 1, [1 if building for Darwin.])
+    ;;
   *) 
        parport_use_giveio=no
     AC_DEFINE(IS_CYGWIN, 0, [0 if not building for Cygwin.])
     AC_DEFINE(IS_WIN32, 0, [0 if not building for Win32.])
+    AC_DEFINE(IS_DARWIN, 0, [0 if not building for Darwin.])
     ;;
 esac
 
@@ -475,7 +567,7 @@ then
    AC_MSG_ERROR([The option: with_ftd2xx_linux_tardir is for LINUX only.])
 fi
 
-if test $build_ft2232_ftd2xx = yes ; then
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes ; then
 AC_MSG_CHECKING([for ftd2xx.lib exists (win32)])
 
    # if we are given a zipdir...
@@ -514,16 +606,39 @@ AC_MSG_CHECKING([for ftd2xx.lib exists (win32)])
 fi
 fi
 
-if test $is_win32 = no; then
+if test $is_darwin = yes ; then
+if test "${with_ftd2xx_win32_zipdir+set}" = set
+then
+   AC_MSG_ERROR([The option: --with-ftd2xx-win32-zipdir is for win32 only])
+fi
+if test "${with_ftd2xx_linux_tardir+set}" = set
+then
+   AC_MSG_ERROR([The option: with_ftd2xx_linux_tardir is for LINUX only.])
+fi
+
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes ; then
+   AC_MSG_CHECKING([for libftd2xx.a (darwin)])
+
+   if test ! -f /usr/local/include/ftd2xx.h ; then
+      AC_MSG_ERROR([ftd2xx library from FTDICHIP.com seems to be missing, cannot find: /usr/local/include/ftd2xx.h])
+   fi
+
+   CFLAGS="$CFLAGS -I/usr/local/include"
+   LDFLAGS="$LDFLAGS -L/usr/local/lib"
+   LIBS="$LIBS -lftd2xx"
+   AC_MSG_RESULT([-L/usr/local/lib -lftd2xx])
+fi
+fi
+
+if test $is_win32 = no && test $is_darwin = no ; then
 
 if test "${with_ftd2xx_win32_zipdir+set}" = set
 then
    AC_MSG_ERROR([The option: --with-ftd2xx-win32-zipdir is for win32 only])
 fi
 
-if test $build_ft2232_ftd2xx = yes ; then
-   # Must be linux -
-   # Cause FTDICHIP does not supply a MAC-OS version
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes ; then
+   # Must be linux
    if test $host_os != linux-gnu && test $host_os != linux ; then
       AC_MSG_ERROR([The (linux) ftd2xx library from FTDICHIP.com is linux only. Try --enable-ft2232-libftdi instead])
    fi
@@ -576,7 +691,7 @@ if test $build_ft2232_ftd2xx = yes ; then
 fi
 fi
 
-if test $build_ft2232_ftd2xx = yes; then
+if test $build_ft2232_ftd2xx = yes -o $build_presto_ftd2xx = yes; then
 
 # Before we go any further - make sure we can *BUILD* and *RUN*
 # a simple app with the "ftd2xx.lib" file - in what ever form we where given
@@ -654,8 +769,16 @@ LDFLAGS=$LDFLAGS_SAVE
 CFLAGS=$CFLAGS_SAVE
 fi
 
+# check for usb.h when a driver will require it
+if test $build_jlink = yes -o $build_vsllink = yes -o $build_usbprog = yes -o \
+       $build_rlink = yes -o $build_armjtagew = yes
+then 
+  AC_CHECK_HEADERS([usb.h],[],
+       [AC_MSG_ERROR([usb.h is required to build some OpenOCD driver(s)])])
+fi
+
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(openocd, 1.0)
+AM_INIT_AUTOMAKE([-Wall -Wno-portability])
 AM_MAINTAINER_MODE
 
 AM_CONDITIONAL(RELEASE, test $build_release = yes)
@@ -683,16 +806,55 @@ AM_CONDITIONAL(ARMJTAGEW, test $build_armjtagew = yes)
 AM_CONDITIONAL(IS_CYGWIN, test $is_cygwin = yes)
 AM_CONDITIONAL(IS_MINGW, test $is_mingw = yes)
 AM_CONDITIONAL(IS_WIN32, test $is_win32 = yes)
+AM_CONDITIONAL(IS_DARWIN, test $is_darwin = yes)
 AM_CONDITIONAL(BITQ, test $build_bitq = yes)
 
 AC_LANG_C
 AC_PROG_CC
+AC_PROG_CC_C99
+AM_PROG_CC_C_O
 AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+
+# Look for environ alternatives.  Possibility #1: is environ in unistd.h or stdlib.h?
+AC_MSG_CHECKING([for environ in unistd.h and stdlib.h])
+AC_COMPILE_IFELSE([
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <stdlib.h>
+int main(int argc, char **argv) { char **ep = environ; }
+  ], [
+    AC_MSG_RESULT([yes])
+    has_environ=yes
+  ], [
+    AC_MSG_RESULT([no])
+
+    # Possibility #2: can environ be found in an available library?
+    AC_MSG_CHECKING([for extern environ])
+    AC_LINK_IFELSE([
+extern char **environ;
+int main(int argc, char **argv) { char **ep = environ; }
+      ], [
+        AC_DEFINE(NEED_ENVIRON_EXTERN, [1], [Must declare 'environ' to use it.])
+        has_environ=yes
+      ], [
+        has_environ=no
+      ])
+    AC_MSG_RESULT([${has_environ}])
+  ])
+
+if test "${has_environ}" != "yes" ; then
+     AC_MSG_FAILURE([Could not find 'environ' in unistd.h or available libraries.]) 
+fi
+
 
 # set default gcc warnings
 GCC_WARNINGS="-Wall -Wstrict-prototypes -Wformat-security"
 if test "${gcc_wextra}" = yes; then
        GCC_WARNINGS="${GCC_WARNINGS} -Wextra -Wno-unused-parameter"
+       GCC_WARNINGS="${GCC_WARNINGS} -Wbad-function-cast"
+       GCC_WARNINGS="${GCC_WARNINGS} -Wcast-align"
+       GCC_WARNINGS="${GCC_WARNINGS} -Wredundant-decls"
 fi
 if test "${gcc_werror}" = yes; then
        GCC_WARNINGS="${GCC_WARNINGS} -Werror"