-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(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_CHECK_HEADERS([net/if.h], [], [], [dnl
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+AC_HEADER_ASSERT
+AC_HEADER_STDBOOL
AC_HEADER_TIME
AC_C_BIGENDIAN
is_cygwin=no
is_mingw=no
is_win32=no
+is_darwin=no
build_release=yes
AC_ARG_ENABLE(release,
)
#========================================
-# 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.
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]),
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
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
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...
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
- AC_MSG_CHECKING([for libftd2xx.a (linux)])
- # 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
# Are we given a TAR directory?
if test "${with_ftd2xx_linux_tardir+set}" = set
then
+ AC_MSG_CHECKING([uninstalled ftd2xx distribution])
# The .H file is simple..
- f=$with_ftd2xx_linux_tardir/ftd2xx.h
- if test ! -f $f ; then
- AC_MSG_ERROR([Option: --with-ftd2xx-linux-tardir appears wrong, cannot find: $f])
+ FTD2XX_H=$with_ftd2xx_linux_tardir/ftd2xx.h
+ if test ! -f "${FTD2XX_H}"; then
+ AC_MSG_ERROR([Option: --with-ftd2xx-linux-tardir appears wrong, cannot find: ${FTD2XX_H}])
fi
CFLAGS="$CFLAGS -I$with_ftd2xx_linux_tardir"
- if test $with_ftd2xx_lib = shared
- then
- LDFLAGS="$LDFLAGS -L$with_ftd2xx_linux_tardir"
- LIBS="$LIBS -lftd2xx"
- AC_MSG_RESULT([ Assuming: -L$with_ftd2xx_linux_tardir -lftd2xx])
- else
+ FTD2XX_LDFLAGS="-L$with_ftd2xx_linux_tardir"
+ FTD2XX_LIB="-lftd2xx"
+ if test $with_ftd2xx_lib != shared; then
# Test #1 - Future proof - if/when ftdichip fixes their distro.
# Try it with the simple ".a" suffix.
- f=$with_ftd2xx_linux_tardir/static_lib/libftd2xx.a
- if test -f $f ; then
- # Yea we are done
- LDFLAGS="$LDFLAGS -L$with_ftd2xx_linux_tardir/static_lib"
- LIBS="$LIBS -lftd2xx"
+ FTD2XX_LIB="$with_ftd2xx_linux_tardir/static_lib/libftd2xx.a"
+ if test -f "${FTD2XX_LIB}"; then
+ FTD2XX_LDFLAGS="${FTD2XX_LDFLAGS}/static_lib"
else
# Test Number2.
# Grr.. perhaps it exists as a version number?
- f="$with_ftd2xx_linux_tardir/static_lib/libftd2xx.a.*.*.*"
- count=`ls $f | wc -l`
+ FTD2XX_LIB="$with_ftd2xx_linux_tardir/static_lib/libftd2xx.a.*.*.*"
+ count=`ls ${FTD2XX_LIB} | wc -l`
if test $count -gt 1 ; then
AC_MSG_ERROR([Multiple libftd2xx.a files found in: $with_ftd2xx_linux_tardir/static_lib sorry cannot handle this yet])
fi
fi
# Because the "-l" rules do not understand version numbers...
# we will just stuff the absolute path onto the LIBS variable
- f=`ls $f`
- #
- LIBS="$LIBS $f -lpthread"
- # No need to bother with LDFLAGS...
+ FTD2XX_LIB="`ls ${FTD2XX_LIB}` -lpthread"
+ FTD2XX_LDFLAGS=""
fi
- AC_MSG_RESULT([Found: $f])
fi
+ LDFLAGS="${LDFLAGS} ${FTD2XX_LDFLAGS}"
+ LIBS="${LIBS} ${FTD2XX_LIB}"
+ AC_MSG_RESULT([${FTD2XX_LDFLAGS} ${FTD2XX_LIB}])
else
- LIBS="$LIBS -lftd2xx"
- AC_MSG_RESULT([Assumed: installed])
- AC_MSG_WARN([The (linux) FTDICHIP.COM files ftd2xx.h and libftd2xx.so are assumed to be in a proper place])
+ AC_CHECK_HEADER([ftd2xx.h],[],[
+ AC_MSG_ERROR([You seem to be missing the FTD2xx driver header file.])
+ ])
+ AC_SEARCH_LIBS([FT_GetLibraryVersion],[ftd2xx],,[
+ AC_MSG_ERROR([You appear to be missing the FTD2xx driver library.])
+ ],[])
fi
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
# We should be able to compile, link and run this test program now
- AC_MSG_CHECKING([Test: Build & Link with ftd2xx])
+ AC_MSG_CHECKING([whether ftd2xx library works])
#
# Save the LDFLAGS for later..
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)
+AH_BOTTOM([
+#include "system.h"
+#include "replacements.h"
+])
+
+AM_INIT_AUTOMAKE([-Wall -Wno-portability])
AM_MAINTAINER_MODE
AM_CONDITIONAL(RELEASE, test $build_release = 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
+AC_PROG_INSTALL
+
+dnl configure checks required for Jim files (these are obsolete w/ C99)
+AC_C_CONST
+AC_TYPE_LONG_LONG_INT
+
+# 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
+
+AC_DEFINE([_GNU_SOURCE],[1],[Use GNU C library extensions (e.g. stdndup).])
# set default gcc warnings
-GCC_WARNINGS="-Wall -Wstrict-prototypes"
+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"