diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c8c4679 --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +*.sw? +*.o +*.a +*.so +*.lo +*.la +src/Makefile +src/autom4te.cache +src/config.h +src/config.log +src/config.status +src/configure +src/mpsse_wrap.c +src/pylibmpsse.py + +src/examples/bitbang +src/examples/ds1305 +src/examples/gpio +src/examples/i2ceeprom +src/examples/spiflash +src/examples/spiflashfast + +.deps* +.libs* +Makefile +Makefile.in +aclocal.m4 +ar-lib +autoscan.log +build +build/* +compile +config.guess +config.sub +configure.scan +depcomp +install-sh +libtool +ltmain.sh +m4 +m4/* +missing +mpsse_wrap_python.c +py-compile +pyswig_*.c +config.h.in +stamp-h1 diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0adcea5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: c +compiler: + - gcc + - clang +before_install: + - sudo apt-get update -qq + - sudo apt-get install -qq libftdi-dev swig +script: + - cd src && autoreconf --install && ./configure && scan-build make diff --git a/README.md b/README.md index 5be4d22..0c41214 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,86 @@ -libmpsse -======== +# ABOUT + +[![Build Status](https://travis-ci.org/l29ah/libmpsse.svg?branch=master)](https://travis-ci.org/l29ah/libmpsse) + +Libmpsse is a library for interfacing with SPI/I2C devices via FTDI's FT-2232 family of USB to serial +chips. Additionally, it provides control over the GPIO pins on the FTDI chips and supports a raw +bitbang mode as well. Based around the libftdi library, it is written in C and includes a Python wrapper +courtesy of swig. + +See [INSTALL](docs/INSTALL) for the installation instructions. + +# LIBRARY API + +In version 1.0 libmpsse was modified to support multiple simultaneous FTDI chips inside a single process, +which required a change to the API. Thus, the API for libmpsse versions prior to 1.0 are not compatible with +the API for versions 1.0 and later. + +The C and Python APIs are very similar, although the Python API has been made more "pythonic". Specifically, +in Python: + +1. MPSSE is the name of the Python class, not of a method or function as it is in C. The class + constructor takes the same arguments as the MPSSE function in C. If you wish to instead use + the Open method to open a given device, simply do not specify these arguments when calling + the class constructor. + +2. Due to its object-oriented nature, each class instance in Python internally handles the MPSSE + context pointer; thus, none of the Python methods in the MPSSE class require this argument. + +3. Size parameters required by the C functions are not used by the corresponding Python methods. + +4. Besides the above described differences, all Python methods have a 1:1 compatibility with their + respective C functions. However, in Python the class constructor (MPSSE) and Open method have + sensible defaults for several of their arguments so not all arguments are required. + +See the [README.C](docs/README.C) and [README.PYTHON.html](docs/README.PYTHON.html) files for more details. + +# CODE EXAMPLES + +There are SPI and I2C code examples for both C and Python in the `src/examples` directory. After installing +libmpsse, the C examples can be built by running: + + $ make example-code + +There are more detailed descriptions of the SPI and I2C APIs in [README.SPI](docs/README.SPI) and [README.I2C](docs/README.I2C) files. + +# BUILDING APPLICATIONS + +To build applications in Python, you must import the `mpsse` module: + + from mpsse import * + +To build applications in C, you must include the `mpsse.h` header file: + + #include + +...and also link your program against the *libmpsse* library: + + $ gcc test.c -o test -lmpsse + +# PHYSICAL CONNECTIONS + +In order to speak to SPI or I2C devices, you must establish the proper physical connections between the target +device and your FTDI chip. The exact pin out of your target device and FTDI chip will differ based on the chips +in question, and the appropriate data sheets for each device should be referenced for this information. + +Included in the docs directory is the FTDI MPSSE Basics application note (AN 135). Section 2 of this document +covers all of the pin configurations for each FTDI chip, as well as example diagrams regarding the physical +connections between the FTDI chip and your target device. + +# KNOWN BUGS + +The following are known bugs in libmpsse: + +- In SPI, the Transfer method fails if transfering large data chunks. Use the Read/Write functions + for transferring large chunks of data (~1MB or more). + +# KNOWN LIMITATIONS + +Libmpsse supports all four SPI modes as well as I2C. However, due to the design of the FTDI MPSSE implementation, +there are some limitations: + +- All protocols support master mode only. +- SPI modes 1 and 3 are only partially supported; see the README.SPI for more information. +- In I2C, the SCL and SDA pins are open drain, but the MPSSE implementation explicitly drives these lines high. + Although this is usually fine, it means that some I2C features, such as clock stretching, are not supported. -Open source library for SPI/I2C control via FTDI chips diff --git a/docs/INSTALL b/docs/INSTALL index 7f3e2eb..6329918 100644 --- a/docs/INSTALL +++ b/docs/INSTALL @@ -3,17 +3,17 @@ PREREQUISITES Libmpsse is currently supported on the Linux and OSX platforms. Libmpsse requires swig as well as the libftdi and python development packages. - These can typically be installed by your Linux distro's package manager, such as: + These can typically be installed by your Linux distro's package manager, for Debian: - # apt-get install swig libftdi-dev python-dev + # apt-get install swig libftdi-dev python-dev autoconf automake libtool - For OSX, you will likely need to at least install libftdi from source. Note that - libftdi also requires the libusb-0.1 (not libusb-1.0) library. + For OSX, you will likely need to at least install libftdi from source. INSTALLATION With the required prerequisites installed, libmpsse can be built and installed: + $ autoreconf --install $ ./configure $ make # make install @@ -23,12 +23,11 @@ INSTALLATION may set the following environment variables: SWIG - Path to the swig binary - PYDEV - Path to the python include directory where the python header files are located - PYLIB - Path to the python library directory where python modules should be installed + PYTHON - Path to the python binary Example: - $ PYDEV=/usr/local/include/python2.6/ ./configure + $ PYTHON=/usr/bin/python3 ./configure $ make # make install diff --git a/docs/README b/docs/README deleted file mode 100644 index 65289c4..0000000 --- a/docs/README +++ /dev/null @@ -1,82 +0,0 @@ -ABOUT - - Libmpsse is a library for interfacing with SPI/I2C devices via FTDI's FT-2232 family of USB to serial - chips. Additionally, it provides control over the GPIO pins on the FTDI chips and supports a raw - bitbang mode as well. Based around the libftdi library, it is written in C and includes a Python wrapper - courtesy of swig. - -LIBRARY API - - In version 1.0 libmpsse was modified to support multiple simultaneous FTDI chips inside a single process, - which required a change to the API. Thus, the API for libmpsse versions prior to 1.0 are not compatible with - the API for versions 1.0 and later. - - The C and Python APIs are very similar, although the Python API has been made more "pythonic". Specifically, - in Python: - - 1) MPSSE is the name of the Python class, not of a method or function as it is in C. The class - constructor takes the same arguments as the MPSSE function in C. If you wish to instead use - the Open method to open a given device, simply do not specify these arguments when calling - the class constructor. - - 2) Due to its object-oriented nature, each class instance in Python internally handles the MPSSE - context pointer; thus, none of the Python methods in the MPSSE class require this argument. - - 3) Size parameters required by the C functions are not used by the corresponding Python methods. - - 4) Besides the above described differences, all Python methods have a 1:1 compatibility with their - respective C functions. However, in Python the class constructor (MPSSE) and Open method have - sensible defaults for several of their arguments so not all arguments are required. - - See the README.C and README.PYTHON files for more details. - -CODE EXAMPLES - - There are SPI and I2C code examples for both C and Python in the src/examples directory. After installing - libmpsse, the C examples can be built by running: - - $ make example-code - - There are more detailed descriptions of the SPI and I2C APIs in docs/README.SPI and docs/README.I2C files. - -BUILDING APPLICATIONS - - To build applications in Python, you must import the mpsse module: - - from mpsse import * - - To build applications in C, you must include the mpsse.h header file: - - #include - - ...and also link your program against the libmpsse library: - - gcc test.c -o test -lmpsse - -PHYSICAL CONNECTIONS - - In order to speak to SPI or I2C devices, you must establish the proper physical connections between the target - device and your FTDI chip. The exact pin out of your target device and FTDI chip will differ based on the chips - in question, and the appropriate data sheets for each device should be referenced for this information. - - Included in the docs directory is the FTDI MPSSE Basics application note (AN 135). Section 2 of this document - covers all of the pin configurations for each FTDI chip, as well as example diagrams regarding the physical - connections between the FTDI chip and your target device. - -KNOWN BUGS - - The following are known bugs in libmpsse: - - o In SPI, the Transfer method fails if transfering large data chunks. Use the Read/Write functions - for transferring large chunks of data (~1MB or more). - -KNOWN LIMITATIONS - - Libmpsse supports all four SPI modes as well as I2C. However, due to the design of the FTDI MPSSE implementation, - there are some limitations: - - o All protocols support master mode only. - o SPI modes 1 and 3 are only partially supported; see the README.SPI for more information. - o In I2C, the SCL and SDA pins are open drain, but the MPSSE implementation explicitly drives these lines high. - Although this is usually fine, it means that some I2C features, such as clock stretching, are not supported. - diff --git a/docs/README.PYTHON b/docs/README.PYTHON.html similarity index 100% rename from docs/README.PYTHON rename to docs/README.PYTHON.html diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..bb90bad --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,47 @@ +SUBDIRS = . examples + +AM_CFLAGS = -Wall -Wextra -fPIC -fno-strict-aliasing -g -O2 $(CFLAGS) +AM_CPPFLAGS = $(PYTHON_INCLUDE) $(CPPFLAGS) + +ACLOCAL_AMFLAGS = -I m4 + +if BUILD_PYTHON_WRAPPERS +PYTHON_MPSSE_LA = libMpssePython.la +PYLIBMPSSE = pylibmpsse.py +CREATE_LINK = $(LN_S) ${prefix}/lib/libMpssePython.so.0.0.0 ${pythondir}/_pylibmpsse.so +else !BUILD_PYTHON_WRAPPERS +PYTHON_MPSSE_LA = +PYLIBMPSSE = +CREATE_LINK = true +endif !BUILD_PYTHON_WRAPPERS + +lib_LTLIBRARIES = libmpsse.la $(PYTHON_MPSSE_LA) +libmpsse_la_SOURCES = mpsse.c support.c fast.c + +include_HEADERS = mpsse.h + +EXTRA_DIST = mpsse.i +python_PYTHON = mpsse.py $(PYLIBMPSSE) + +libMpssePython_la_SOURCES = mpsse_wrap_python.c pyswig_mpsse.c pyswig_support.c +BUILT_SOURCES = pyswig_support.c pyswig_mpsse.c +CLEANFILES = pyswig_mpsse.c pyswig_support.c mpsse_wrap_python.c +libMpssePython_la_CPPFLAGS = -DSWIGPYTHON $(AM_CPPFLAGS) + +mpsse_wrap_python.c: mpsse.i + $(SWIG) -python -o $@ $< + +pyswig_mpsse.c: mpsse.c + cp -f $< $@ + +pyswig_support.c: support.c + cp -f $< $@ + +if BUILD_PYTHON_WRAPPERS +install-exec-hook: + -rm ${pythondir}/_pylibmpsse.so + $(CREATE_LINK) + +uninstall-hook: + -rm ${pythondir}/_pylibmpsse.so +endif BUILD_PYTHON_WRAPPERS diff --git a/src/Makefile.in b/src/Makefile.in deleted file mode 100644 index 25e8434..0000000 --- a/src/Makefile.in +++ /dev/null @@ -1,76 +0,0 @@ -CC=@CC@ -SWIG=@SWIG@ -PYDEV=@PYDEV@ -PYLIB=@PYLIB@ -SONAME=@SONAME@ -FRAMEWORK=@FRAMEWORK@ -BUILD=@BUILD@ -LDFLAGS=@LDFLAGS@ -CFLAGS=@CFLAGS@ -LIBFTDI1=@LIBFTDI1@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -LIBDIR=@libdir@ -INCDIR=@includedir@ -INC=-I$(PYDEV) -TARGET=mpsse - -all: $(TARGET) py$(BUILD)-build - -$(TARGET): mpsse.o fast.o - $(CC) $(CFLAGS) -shared -Wl,$(SONAME),lib$(TARGET).so $(TARGET).o fast.o support.o \ - -o lib$(TARGET).so $(LDFLAGS) - ar rcs lib$(TARGET).a $(TARGET).o fast.o support.o - -example-code: - make -C examples - -mpsse.o: support.o - $(CC) $(CFLAGS) $(LDFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c - -fast.o: support.o - $(CC) $(CFLAGS) $(LDFLAGS) -c fast.c - -support.o: - $(CC) $(CFLAGS) $(LDFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c support.c - -pyswig-build: - $(CC) $(CFLAGS) $(LDFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c support.c - $(CC) $(CFLAGS) $(LDFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c - $(SWIG) -python $(TARGET).i - $(CC) $(CFLAGS) -c -DLIBFTDI1=$(LIBFTDI1) $(TARGET)_wrap.c $(INC) - $(CC) $(CFLAGS) -shared $(FRAMEWORK) $(TARGET)_wrap.o mpsse.o support.o \ - -o _pylib$(TARGET).so $(LDFLAGS) $(INC) - -pyswig-install: - install -D -m644 pylib$(TARGET).py $(DESTDIR)/$(PYLIB)/pylib$(TARGET).py - install -D -m644 _pylib$(TARGET).so $(DESTDIR)/$(PYLIB)/_pylib$(TARGET).so - install -D -m644 $(TARGET).py $(DESTDIR)/$(PYLIB)/$(TARGET).py - -pyswig-uninstall: - rm -f $(DESTDIR)/$(PYLIB)/$(TARGET).* \ - $(DESTDIR)/$(PYLIB)/pylib$(TARGET).* \ - $(DESTDIR)/$(PYLIB)/_pylib$(TARGET).* - -# Dummy rules for when $BUILD == "" (if --disable-python was passed to ./configure) -py-build: -py-install: -py-uninstall: - -install: py$(BUILD)-install - install -D -m644 lib$(TARGET).so $(DESTDIR)/$(LIBDIR)/lib$(TARGET).so - install -D -m644 lib$(TARGET).a $(DESTDIR)/$(LIBDIR)/lib$(TARGET).a - install -D -m644 $(TARGET).h $(DESTDIR)/$(INCDIR)/$(TARGET).h - -uninstall: py$(BUILD)-uninstall - rm -f $(DESTDIR)/$(LIBDIR)/lib$(TARGET).so \ - $(DESTDIR)/$(LIBDIR)/lib$(TARGET).a \ - $(DESTDIR)/$(INCDIR)/$(TARGET).h - -clean: - make -C examples clean - rm -rf *.o *.so *.a _$(TARGET).py* pylib$(TARGET).py* $(TARGET)_wrap.c *.pyc - -distclean: clean - rm -rf *.cache config.* Makefile - diff --git a/src/configure b/src/configure deleted file mode 100755 index 7d49e2e..0000000 --- a/src/configure +++ /dev/null @@ -1,4696 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for libmpsse 1.3. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: http://libmpsse.googlecode.com about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='libmpsse' -PACKAGE_TARNAME='libmpsse' -PACKAGE_VERSION='1.3' -PACKAGE_STRING='libmpsse 1.3' -PACKAGE_BUGREPORT='http://libmpsse.googlecode.com' -PACKAGE_URL='' - -ac_unique_file="mpsse.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBFTDI1 -FRAMEWORK -SONAME -PYLIB -PYDEV -SWIG -BUILD -LIBOBJS -EGREP -GREP -CPP -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_python -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures libmpsse 1.3 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libmpsse] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of libmpsse 1.3:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-python Do not build Python wrappers - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -libmpsse configure 1.3 -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( cat <<\_ASBOX -## --------------------------------------------- ## -## Report this to http://libmpsse.googlecode.com ## -## --------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by libmpsse $as_me 1.3, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -# Check whether --enable-python was given. -if test "${enable_python+set}" = set; then : - enableval=$enable_python; -fi - -if test "x$enable_python" != "xno"; then : - BUILD="swig" -else - BUILD="" -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -for ac_header in stdlib.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDLIB_H 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -$as_echo_n "checking for GNU libc compatible malloc... " >&6; } -if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_malloc_0_nonnull=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined STDC_HEADERS || defined HAVE_STDLIB_H -# include -#else -char *malloc (); -#endif - -int -main () -{ -return ! malloc (0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_malloc_0_nonnull=yes -else - ac_cv_func_malloc_0_nonnull=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes; then : - -$as_echo "#define HAVE_MALLOC 1" >>confdefs.h - -else - $as_echo "#define HAVE_MALLOC 0" >>confdefs.h - - case " $LIBOBJS " in - *" malloc.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS malloc.$ac_objext" - ;; -esac - - -$as_echo "#define malloc rpl_malloc" >>confdefs.h - -fi - - - -CFLAGS="-Wall -fPIC -fno-strict-aliasing $CFLAGS" - -for ac_header in libftdi1/ftdi.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "libftdi1/ftdi.h" "ac_cv_header_libftdi1_ftdi_h" "$ac_includes_default" -if test "x$ac_cv_header_libftdi1_ftdi_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBFTDI1_FTDI_H 1 -_ACEOF - LIBFTDI1=1 -else - LIBFTDI1="" -fi - -done - - -if ! test $LIBFTDI1 -then - for ac_header in ftdi.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "ftdi.h" "ac_cv_header_ftdi_h" "$ac_includes_default" -if test "x$ac_cv_header_ftdi_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_FTDI_H 1 -_ACEOF - LIBFTDI1=0 -else - echo "error: missing libftdi header files" && exit 1 -fi - -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ftdi_init in -lftdi" >&5 -$as_echo_n "checking for ftdi_init in -lftdi... " >&6; } -if test "${ac_cv_lib_ftdi_ftdi_init+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lftdi $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ftdi_init (); -int -main () -{ -return ftdi_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ftdi_ftdi_init=yes -else - ac_cv_lib_ftdi_ftdi_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ftdi_ftdi_init" >&5 -$as_echo "$ac_cv_lib_ftdi_ftdi_init" >&6; } -if test "x$ac_cv_lib_ftdi_ftdi_init" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBFTDI 1 -_ACEOF - - LIBS="-lftdi $LIBS" - -else - echo "error: missing libftdi library" && exit 1 -fi - - LDFLAGS="-lftdi $LDFLAGS" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ftdi_init in -lftdi1" >&5 -$as_echo_n "checking for ftdi_init in -lftdi1... " >&6; } -if test "${ac_cv_lib_ftdi1_ftdi_init+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lftdi1 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ftdi_init (); -int -main () -{ -return ftdi_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ftdi1_ftdi_init=yes -else - ac_cv_lib_ftdi1_ftdi_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ftdi1_ftdi_init" >&5 -$as_echo "$ac_cv_lib_ftdi1_ftdi_init" >&6; } -if test "x$ac_cv_lib_ftdi1_ftdi_init" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBFTDI1 1 -_ACEOF - - LIBS="-lftdi1 $LIBS" - -else - echo "error: missing libftdi1 library" && exit 1 -fi - - LDFLAGS="-lftdi1 $LDFLAGS" -fi - -if test $BUILD -then - if ! test $SWIG - then - SWIG="$(which swig)" - fi - - if ! test $SWIG - then - echo "error: could not locate swig" - exit 1 - fi - - if ! test $PYDEV - then - PYDEV="/usr/include/python$(python -V 2>&1 | awk '{print $2}' | cut -d'.' -f1,2)" - fi - - for ac_header in $PYDEV/Python.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -else - echo "error: missing python header files" && exit 1 -fi - -done - - - if ! test $PYLIB - then - echo "import sys" > pylib.py - echo "for path in sys.path: print path" >> pylib.py - PYLIB="$(python pylib.py | grep -e '-packages$' | head -1)" - rm -f pylib.py - fi - - if ! test -d $PYLIB - then - echo "error: could not locate python library path" - exit 1 - fi -fi - -if test "$(uname)" == "Darwin" -then - SONAME="-install_name" - FRAMEWORK="-framework Python" -else - SONAME="-soname" - FRAMEWORK="" -fi - -cp confdefs.h config.h - -BUILD=$BUILD - -SWIG=$SWIG - -PYDEV=$PYDEV - -PYLIB=$PYLIB - -SONAME=$SONAME - -FRAMEWORK=$FRAMEWORK - -LIBFTDI1=$LIBFTDI1 - -ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by libmpsse $as_me 1.3, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -libmpsse config.status 1.3 -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/src/configure.ac b/src/configure.ac index 7c3130a..c409f2d 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -1,88 +1,78 @@ AC_PREREQ([2.65]) -AC_INIT([libmpsse],[1.3],[http://libmpsse.googlecode.com]) +AC_INIT([libmpsse],[1.3.2],[https://github.com/l29ah/libmpsse/issues]) AC_ARG_ENABLE([python],AS_HELP_STRING([--disable-python], [Do not build Python wrappers])) -AS_IF([test "x$enable_python" != "xno"], [BUILD="swig"], [BUILD=""]) AC_CONFIG_SRCDIR([mpsse.c]) +AC_CONFIG_MACRO_DIR([m4]) +AM_INIT_AUTOMAKE([-Wall -Werror foreign]) +AM_PROG_AR AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_LN_S AC_LANG(C) AC_TYPE_SIZE_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT8_T AC_FUNC_MALLOC -CFLAGS="-Wall -fPIC -fno-strict-aliasing $CFLAGS" +# Requirements/checks detected by autoscan +AC_CHECK_FUNCS([floor memset strchr strdup strstr]) +AC_CHECK_HEADERS([float.h limits.h]) +AC_CHECK_HEADER_STDBOOL + +LT_INIT +AC_ENABLE_SHARED +AC_ENABLE_STATIC dnl Check to see if the libftdi1 headers have been installed -AC_CHECK_HEADERS([libftdi1/ftdi.h], [LIBFTDI1=1], [LIBFTDI1=""]) - -dnl If libftdi1 headers were not detected, check for libftdi headers/library -if ! test $LIBFTDI1 -then - AC_CHECK_HEADERS([ftdi.h],[LIBFTDI1=0],[echo "error: missing libftdi header files" && exit 1]) - AC_CHECK_LIB([ftdi],[ftdi_init],[],[echo "error: missing libftdi library" && exit 1],[]) - LDFLAGS="-lftdi $LDFLAGS" -dnl Else check for the libftdi1 library -else - AC_CHECK_LIB([ftdi1],[ftdi_init],[],[echo "error: missing libftdi1 library" && exit 1],[]) - LDFLAGS="-lftdi1 $LDFLAGS" -fi - -if test $BUILD -then - if ! test $SWIG - then - SWIG="$(which swig)" - fi - - if ! test $SWIG - then - echo "error: could not locate swig" - exit 1 - fi - - if ! test $PYDEV - then - PYDEV="/usr/include/python$(python -V 2>&1 | awk '{print $2}' | cut -d'.' -f1,2)" - fi - - AC_CHECK_HEADERS([$PYDEV/Python.h],[],[echo "error: missing python header files" && exit 1]) - - if ! test $PYLIB - then - dnl This is a hack to get a valid python library path - echo "import sys" > pylib.py - echo "for path in sys.path: print path" >> pylib.py - PYLIB="$(python pylib.py | grep -e '-packages$' | head -1)" - rm -f pylib.py - fi - - if ! test -d $PYLIB - then - echo "error: could not locate python library path" - exit 1 - fi -fi - -dnl OSX specific compiler flags -if test "$(uname)" == "Darwin" -then - SONAME="-install_name" - FRAMEWORK="-framework Python" -else - SONAME="-soname" - FRAMEWORK="" -fi - -cp confdefs.h config.h - -AC_SUBST(BUILD, $BUILD) -AC_SUBST(SWIG, $SWIG) -AC_SUBST(PYDEV, $PYDEV) -AC_SUBST(PYLIB, $PYLIB) -AC_SUBST(SONAME, $SONAME) -AC_SUBST(FRAMEWORK, $FRAMEWORK) -AC_SUBST(LIBFTDI1, $LIBFTDI1) -AC_CONFIG_FILES([Makefile]) +AC_CHECK_HEADERS([libftdi1/ftdi.h], [LIBFTDI1=1], + [AC_CHECK_HEADERS([ftdi.h],[LIBFTDI1=0], + [AC_MSG_ERROR([missing libftdi header files])])]) + +AC_CHECK_LIB([ftdi1],[ftdi_init],[], + [AC_CHECK_LIB([ftdi],[ftdi_init],[],[AC_MSG_ERROR([missing libftdi library])],[])],[]) + +PKG_CHECK_MODULES(FTDI_1_5, [libftdi1 >= 1.5], LIBFTDI1_5=1, LIBFTDI1_5=0) +AC_DEFINE_UNQUOTED([HAVE_LIBFTDI1_5], [$LIBFTDI1_5], [Use libftdi >=1.5.]) + +AM_CONDITIONAL([BUILD_PYTHON_WRAPPERS], [test "x$enable_python" != "xno"]) +AS_IF([test "x$enable_python" != "xno"], [ + AC_PATH_PROG([SWIG], [swig], [no]) + AM_PATH_PYTHON + AC_ARG_VAR([PYTHON_INCLUDE], [Include flags for Python, bypassing python-config]) + AC_ARG_VAR([PYTHON_LIBS], [Libs flags for Python, bypassing python-config]) + AC_ARG_VAR([PYTHON_CONFIG], [Path to python config]) + + AS_IF([test "$SWIG" = no], [AC_MSG_ERROR([swig not found])]) + + AS_IF([test -z "$PYTHON_CONFIG"], [ + AC_PATH_PROGS([PYTHON_CONFIG], [python${PYTHON_VERSION}-config python-config], [no]) + AS_IF([test "$PYTHON_CONFIG" = no], AC_MSG_ERROR([can't find python-config])) + ]) + + AS_IF([test -z "$PYTHON_INCLUDE"], [ + AC_MSG_CHECKING([Python include flags]) + PYTHON_INCLUDE=`$PYTHON_CONFIG --includes` + AC_MSG_RESULT([$PYTHON_INCLUDE]) + ]) + + AS_IF([test -z "$PYTHON_LIBS"], [ + AC_MSG_CHECKING([Python libs flags]) + PYTHON_LIBS=`$PYTHON_CONFIG --libs` + AC_MSG_RESULT([$PYTHON_LIBS]) + ]) + + AC_SUBST(PYTHON_INCLUDE) + AC_SUBST(PYTHON_LIBS) +]) + + +AC_SUBST(LIBFTDI1) +AC_CONFIG_FILES([Makefile examples/Makefile]) +AC_CONFIG_HEADERS([config.h]) AC_OUTPUT diff --git a/src/examples/Makefile b/src/examples/Makefile deleted file mode 100644 index 1c03853..0000000 --- a/src/examples/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -LDFLAGS=-lmpsse - -all: spiflash spiflashfast i2ceeprom ds1305 gpio bitbang - -spiflash: - $(CC) $(CFLAGS) spiflash.c -o spiflash $(LDFLAGS) - -spiflashfast: - $(CC) $(CFLAGS) spiflashfast.c -o spiflashfast $(LDFLAGS) - -i2ceeprom: - $(CC) $(CFLAGS) i2ceeprom.c -o i2ceeprom $(LDFLAGS) - -ds1305: - $(CC) $(CFLAGS) ds1305.c -o ds1305 $(LDFLAGS) - -gpio: - $(CC) $(CFLAGS) gpio.c -o gpio $(LDFLAGS) - -bitbang: - $(CC) $(CFLAGS) bitbang.c -o bitbang $(LDFLAGS) - -clean: - rm -f *.dSYM - rm -f bitbang gpio ds1305 i2ceeprom spiflash spiflashfast - -distclean: clean diff --git a/src/examples/Makefile.am b/src/examples/Makefile.am new file mode 100644 index 0000000..3c2111f --- /dev/null +++ b/src/examples/Makefile.am @@ -0,0 +1,5 @@ +AM_LDFLAGS = -lmpsse -L${top_srcdir} $(LDFLAGS) +AM_CPPFLAGS = -I${top_srcdir} $(CPPFLAGS) + +noinst_bindir = ${abs_top_builddir}/build +noinst_bin_PROGRAMS = spiflash spiflashfast i2ceeprom ds1305 gpio bitbang diff --git a/src/examples/bitbang.c b/src/examples/bitbang.c index 68e9ec6..ab6336a 100644 --- a/src/examples/bitbang.c +++ b/src/examples/bitbang.c @@ -1,5 +1,7 @@ +#include "config.h" #include #include +#include #include int main(void) diff --git a/src/examples/bitbang.py b/src/examples/bitbang.py index 5a73637..a64a8e8 100755 --- a/src/examples/bitbang.py +++ b/src/examples/bitbang.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * from time import sleep @@ -9,12 +9,12 @@ # Set pin 0 high/low and read back pin 0's state 10 times for i in range(0, 10): - io.PinHigh(0) - print "Pin 0 is:", io.PinState(0) - sleep(1) + io.PinHigh(0) + print "Pin 0 is:", io.PinState(0) + sleep(1) - io.PinLow(0) - print "Pin 0 is:", io.PinState(0) - sleep(1) + io.PinLow(0) + print "Pin 0 is:", io.PinState(0) + sleep(1) io.Close() diff --git a/src/examples/ds1305.c b/src/examples/ds1305.c index ecb7a3a..3864165 100644 --- a/src/examples/ds1305.c +++ b/src/examples/ds1305.c @@ -1,3 +1,4 @@ +#include "config.h" #include #include #include diff --git a/src/examples/ds1305.py b/src/examples/ds1305.py index fcbf895..4386afa 100755 --- a/src/examples/ds1305.py +++ b/src/examples/ds1305.py @@ -1,59 +1,59 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * from time import sleep try: - ds1305 = MPSSE(SPI1, ONE_HUNDRED_KHZ, MSB) + ds1305 = MPSSE(SPI1, ONE_HUNDRED_KHZ, MSB) - # The DS1305's chip select pin idles low - ds1305.SetCSIdle(0) + # The DS1305's chip select pin idles low + ds1305.SetCSIdle(0) - print "%s initialized at %dHz (SPI mode 1)" % (ds1305.GetDescription(), ds1305.GetClock()) + print "%s initialized at %dHz (SPI mode 1)" % (ds1305.GetDescription(), ds1305.GetClock()) - # Get the current control register value - ds1305.Start() - ds1305.Write("\x0F") - control = ord(ds1305.Read(1)) - ds1305.Stop() + # Get the current control register value + ds1305.Start() + ds1305.Write("\x0F") + control = ord(ds1305.Read(1)) + ds1305.Stop() - # Clear the EOSC bit (BIT7) to enable the DS1305's oscillator - control &= ~0x80 + # Clear the EOSC bit (BIT7) to enable the DS1305's oscillator + control &= ~0x80 - # Write the new control value to the control register - ds1305.Start() - ds1305.Write("\x8F") - ds1305.Write(chr(control)) - ds1305.Stop() + # Write the new control value to the control register + ds1305.Start() + ds1305.Write("\x8F") + ds1305.Write(chr(control)) + ds1305.Stop() - # Loop to print the time elapsed every second - while True: + # Loop to print the time elapsed every second + while True: - try: - sleep(1) + try: + sleep(1) - # Read in the elapsed seconds - ds1305.Start() - ds1305.Write("\x00") - seconds = ord(ds1305.Read(1)) - ds1305.Stop() + # Read in the elapsed seconds + ds1305.Start() + ds1305.Write("\x00") + seconds = ord(ds1305.Read(1)) + ds1305.Stop() - # High 4 bits == tens of seconds, low 4 bits == seconds - seconds = (((seconds >> 4) * 10) + (seconds & 0x0F)) + # High 4 bits == tens of seconds, low 4 bits == seconds + seconds = (((seconds >> 4) * 10) + (seconds & 0x0F)) - # Read in the elapsed minutes - ds1305.Start() - ds1305.Write("\x01") - minutes = ord(ds1305.Read(1)) - ds1305.Stop() + # Read in the elapsed minutes + ds1305.Start() + ds1305.Write("\x01") + minutes = ord(ds1305.Read(1)) + ds1305.Stop() - # High 4 bits == tens of minutes, low 4 bits == minutes - minutes = (((minutes >> 4) * 10) + (minutes & 0x0F)) + # High 4 bits == tens of minutes, low 4 bits == minutes + minutes = (((minutes >> 4) * 10) + (minutes & 0x0F)) - print "%.2d:%.2d" % (minutes, seconds) - except KeyboardInterrupt: - break - - ds1305.Close() + print "%.2d:%.2d" % (minutes, seconds) + except KeyboardInterrupt: + break + + ds1305.Close() except Exception, e: - print "Error reading from DS1305:", e + print "Error reading from DS1305:", e diff --git a/src/examples/gpio.c b/src/examples/gpio.c index 326b626..59b0f11 100644 --- a/src/examples/gpio.c +++ b/src/examples/gpio.c @@ -1,5 +1,7 @@ +#include "config.h" #include #include +#include #include int main(void) diff --git a/src/examples/gpio.py b/src/examples/gpio.py index 4a6deb1..e523e6e 100755 --- a/src/examples/gpio.py +++ b/src/examples/gpio.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * from time import sleep @@ -9,12 +9,12 @@ # Toggle the first GPIO pin on/off 10 times for i in range(0, 10): - io.PinHigh(GPIOL0) - print "GPIOL0 State:", io.PinState(GPIOL0) - sleep(1) + io.PinHigh(GPIOL0) + print "GPIOL0 State:", io.PinState(GPIOL0) + sleep(1) - io.PinLow(GPIOL0) - print "GPIOL0 State:", io.PinState(GPIOL0) - sleep(1) + io.PinLow(GPIOL0) + print "GPIOL0 State:", io.PinState(GPIOL0) + sleep(1) io.Close() diff --git a/src/examples/i2ceeprom.c b/src/examples/i2ceeprom.c index 90c66e3..7134c12 100644 --- a/src/examples/i2ceeprom.c +++ b/src/examples/i2ceeprom.c @@ -1,7 +1,7 @@ /* * Example code to read the contents of an I2C EEPROM chip. */ - +#include "config.h" #include #include #include diff --git a/src/examples/i2ceeprom.py b/src/examples/i2ceeprom.py index 2de2acf..190cefa 100755 --- a/src/examples/i2ceeprom.py +++ b/src/examples/i2ceeprom.py @@ -1,40 +1,40 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * -SIZE = 0x8000 # Size of EEPROM chip (32 KB) -WCMD = "\xA0\x00\x00" # Write start address command -RCMD = "\xA1" # Read command -FOUT = "eeprom.bin" # Output file +SIZE = 0x8000 # Size of EEPROM chip (32 KB) +WCMD = "\xA0\x00\x00" # Write start address command +RCMD = "\xA1" # Read command +FOUT = "eeprom.bin" # Output file try: - eeprom = MPSSE(I2C, FOUR_HUNDRED_KHZ) - - print "%s initialized at %dHz (I2C)" % (eeprom.GetDescription(), eeprom.GetClock()) - - eeprom.Start() - eeprom.Write(WCMD) - - if eeprom.GetAck() == ACK: - - eeprom.Start() - eeprom.Write(RCMD) - - if eeprom.GetAck() == ACK: - data = eeprom.Read(SIZE) - eeprom.SendNacks() - eeprom.Read(1) - else: - raise Exception("Received read command NACK!") - else: - raise Exception("Received write command NACK!") - - eeprom.Stop() - - open(FOUT, "wb").write(data) - print "Dumped %d bytes to %s" % (len(data), FOUT) - - eeprom.Close() + eeprom = MPSSE(I2C, FOUR_HUNDRED_KHZ) + + print "%s initialized at %dHz (I2C)" % (eeprom.GetDescription(), eeprom.GetClock()) + + eeprom.Start() + eeprom.Write(WCMD) + + if eeprom.GetAck() == ACK: + + eeprom.Start() + eeprom.Write(RCMD) + + if eeprom.GetAck() == ACK: + data = eeprom.Read(SIZE) + eeprom.SendNacks() + eeprom.Read(1) + else: + raise Exception("Received read command NACK!") + else: + raise Exception("Received write command NACK!") + + eeprom.Stop() + + open(FOUT, "wb").write(data) + print "Dumped %d bytes to %s" % (len(data), FOUT) + + eeprom.Close() except Exception, e: - print "MPSSE failure:", e - + print "MPSSE failure:", e + diff --git a/src/examples/spiflash.c b/src/examples/spiflash.c index 2a86804..9ef3fd3 100644 --- a/src/examples/spiflash.c +++ b/src/examples/spiflash.c @@ -1,3 +1,4 @@ +#include "config.h" #include #include #include diff --git a/src/examples/spiflash.py b/src/examples/spiflash.py index e1cf9ab..d8b7f82 100755 --- a/src/examples/spiflash.py +++ b/src/examples/spiflash.py @@ -1,99 +1,99 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * from time import sleep class SPIFlash(object): - WCMD = "\x02" # Standard SPI flash write command (0x02) - RCMD = "\x03" # Standard SPI flash read command (0x03) - WECMD = "\x06" # Standard SPI flash write enable command (0x06) - CECMD = "\xc7" # Standard SPI flash chip erase command (0xC7) - IDCMD = "\x9f" # Standard SPI flash chip ID command (0x9F) + WCMD = "\x02" # Standard SPI flash write command (0x02) + RCMD = "\x03" # Standard SPI flash read command (0x03) + WECMD = "\x06" # Standard SPI flash write enable command (0x06) + CECMD = "\xc7" # Standard SPI flash chip erase command (0xC7) + IDCMD = "\x9f" # Standard SPI flash chip ID command (0x9F) - ID_LENGTH = 3 # Normal SPI chip ID length, in bytes - ADDRESS_LENGTH = 3 # Normal SPI flash address length (24 bits, aka, 3 bytes) - BLOCK_SIZE = 256 # SPI block size, writes must be done in multiples of this size - PP_PERIOD = .025 # Page program time, in seconds + ID_LENGTH = 3 # Normal SPI chip ID length, in bytes + ADDRESS_LENGTH = 3 # Normal SPI flash address length (24 bits, aka, 3 bytes) + BLOCK_SIZE = 256 # SPI block size, writes must be done in multiples of this size + PP_PERIOD = .025 # Page program time, in seconds - def __init__(self, speed=FIFTEEN_MHZ): + def __init__(self, speed=FIFTEEN_MHZ): - # Sanity check on the specified clock speed - if not speed: - speed = FIFTEEN_MHZ + # Sanity check on the specified clock speed + if not speed: + speed = FIFTEEN_MHZ - self.flash = MPSSE(SPI0, speed, MSB) - self.chip = self.flash.GetDescription() - self.speed = self.flash.GetClock() - self._init_gpio() + self.flash = MPSSE(SPI0, speed, MSB) + self.chip = self.flash.GetDescription() + self.speed = self.flash.GetClock() + self._init_gpio() - def _init_gpio(self): - # Set the GPIOL0 and GPIOL1 pins high for connection to SPI flash WP and HOLD pins. - self.flash.PinHigh(GPIOL0) - self.flash.PinHigh(GPIOL1) + def _init_gpio(self): + # Set the GPIOL0 and GPIOL1 pins high for connection to SPI flash WP and HOLD pins. + self.flash.PinHigh(GPIOL0) + self.flash.PinHigh(GPIOL1) - def _addr2str(self, address): - addr_str = "" + def _addr2str(self, address): + addr_str = "" - for i in range(0, self.ADDRESS_LENGTH): - addr_str += chr((address >> (i*8)) & 0xFF) + for i in range(0, self.ADDRESS_LENGTH): + addr_str += chr((address >> (i*8)) & 0xFF) - return addr_str[::-1] + return addr_str[::-1] - def Read(self, count, address=0): - data = '' + def Read(self, count, address=0): + data = '' - self.flash.Start() - self.flash.Write(self.RCMD + self._addr2str(address)) - data = self.flash.Read(count) - self.flash.Stop() + self.flash.Start() + self.flash.Write(self.RCMD + self._addr2str(address)) + data = self.flash.Read(count) + self.flash.Stop() - return data + return data - def Write(self, data, address=0): - count = 0 + def Write(self, data, address=0): + count = 0 - while count < len(data): + while count < len(data): - self.flash.Start() - self.flash.Write(self.WECMD) - self.flash.Stop() + self.flash.Start() + self.flash.Write(self.WECMD) + self.flash.Stop() - self.flash.Start() - self.flash.Write(self.WCMD + self._addr2str(address) + data[address:address+self.BLOCK_SIZE]) - self.flash.Stop() + self.flash.Start() + self.flash.Write(self.WCMD + self._addr2str(address) + data[address:address+self.BLOCK_SIZE]) + self.flash.Stop() - sleep(self.PP_PERIOD) - address += self.BLOCK_SIZE - count += self.BLOCK_SIZE + sleep(self.PP_PERIOD) + address += self.BLOCK_SIZE + count += self.BLOCK_SIZE - def Erase(self): - self.flash.Start() - self.flash.Write(self.WECMD) - self.flash.Stop() + def Erase(self): + self.flash.Start() + self.flash.Write(self.WECMD) + self.flash.Stop() - self.flash.Start() - self.flash.Write(self.CECMD) - self.flash.Stop() + self.flash.Start() + self.flash.Write(self.CECMD) + self.flash.Stop() - def ChipID(self): - self.flash.Start() - self.flash.Write(self.IDCMD) - chipid = self.flash.Read(self.ID_LENGTH) - self.flash.Stop() - return chipid + def ChipID(self): + self.flash.Start() + self.flash.Write(self.IDCMD) + chipid = self.flash.Read(self.ID_LENGTH) + self.flash.Stop() + return chipid - def Close(self): - self.flash.Close() + def Close(self): + self.flash.Close() if __name__ == "__main__": - import sys - from getopt import getopt as GetOpt, GetoptError + import sys + from getopt import getopt as GetOpt, GetoptError - def pin_mappings(): - print """ + def pin_mappings(): + print """ Common Pin Mappings for 8-pin SPI Flash Chips -------------------------------------------------------------------- | Description | SPI Flash Pin | FTDI Pin | C232HM Cable Color Code | @@ -108,127 +108,127 @@ def pin_mappings(): | Vcc | 8 | N/A | Red | -------------------------------------------------------------------- """ - sys.exit(0) - - def usage(): - print "" - print "Usage: %s [OPTIONS]" % sys.argv[0] - print "" - print "\t-r, --read= Read data from the chip to file" - print "\t-w, --write= Write data from file to the chip" - print "\t-s, --size= Set the size of data to read/write" - print "\t-a, --address= Set the starting address for the read/write operation [0]" - print "\t-f, --frequency= Set the SPI clock frequency, in hertz [15,000,000]" - print "\t-i, --id Read the chip ID" - print "\t-v, --verify Verify data that has been read/written" - print "\t-e, --erase Erase the entire chip" - print "\t-p, --pin-mappings Display a table of SPI flash to FTDI pin mappings" - print "\t-h, --help Show help" - print "" - - sys.exit(1) - - def main(): - fname = None - freq = None - action = None - verify = False - address = 0 - size = 0 - data = "" - - try: - opts, args = GetOpt(sys.argv[1:], "f:s:a:r:w:eipvh", ["frequency=", "size=", "address=", "read=", "write=", "id", "erase", "verify", "pin-mappings", "help"]) - except GetoptError, e: - print e - usage() - - for opt, arg in opts: - if opt in ('-f', '--frequency'): - freq = int(arg) - elif opt in ('-s', '--size'): - size = int(arg) - elif opt in ('-a', '--address'): - address = int(arg) - elif opt in ('-r', '--read'): - action = "read" - fname = arg - elif opt in ('-w', '--write'): - action = "write" - fname = arg - elif opt in ('-i', '--id'): - action = "id" - elif opt in ('-e', '--erase'): - action = "erase" - elif opt in ('-v', '--verify'): - verify = True - elif opt in ('-h', '--help'): - usage() - elif opt in ('-p', '--pin-mappings'): - pin_mappings() - - if action is None: - print "Please specify an action!" - usage() - - spi = SPIFlash(freq) - print "%s initialized at %d hertz" % (spi.chip, spi.speed) - - if action == "read": - if fname is None or not size: - print "Please specify an output file and read size!" - usage() - - sys.stdout.write("Reading %d bytes starting at address 0x%X..." % (size, address)) - sys.stdout.flush() - data = spi.Read(size, address) - open(fname, 'wb').write(data) - print "saved to %s." % fname - - elif action == "write": - if fname is None: - print "Please specify an input file!" - usage() - - data = open(fname, 'rb').read() - if not size: - size = len(data) - - sys.stdout.write("Writing %d bytes from %s to the chip starting at address 0x%X..." % (size, fname, address)) - sys.stdout.flush() - spi.Write(data[0:size], address) - print "done." - - elif action == "id": - - for byte in spi.ChipID(): - print ("%.2X" % ord(byte)), - print "" - - elif action == "erase": - - data = "\xFF" * size - sys.stdout.write("Erasing entire chip...") - sys.stdout.flush() - spi.Erase() - print "done." - - if verify and data: - sys.stdout.write("Verifying...") - sys.stdout.flush() - - vdata = spi.Read(size, address) - if vdata == data: - if data == ("\xFF" * size): - print "chip is blank." - elif data == ("\x00" * size): - print "read all 0x00's." - else: - print "reads are identical, verification successful." - else: - print "reads are not identical, verification failed." - - spi.Close() - - main() + sys.exit(0) + + def usage(): + print "" + print "Usage: %s [OPTIONS]" % sys.argv[0] + print "" + print "\t-r, --read= Read data from the chip to file" + print "\t-w, --write= Write data from file to the chip" + print "\t-s, --size= Set the size of data to read/write" + print "\t-a, --address= Set the starting address for the read/write operation [0]" + print "\t-f, --frequency= Set the SPI clock frequency, in hertz [15,000,000]" + print "\t-i, --id Read the chip ID" + print "\t-v, --verify Verify data that has been read/written" + print "\t-e, --erase Erase the entire chip" + print "\t-p, --pin-mappings Display a table of SPI flash to FTDI pin mappings" + print "\t-h, --help Show help" + print "" + + sys.exit(1) + + def main(): + fname = None + freq = None + action = None + verify = False + address = 0 + size = 0 + data = "" + + try: + opts, args = GetOpt(sys.argv[1:], "f:s:a:r:w:eipvh", ["frequency=", "size=", "address=", "read=", "write=", "id", "erase", "verify", "pin-mappings", "help"]) + except GetoptError, e: + print e + usage() + + for opt, arg in opts: + if opt in ('-f', '--frequency'): + freq = int(arg) + elif opt in ('-s', '--size'): + size = int(arg) + elif opt in ('-a', '--address'): + address = int(arg) + elif opt in ('-r', '--read'): + action = "read" + fname = arg + elif opt in ('-w', '--write'): + action = "write" + fname = arg + elif opt in ('-i', '--id'): + action = "id" + elif opt in ('-e', '--erase'): + action = "erase" + elif opt in ('-v', '--verify'): + verify = True + elif opt in ('-h', '--help'): + usage() + elif opt in ('-p', '--pin-mappings'): + pin_mappings() + + if action is None: + print "Please specify an action!" + usage() + + spi = SPIFlash(freq) + print "%s initialized at %d hertz" % (spi.chip, spi.speed) + + if action == "read": + if fname is None or not size: + print "Please specify an output file and read size!" + usage() + + sys.stdout.write("Reading %d bytes starting at address 0x%X..." % (size, address)) + sys.stdout.flush() + data = spi.Read(size, address) + open(fname, 'wb').write(data) + print "saved to %s." % fname + + elif action == "write": + if fname is None: + print "Please specify an input file!" + usage() + + data = open(fname, 'rb').read() + if not size: + size = len(data) + + sys.stdout.write("Writing %d bytes from %s to the chip starting at address 0x%X..." % (size, fname, address)) + sys.stdout.flush() + spi.Write(data[0:size], address) + print "done." + + elif action == "id": + + for byte in spi.ChipID(): + print ("%.2X" % ord(byte)), + print "" + + elif action == "erase": + + data = "\xFF" * size + sys.stdout.write("Erasing entire chip...") + sys.stdout.flush() + spi.Erase() + print "done." + + if verify and data: + sys.stdout.write("Verifying...") + sys.stdout.flush() + + vdata = spi.Read(size, address) + if vdata == data: + if data == ("\xFF" * size): + print "chip is blank." + elif data == ("\x00" * size): + print "read all 0x00's." + else: + print "reads are identical, verification successful." + else: + print "reads are not identical, verification failed." + + spi.Close() + + main() diff --git a/src/examples/spiflashfast.c b/src/examples/spiflashfast.c index 271d655..958c8a8 100644 --- a/src/examples/spiflashfast.c +++ b/src/examples/spiflashfast.c @@ -2,7 +2,7 @@ * Example code of using the low-latency FastRead and FastWrite functions (SPI and C only). * Contrast to spiflash.c. */ - +#include "config.h" #include #include #include diff --git a/src/fast.c b/src/fast.c index 8cf66b0..ee7ce39 100644 --- a/src/fast.c +++ b/src/fast.c @@ -7,14 +7,17 @@ */ #include +#include "config.h" #include "mpsse.h" #include "support.h" +unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE]; + /* Builds a block buffer for the Fast* functions. For internal use only. */ -int fast_build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, unsigned char *data, int size, int *buf_size) +static int fast_build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, unsigned char *data, size_t size, int *buf_size) { - int i = 0; - uint16_t rsize = 0; + int i = 0; + uint16_t rsize = 0; *buf_size = 0; @@ -27,7 +30,7 @@ int fast_build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, unsigned c fast_rw_buf[i++] = ((rsize >> 8) & 0xFF); /* On a write, copy the data to transmit after the command */ - if((cmd == mpsse->tx || cmd == mpsse->txrx) && (i + size) <= sizeof(fast_rw_buf)) + if((cmd == mpsse->tx || cmd == mpsse->txrx) && (i + size) <= sizeof(fast_rw_buf) && data != NULL) { memcpy(fast_rw_buf+i, data, size); @@ -49,9 +52,10 @@ int fast_build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, unsigned c * * Returns MPSSE_OK on success, MPSSE_FAIL on failure. */ -int FastWrite(struct mpsse_context *mpsse, char *data, int size) +int FastWrite(struct mpsse_context *mpsse, const char *data, size_t size) { - int buf_size = 0, txsize = 0, n = 0; + int buf_size = 0, txsize = 0; + size_t n = 0; if(is_valid_context(mpsse)) { @@ -64,9 +68,9 @@ int FastWrite(struct mpsse_context *mpsse, char *data, int size) { txsize = mpsse->xsize; } - + if(fast_build_block_buffer(mpsse, mpsse->tx, (unsigned char *) (data + n), txsize, &buf_size) == MPSSE_OK) - { + { if(raw_write(mpsse, fast_rw_buf, buf_size) == MPSSE_OK) { n += txsize; @@ -90,7 +94,7 @@ int FastWrite(struct mpsse_context *mpsse, char *data, int size) } } } - + return MPSSE_FAIL; } @@ -103,9 +107,10 @@ int FastWrite(struct mpsse_context *mpsse, char *data, int size) * * Returns MPSSE_OK on success, MPSSE_FAIL on failure. */ -int FastRead(struct mpsse_context *mpsse, char *data, int size) +int FastRead(struct mpsse_context *mpsse, char *data, size_t size) { - int n = 0, rxsize = 0, data_size = 0; + int rxsize = 0, data_size = 0; + size_t n = 0; if(is_valid_context(mpsse)) { @@ -144,11 +149,11 @@ int FastRead(struct mpsse_context *mpsse, char *data, int size) } } } - + return MPSSE_FAIL; } -/* +/* * Function to perform fast transfers in MPSSE. * * @mpsse - libmpsse context pointer. @@ -158,9 +163,10 @@ int FastRead(struct mpsse_context *mpsse, char *data, int size) * * Returns MPSSE_OK on success, MPSSE_FAIL on failure. */ -int FastTransfer(struct mpsse_context *mpsse, char *wdata, char *rdata, int size) +int FastTransfer(struct mpsse_context *mpsse, const char *wdata, char *rdata, size_t size) { - int n = 0, data_size = 0, rxsize = 0; + int data_size = 0, rxsize = 0; + size_t n = 0; if(is_valid_context(mpsse)) { @@ -175,7 +181,7 @@ int FastTransfer(struct mpsse_context *mpsse, char *wdata, char *rdata, int size rxsize = SPI_TRANSFER_SIZE; } - if(build_block_buffer(mpsse, mpsse->txrx, (unsigned char *) (wdata + n), rxsize, &data_size) == MPSSE_OK) + if(fast_build_block_buffer(mpsse, mpsse->txrx, (unsigned char *) (wdata + n), rxsize, &data_size) == MPSSE_OK) { if(raw_write(mpsse, fast_rw_buf, data_size) == MPSSE_OK) { @@ -203,5 +209,3 @@ int FastTransfer(struct mpsse_context *mpsse, char *wdata, char *rdata, int size return MPSSE_FAIL; } - - diff --git a/src/mpsse.c b/src/mpsse.c index 456b51b..4721bc1 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -8,22 +8,16 @@ #include #include #include -#include - -#if LIBFTDI1 == 1 -#include -#else -#include -#endif +#include +#include "config.h" #include "mpsse.h" #include "support.h" -#include "config.h" /* List of known FT2232-based devices */ -struct vid_pid supported_devices[] = { - { 0x0403, 0x6010, "FT2232 Future Technology Devices International, Ltd" }, - { 0x0403, 0x6011, "FT4232 Future Technology Devices International, Ltd" }, +struct vid_pid mpsse_supported_devices[] = { + { 0x0403, 0x6010, "FT2232 Future Technology Devices International, Ltd" }, + { 0x0403, 0x6011, "FT4232 Future Technology Devices International, Ltd" }, { 0x0403, 0x6014, "FT232H Future Technology Devices International, Ltd" }, /* These devices are based on FT2232 chips, but have not been tested. */ @@ -31,7 +25,7 @@ struct vid_pid supported_devices[] = { { 0x0403, 0x8879, "Bus Blaster v2 (channel B)" }, { 0x0403, 0xBDC8, "Turtelizer JTAG/RS232 Adapter A" }, { 0x0403, 0xCFF8, "Amontec JTAGkey" }, - { 0x0403, 0x8A98, "TIAO Multi Protocol Adapter"}, + { 0x0403, 0x8A98, "TIAO Multi Protocol Adapter"}, { 0x15BA, 0x0003, "Olimex Ltd. OpenOCD JTAG" }, { 0x15BA, 0x0004, "Olimex Ltd. OpenOCD JTAG TINY" }, @@ -40,12 +34,12 @@ struct vid_pid supported_devices[] = { /* * Opens and initializes the first FTDI device found. - * + * * @mode - Mode to open the device in. One of enum modes. * @freq - Clock frequency to use for the specified mode. * @endianess - Specifies how data is clocked in/out (MSB, LSB). * - * Returns a pointer to an MPSSE context structure. + * Returns a pointer to an MPSSE context structure. * On success, mpsse->open will be set to 1. * On failure, mpsse->open will be set to 0. */ @@ -54,17 +48,17 @@ struct mpsse_context *MPSSE(enum modes mode, int freq, int endianess) int i = 0; struct mpsse_context *mpsse = NULL; - for(i=0; supported_devices[i].vid != 0; i++) + for(i=0; mpsse_supported_devices[i].vid != 0; i++) { - if((mpsse = Open(supported_devices[i].vid, supported_devices[i].pid, mode, freq, endianess, IFACE_A, NULL, NULL)) != NULL) + if((mpsse = Open(mpsse_supported_devices[i].vid, mpsse_supported_devices[i].pid, mode, freq, endianess, IFACE_A, NULL, NULL)) != NULL) { if(mpsse->open) { - mpsse->description = supported_devices[i].description; + mpsse->description = mpsse_supported_devices[i].description; break; } /* If there is another device still left to try, free the context pointer and try again */ - else if(supported_devices[i+1].vid != 0) + else if(mpsse_supported_devices[i+1].vid != 0) { Close(mpsse); mpsse = NULL; @@ -75,7 +69,16 @@ struct mpsse_context *MPSSE(enum modes mode, int freq, int endianess) return mpsse; } -/* +static struct mpsse_context *OpenIndexInternal(int vid, int pid, enum modes mode, int freq, + int endianess, int interface, const char *description, const char *serial, int index, + unsigned usbBus, unsigned usbAddress); + +struct mpsse_context *OpenUsbDev(enum modes mode, unsigned bus, unsigned address) +{ + return OpenIndexInternal(0, 0, mode, 0, 0, IFACE_A, NULL, NULL, 0, bus, address); +} + +/* * Open device by VID/PID * * @vid - Device vendor ID. @@ -87,7 +90,7 @@ struct mpsse_context *MPSSE(enum modes mode, int freq, int endianess) * @description - Device product description (set to NULL if not needed). * @serial - Device serial number (set to NULL if not needed). * - * Returns a pointer to an MPSSE context structure. + * Returns a pointer to an MPSSE context structure. * On success, mpsse->open will be set to 1. * On failure, mpsse->open will be set to 0. */ @@ -96,7 +99,7 @@ struct mpsse_context *Open(int vid, int pid, enum modes mode, int freq, int endi return OpenIndex(vid, pid, mode, freq, endianess, interface, description, serial, 0); } -/* +/* * Open device by VID/PID/index * * @vid - Device vendor ID. @@ -109,11 +112,19 @@ struct mpsse_context *Open(int vid, int pid, enum modes mode, int freq, int endi * @serial - Device serial number (set to NULL if not needed). * @index - Device index (set to 0 if not needed). * - * Returns a pointer to an MPSSE context structure. + * Returns a pointer to an MPSSE context structure. * On success, mpsse->open will be set to 1. * On failure, mpsse->open will be set to 0. */ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int endianess, int interface, const char *description, const char *serial, int index) +{ + return OpenIndexInternal(vid, pid, mode, freq, endianess, interface, description, serial, index, + 0, 0); +} + +static struct mpsse_context *OpenIndexInternal(int vid, int pid, enum modes mode, int freq, + int endianess, int interface, const char *description, const char *serial, int index, + unsigned usbBus, unsigned usbAddress) { int status = 0; struct mpsse_context *mpsse = NULL; @@ -124,7 +135,7 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int memset(mpsse, 0, sizeof(struct mpsse_context)); /* Legacy; flushing is no longer needed, so disable it by default. */ - FlushAfterRead(mpsse, 0); + FlushAfterRead(mpsse, 1); /* ftdilib initialization */ if(ftdi_init(&mpsse->ftdi) == 0) @@ -132,8 +143,21 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int /* Set the FTDI interface */ ftdi_set_interface(&mpsse->ftdi, interface); + int res = -1; + + if (usbBus != 0 && usbAddress != 0) + { +#if HAVE_LIBFTDI1_5 + res = ftdi_usb_open_bus_addr(&mpsse->ftdi, usbBus, usbAddress); +#endif + } + else + { + res = ftdi_usb_open_desc_index(&mpsse->ftdi, vid, pid, description, serial, index); + } + /* Open the specified device */ - if(ftdi_usb_open_desc_index(&mpsse->ftdi, vid, pid, description, serial, index) == 0) + if(res == 0) { mpsse->mode = mode; mpsse->vid = vid; @@ -150,7 +174,7 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int { mpsse->xsize = SPI_RW_SIZE; } - + status |= ftdi_usb_reset(&mpsse->ftdi); status |= ftdi_set_latency_timer(&mpsse->ftdi, LATENCY_MS); status |= ftdi_write_data_set_chunksize(&mpsse->ftdi, CHUNK_SIZE); @@ -161,7 +185,7 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int { /* Set the read and write timeout periods */ set_timeouts(mpsse, USB_TIMEOUT); - + if(mpsse->mode != BITBANG) { ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_MPSSE); @@ -173,13 +197,16 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int mpsse->open = 1; /* Give the chip a few mS to initialize */ - usleep(SETUP_DELAY); + struct timespec setup_delay; + setup_delay.tv_sec = 0; + setup_delay.tv_nsec = SETUP_DELAY * 1000; + nanosleep(&setup_delay, NULL); - /* + /* * Not all FTDI chips support all the commands that SetMode may have sent. - * This clears out any errors from unsupported commands that might have been sent during set up. + * This clears out any errors from unsupported commands that might have been sent during set up. */ - ftdi_usb_purge_buffers(&mpsse->ftdi); + ftdi_tcioflush(&mpsse->ftdi); } } } @@ -199,7 +226,7 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int return mpsse; } -/* +/* * Closes the device, deinitializes libftdi, and frees the MPSSE context pointer. * * @mpsse - MPSSE context pointer. @@ -210,12 +237,9 @@ void Close(struct mpsse_context *mpsse) { if(mpsse) { - if(mpsse->open) - { - ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_RESET); - ftdi_usb_close(&mpsse->ftdi); - ftdi_deinit(&mpsse->ftdi); - } + ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_RESET); + ftdi_usb_close(&mpsse->ftdi); + ftdi_deinit(&mpsse->ftdi); free(mpsse); mpsse = NULL; @@ -365,32 +389,32 @@ int SetMode(struct mpsse_context *mpsse, int endianess) { retval = raw_write(mpsse, setup_commands, setup_commands_size); } - + if(retval == MPSSE_OK) { /* Set the idle pin states */ set_bits_low(mpsse, mpsse->pidle); - + /* All GPIO pins are outputs, set low */ mpsse->trish = 0xFF; mpsse->gpioh = 0x00; - + buf[i++] = SET_BITS_HIGH; buf[i++] = mpsse->gpioh; buf[i++] = mpsse->trish; - + retval = raw_write(mpsse, buf, i); } } else { retval = MPSSE_FAIL; - } + } return retval; } -/* +/* * Sets the appropriate divisor for the desired clock frequency. * * @mpsse - MPSSE context pointer. @@ -419,7 +443,7 @@ int SetClock(struct mpsse_context *mpsse, uint32_t freq) buf[0] = TCK_D5; system_clock = TWELVE_MHZ; } - + if(raw_write(mpsse, buf, 1) == MPSSE_OK) { if(freq <= 0) @@ -430,11 +454,11 @@ int SetClock(struct mpsse_context *mpsse, uint32_t freq) { divisor = freq2div(system_clock, freq); } - + buf[0] = TCK_DIVISOR; buf[1] = (divisor & 0xFF); buf[2] = ((divisor >> 8) & 0xFF); - + if(raw_write(mpsse, buf, 3) == MPSSE_OK) { mpsse->clock = div2freq(system_clock, divisor); @@ -442,11 +466,11 @@ int SetClock(struct mpsse_context *mpsse, uint32_t freq) } } } - + return retval; } -/* +/* * Retrieves the last error string from libftdi. * * @mpsse - MPSSE context pointer. @@ -463,7 +487,7 @@ const char *ErrorString(struct mpsse_context *mpsse) return NULL_CONTEXT_ERROR_MSG; } -/* +/* * Gets the currently configured clock rate. * * @mpsse - MPSSE context pointer. @@ -484,7 +508,7 @@ int GetClock(struct mpsse_context *mpsse) /* * Returns the vendor ID of the FTDI chip. - * + * * @mpsse - MPSSE context pointer. * * Returns the integer value of the vendor ID. @@ -530,7 +554,7 @@ int GetPid(struct mpsse_context *mpsse) const char *GetDescription(struct mpsse_context *mpsse) { char *description = NULL; - + if(is_valid_context(mpsse)) { description = mpsse->description; @@ -539,9 +563,9 @@ const char *GetDescription(struct mpsse_context *mpsse) return description; } -/* +/* * Enable / disable internal loopback. - * + * * @mpsse - MPSSE context pointer. * @enable - Zero to disable loopback, 1 to enable loopback. * @@ -601,7 +625,7 @@ void SetCSIdle(struct mpsse_context *mpsse, int idle) return; } -/* +/* * Enables or disables flushing of the FTDI chip's RX buffers after each read operation. * Flushing is disable by default. * @@ -635,17 +659,18 @@ int Start(struct mpsse_context *mpsse) { /* Set the default pin states while the clock is low since this is an I2C repeated start condition */ status |= set_bits_low(mpsse, (mpsse->pidle & ~SK)); - + /* Make sure the pins are in their default idle state */ status |= set_bits_low(mpsse, mpsse->pidle); } /* Set the start condition */ status |= set_bits_low(mpsse, mpsse->pstart); + status |= set_bits_low(mpsse, mpsse->pstart & ~SK); - /* + /* * Hackish work around to properly support SPI mode 3. - * SPI3 clock idles high, but needs to be set low before sending out + * SPI3 clock idles high, but needs to be set low before sending out * data to prevent unintenteded clock glitches from the FT2232. */ if(mpsse->mode == SPI3) @@ -661,7 +686,7 @@ int Start(struct mpsse_context *mpsse) { status |= set_bits_low(mpsse, (mpsse->pstart | SK)); } - + mpsse->status = STARTED; } else @@ -673,7 +698,7 @@ int Start(struct mpsse_context *mpsse) return status; } -/* +/* * Performs a bit-wise write of up to 8 bits at a time. * * @mpsse - MPSSE context pointer. @@ -682,10 +707,10 @@ int Start(struct mpsse_context *mpsse) * * Returns MPSSE_OK on success, MPSSE_FAIL on failure. */ -int WriteBits(struct mpsse_context *mpsse, char bits, int size) +int WriteBits(struct mpsse_context *mpsse, char bits, size_t size) { char data[8] = { 0 }; - int i = 0, retval = MPSSE_OK; + int retval = MPSSE_OK; if(size > sizeof(data)) { @@ -693,7 +718,7 @@ int WriteBits(struct mpsse_context *mpsse, char bits, int size) } /* Convert each bit in bits to an array of bytes */ - for(i=0; ixsize; } - - /* - * For I2C we need to send each byte individually so that we can + + /* + * For I2C we need to send each byte individually so that we can * read back each individual ACK bit, so set the transmit size to 1. */ if(mpsse->mode == I2C) { txsize = 1; } - - buf = build_block_buffer(mpsse, mpsse->tx, (unsigned char *) (data + n), txsize, &buf_size); + + buf = build_block_buffer(mpsse, mpsse->tx, (const unsigned char *)data + n, txsize, &buf_size); if(buf) - { + { retval = raw_write(mpsse, buf, buf_size); n += txsize; free(buf); - + if(retval == MPSSE_FAIL) { break; } - + /* Read in the ACK bit and store it in mpsse->rack */ if(mpsse->mode == I2C) { - raw_read(mpsse, (unsigned char *) &mpsse->rack, 1); + if (raw_read(mpsse, (unsigned char *) &mpsse->rack, 1) != 1) { + retval = MPSSE_FAIL; + break; + } } } else @@ -777,22 +806,24 @@ int Write(struct mpsse_context *mpsse, char *data, int size) } } } - + if(retval == MPSSE_OK && n == size) { retval = MPSSE_OK; } } - + return retval; } /* Performs a read. For internal use only; see Read() and ReadBits(). */ -char *InternalRead(struct mpsse_context *mpsse, int size) +char *InternalRead(struct mpsse_context *mpsse, size_t size) { unsigned char *data = NULL, *buf = NULL; unsigned char sbuf[SPI_RW_SIZE] = { 0 }; - int n = 0, rxsize = 0, data_size = 0, retval = 0; + size_t n = 0; + int rxsize = 0, data_size = 0, retval = 0; + int cnt; if(is_valid_context(mpsse)) { @@ -802,7 +833,7 @@ char *InternalRead(struct mpsse_context *mpsse, int size) if(buf) { memset(buf, 0, size); - + while(n < size) { rxsize = size - n; @@ -810,24 +841,35 @@ char *InternalRead(struct mpsse_context *mpsse, int size) { rxsize = mpsse->xsize; } - + data = build_block_buffer(mpsse, mpsse->rx, sbuf, rxsize, &data_size); if(data) { retval = raw_write(mpsse, data, data_size); free(data); - + if(retval == MPSSE_OK) { - n += raw_read(mpsse, buf+n, rxsize); + cnt = raw_read(mpsse, buf + n, rxsize); + if (cnt > 0) + n += cnt; + else { + free(buf); + buf = NULL; + break; + } } else { + free(buf); + buf = NULL; break; } } else { + free(buf); + buf = NULL; break; } } @@ -840,7 +882,7 @@ char *InternalRead(struct mpsse_context *mpsse, int size) /* * Reads data over the selected serial protocol. - * + * * @mpsse - MPSSE context pointer. * @size - Number of bytes to read. * @@ -848,9 +890,9 @@ char *InternalRead(struct mpsse_context *mpsse, int size) * Returns NULL on failure. */ #ifdef SWIGPYTHON -swig_string_data Read(struct mpsse_context *mpsse, int size) +swig_string_data Read(struct mpsse_context *mpsse, size_t size) #else -char *Read(struct mpsse_context *mpsse, int size) +char *Read(struct mpsse_context *mpsse, size_t size) #endif { char *buf = NULL; @@ -867,7 +909,7 @@ char *Read(struct mpsse_context *mpsse, int size) #endif } -/* +/* * Performs a bit-wise read of up to 8 bits. * * @mpsse - MPSSE context pointer. @@ -875,7 +917,7 @@ char *Read(struct mpsse_context *mpsse, int size) * * Returns an 8-bit byte containing the read bits. */ -char ReadBits(struct mpsse_context *mpsse, int size) +char ReadBits(struct mpsse_context *mpsse, size_t size) { char bits = 0; char *rdata = NULL; @@ -904,13 +946,13 @@ char ReadBits(struct mpsse_context *mpsse, int size) } else if(mpsse->endianess == LSB) { - /* + /* * In LSB mode, bits are shifted in from the right. If less than 8 bits were * read, we need to shift them right accordingly. */ bits = bits >> (8-size); } - + free(rdata); } @@ -919,7 +961,7 @@ char ReadBits(struct mpsse_context *mpsse, int size) /* * Reads and writes data over the selected serial protocol (SPI only). - * + * * @mpsse - MPSSE context pointer. * @data - Buffer containing bytes to write. * @size - Number of bytes to transfer. @@ -928,13 +970,15 @@ char ReadBits(struct mpsse_context *mpsse, int size) * Returns NULL on failure. */ #ifdef SWIGPYTHON -swig_string_data Transfer(struct mpsse_context *mpsse, char *data, int size) +swig_string_data Transfer(struct mpsse_context *mpsse, const char *data, size_t size) #else -char *Transfer(struct mpsse_context *mpsse, char *data, int size) +char *Transfer(struct mpsse_context *mpsse, const char *data, size_t size) #endif { unsigned char *txdata = NULL, *buf = NULL; - int n = 0, data_size = 0, rxsize = 0, retval = 0; + size_t n = 0; + int data_size = 0, rxsize = 0, retval = 0; + int cnt; if(is_valid_context(mpsse)) { @@ -963,15 +1007,26 @@ char *Transfer(struct mpsse_context *mpsse, char *data, int size) if(retval == MPSSE_OK) { - n += raw_read(mpsse, (buf + n), rxsize); + cnt = raw_read(mpsse, buf + n, rxsize); + if (cnt > 0) + n += cnt; + else { + free(buf); + buf = NULL; + break; + } } else { + free(buf); + buf = NULL; break; } } else { + free(buf); + buf = NULL; break; } } @@ -997,7 +1052,7 @@ char *Transfer(struct mpsse_context *mpsse, char *data, int size) * Returns either an ACK (0) or a NACK (1). */ int GetAck(struct mpsse_context *mpsse) -{ +{ int ack = 0; if(is_valid_context(mpsse)) @@ -1085,7 +1140,7 @@ int Stop(struct mpsse_context *mpsse) /* Restore the pins to their idle states */ retval |= set_bits_low(mpsse, mpsse->pidle); } - + mpsse->status = STOPPED; } else @@ -1097,12 +1152,12 @@ int Stop(struct mpsse_context *mpsse) return retval; } -/* - * Sets the specified pin high. +/* + * Sets the specified pin high. * * @mpsse - MPSSE context pointer. * @pin - Pin number to set high. - * + * * Returns MPSSE_OK on success. * Returns MPSSE_FAIL on failure. */ @@ -1130,7 +1185,7 @@ int PinHigh(struct mpsse_context *mpsse, int pin) int PinLow(struct mpsse_context *mpsse, int pin) { int retval = MPSSE_FAIL; - + if(is_valid_context(mpsse)) { retval = gpio_write(mpsse, pin, LOW); @@ -1187,7 +1242,7 @@ int WritePins(struct mpsse_context *mpsse, uint8_t data) } } } - + return retval; } @@ -1255,8 +1310,8 @@ int Tristate(struct mpsse_context *mpsse) return raw_write(mpsse, cmd, sizeof(cmd)); } -/* - * Returns the libmpsse version number. +/* + * Returns the libmpsse version number. * High nibble is major version, low nibble is minor version. */ char Version(void) @@ -1275,7 +1330,7 @@ char Version(void) } major = atoi(version_string); - + free(version_string); } diff --git a/src/mpsse.h b/src/mpsse.h index 4a00eed..3af1201 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -1,9 +1,13 @@ -#ifndef _LIBMPSSE_H_ +#ifndef _LIBMPSSE_H_ #define _LIBMPSSE_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include -#if LIBFTDI1 == 1 +#if HAVE_LIBFTDI1 == 1 #include #else #include @@ -16,7 +20,7 @@ #define LSB 0x08 #define CHUNK_SIZE 65535 -#define SPI_RW_SIZE (63 * 1024) +#define SPI_RW_SIZE (63 * 1024) #define SPI_TRANSFER_SIZE 512 #define I2C_TRANSFER_SIZE 64 @@ -174,6 +178,7 @@ struct mpsse_context struct mpsse_context *MPSSE(enum modes mode, int freq, int endianess); struct mpsse_context *Open(int vid, int pid, enum modes mode, int freq, int endianess, int interface, const char *description, const char *serial); +struct mpsse_context *OpenUsbDev(enum modes mode, unsigned bus, unsigned address); struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int endianess, int interface, const char *description, const char *serial, int index); void Close(struct mpsse_context *mpsse); const char *ErrorString(struct mpsse_context *mpsse); @@ -187,7 +192,7 @@ const char *GetDescription(struct mpsse_context *mpsse); int SetLoopback(struct mpsse_context *mpsse, int enable); void SetCSIdle(struct mpsse_context *mpsse, int idle); int Start(struct mpsse_context *mpsse); -int Write(struct mpsse_context *mpsse, char *data, int size); +int Write(struct mpsse_context *mpsse, const char *data, size_t size); int Stop(struct mpsse_context *mpsse); int GetAck(struct mpsse_context *mpsse); void SetAck(struct mpsse_context *mpsse, int ack); @@ -197,8 +202,8 @@ void FlushAfterRead(struct mpsse_context *mpsse, int tf); int PinHigh(struct mpsse_context *mpsse, int pin); int PinLow(struct mpsse_context *mpsse, int pin); int SetDirection(struct mpsse_context *mpsse, uint8_t direction); -int WriteBits(struct mpsse_context *mpsse, char bits, int size); -char ReadBits(struct mpsse_context *mpsse, int size); +int WriteBits(struct mpsse_context *mpsse, char bits, size_t size); +char ReadBits(struct mpsse_context *mpsse, size_t size); int WritePins(struct mpsse_context *mpsse, uint8_t data); int ReadPins(struct mpsse_context *mpsse); int PinState(struct mpsse_context *mpsse, int pin, int state); @@ -212,17 +217,22 @@ typedef struct swig_string_data char *data; } swig_string_data; -swig_string_data Read(struct mpsse_context *mpsse, int size); -swig_string_data Transfer(struct mpsse_context *mpsse, char *data, int size); +swig_string_data Read(struct mpsse_context *mpsse, size_t size); +swig_string_data Transfer(struct mpsse_context *mpsse, const char *data, size_t size); #else -char *Read(struct mpsse_context *mpsse, int size); -char *Transfer(struct mpsse_context *mpsse, char *data, int size); +char *Read(struct mpsse_context *mpsse, size_t size); +char *Transfer(struct mpsse_context *mpsse, const char *data, size_t size); -unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE]; -int FastWrite(struct mpsse_context *mpsse, char *data, int size); -int FastRead(struct mpsse_context *mpsse, char *data, int size); -int FastTransfer(struct mpsse_context *mpsse, char *wdata, char *rdata, int size); +extern struct vid_pid mpsse_supported_devices[]; + +extern unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE]; +int FastWrite(struct mpsse_context *mpsse, const char *data, size_t size); +int FastRead(struct mpsse_context *mpsse, char *data, size_t size); +int FastTransfer(struct mpsse_context *mpsse, const char *wdata, char *rdata, size_t size); #endif +#ifdef __cplusplus +} +#endif #endif diff --git a/src/mpsse.i b/src/mpsse.i index 976a583..bc34e49 100644 --- a/src/mpsse.i +++ b/src/mpsse.i @@ -1,4 +1,5 @@ %module pylibmpsse +%include "stdint.i" %{ #include "mpsse.h" %} @@ -17,7 +18,7 @@ %typemap(out) swig_string_data { - $result = PyString_FromStringAndSize($1.data, $1.size); + $result = PyBytes_FromStringAndSize($1.data, $1.size); free($1.data); } diff --git a/src/mpsse.py b/src/mpsse.py index bc67f8b..e4698f1 100644 --- a/src/mpsse.py +++ b/src/mpsse.py @@ -2,7 +2,7 @@ MPSSE_OK = _mpsse.MPSSE_OK MPSSE_FAIL = _mpsse.MPSSE_FAIL - + MSB = _mpsse.MSB LSB = _mpsse.LSB @@ -48,375 +48,375 @@ THIRTY_MHZ = _mpsse.THIRTY_MHZ class MPSSE(object): - """ - Python class wrapper for libmpsse. - """ + """ + Python class wrapper for libmpsse. + """ - def __init__(self, mode=None, frequency=ONE_HUNDRED_KHZ, endianess=MSB): - """ - Class constructor. + def __init__(self, mode=None, frequency=ONE_HUNDRED_KHZ, endianess=MSB): + """ + Class constructor. - @mode - The MPSSE mode to use, one of: SPI0, SPI1, SPI2, SPI3, I2C, GPIO, BITBANG, None. + @mode - The MPSSE mode to use, one of: SPI0, SPI1, SPI2, SPI3, I2C, GPIO, BITBANG, None. If None, no attempt will be made to connect to the FTDI chip. Use this if you want to call the Open method manually. - @frequency - The frequency to use for the specified serial protocol, in hertz (default: 100KHz). - @endianess - The endianess of data transfers, one of: MSB, LSB (default: MSB). - - Returns None. - """ - self.context = None - if mode is not None: - self.context = _mpsse.MPSSE(mode, frequency, endianess) - if self.context.open == 0: - raise Exception, self.ErrorString() - - def __enter__(self): - return self - - def __exit__(self, t, v, traceback): - if self.context: - self.Close() - - def __del__(self): - if self.context: - self.Close() - - def Open(self, vid, pid, mode, frequency=ONE_HUNDRED_KHZ, endianess=MSB, interface=IFACE_A, description=None, serial=None, index=0): - """ - Opens the specified FTDI device. - Called internally by __init__ if the __init__ mode is not None. - - @vid - FTDI USB vendor ID. - @pid - FTDI USB product ID. - @mode - The MPSSE mode to use, one of: SPI0, SPI1, SPI2, SPI3, I2C, GPIO, BITBANG. - @frequency - The frequency to use for the specified serial protocol, in hertz (default: 100KHz). - @endianess - The endianess of data transfers, one of: MSB, LSB (default: MSB). - @interface - The interface to use on the FTDI chip, one of: IFACE_A, IFACE_B, IFACE_C, IFACE_D, IFACE_ANY (default: IFACE_A). - @description - FTDI device product description (default: None). - @serial - FTDI device serial number (default: None). - @index - Number of matching device to open if there are more than one, starts with zero (default: 0). - - Returns MPSSE_OK on success. - Raises an exeption on failure. - """ - self.context = _mpsse.OpenIndex(vid, pid, mode, frequency, endianess, interface, description, serial, index) - if self.context.open == 0: - raise Exception, self.ErrorString() - return MPSSE_OK - - def Close(self): - """ - Closes the FTDI device connection, deinitializes libftdi, and frees the libmpsse context. - - Returns None. - """ - retval = _mpsse.Close(self.context) - self.context = None - - def ErrorString(self): - """ - Returns the last libftdi error string. - """ - return _mpsse.ErrorString(self.context) - - def SetMode(self, mode, endianess): - """ - Sets the appropriate transmit and receive commands based on the requested mode and byte order. - Called internally by __init__ and Open. - - @mode - The MPSSE mode to use, one of: SPI0, SPI1, SPI2, SPI3, I2C, GPIO, BITBANG. - @endianess - The endianess of data transfers, one of: MSB, LSB. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.SetMode(self.context, mode, endianess) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def EnableBitmode(self, tf): - """ - Enables/disables bitwise data transfers. - Called internally by ReadBits and WriteBites. - - @tf - Set to 1 to enable bitwise transfers, 0 to disable. - - Returns None. - """ - _mpsse.EnableBitmode(self.context, tf) - - def FlushAfterRead(self, tf): - """ - Enables / disables the explicit flushing of the recieve buffer after each read operation. - - @tf - Set to 1 to enable flushing, 0 to disable (disabled by default). - - Returns None. - """ - return _mpsse.FlushAfterRead(self.context, tf) - - def SetClock(self, frequency): - """ - Sets the appropriate divisor for the desired clock frequency. - Called internally by __init__ and Open. - - @frequency - The desired clock frequency, in hertz. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.SetClock(self.context, frequency) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def GetClock(self): - """ - Returns the currently configured clock rate, in hertz. - """ - return _mpsse.GetClock(self.context) - - def GetVid(self): - """ - Returns the vendor ID of the FTDI chip. - """ - return _mpsse.GetVid(self.context) - - def GetPid(self): - """ - Returns the product ID of the FTDI chip. - """ - return _mpsse.GetPid(self.context) - - def GetDescription(self): - """ - Returns the description of the FTDI chip, if any. - This will only be populated if __init__ was used to open the device. - """ - return _mpsse.GetDescription(self.context) - - def SetLoopback(self, enable): - """ - Enable / disable internal loopback. Loopback is disabled by default. - - @enable - Set to 1 to enable loopback, 0 to disable (disabled by default). - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.SetLoopback(self.context, enable) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def SetCSIdle(self, idle): - """ - Sets the idle state of the chip select pin. - - @idle - Set to 1 to idle high, 0 to idle low (CS idles high by default). - - Returns None. - """ - _mpsse.SetCSIdle(self.context, idle) - - def Start(self): - """ - Send data start condition. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.Start(self.context) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def Stop(self): - """ - Send data stop condition. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.Stop(self.context) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def Write(self, data): - """ - Writes bytes out via the selected serial protocol. - - @data - A string of bytes to be written. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.Write(self.context, data) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def Read(self, size): - """ - Reads bytes over the selected serial protocol. - - @size - Number of bytes to read. - - Returns a string of size bytes. - """ - return _mpsse.Read(self.context, size) - - def Transfer(self, data): - """ - Transfers data over the selected serial protocol. - For use only in SPI0, SPI1, SPI2, SPI3 modes. - - @data - A string of bytes to be written. - - Returns a string of len(data) bytes. - """ - return _mpsse.Transfer(self.context, data) - - def SetAck(self, ack): - """ - Sets the transmitted ACK bit. - For use only in I2C mode. - - @ack - One of: ACK, NACK. - - Returns None. - """ - _mpsse.SetAck(self.context, ack) - - def SendAcks(self): - """ - Causes all subsequent I2C read operations to respond with an acknowledgement. - - Returns None. - """ - _mpsse.SendAcks(self.context) - - def SendNacks(self): - """ - Causes all subsequent I2C read operations to respond with a no-acknowledgement. - - Returns None. - """ - return _mpsse.SendNacks(self.context) - - def GetAck(self): - """ - Returns the last received ACK bit. - - Returns one of: ACK, NACK. - """ - return _mpsse.GetAck(self.context) - - def PinHigh(self, pin): - """ - Sets the specified GPIO pin high. - - @pin - Pin number 0 - 11 in GPIO mode. - In all other modes, one of: GPIOL0, GPIOL1, GPIOL2, GPIOL3, GPIOH0, GPIOH1, GPIOH2, GPIOH3, GPIOH4, GPIOH5, GPIOH6, GPIOH7. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.PinHigh(self.context, pin) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def PinLow(self, pin): - """ - Sets the specified GPIO pin low. - - @pin - Pin number 0 - 11 in GPIO mode. - In all other modes, one of: GPIOL0, GPIOL1, GPIOL2, GPIOL3, GPIOH0, GPIOH1, GPIOH2, GPIOH3, GPIOH4, GPIOH5, GPIOH6, GPIOH7. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.PinLow(self.context, pin) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def SetDirection(self, direction): - """ - Sets the input/output direction of pins as determined by direction (1 = Output, 0 = Input). - For use in BITBANG mode only. - - @direction - Byte indicating input/output direction of each bit (1 is output, 0 is input). - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.SetDirection(self.context, direction) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def WriteBits(self, bits, n): - """ - Performs a bitwise write of up to 8 bits at a time. - - @bits - An integer of bits to be written. - @n - Transmit n number of least-significant bits. - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.WriteBits(self.context, bits, n) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def ReadBits(self, n): - """ - Performs a bitwise read of up to 8 bits at a time. - - @n - Number of bits to read. - - Returns an integer value with the read bits set. - """ - return ord(_mpsse.ReadBits(self.context, n)) - - def WritePins(self, data): - """ - Writes a new state to the chip's pins. - For use in BITBANG mode only. - - @data - An integer with the bits set to the desired pin states (1 = output, 0 = input). - - Returns MPSSE_OK on success. - Raises an exception on failure. - """ - if _mpsse.WritePins(self.context, data) == MPSSE_FAIL: - raise Exception, self.ErrorString() - return MPSSE_OK - - def ReadPins(self): - """ - Reads the current state of the chip's pins. - For use in BITBANG mode only. - - Returns an integer with the corresponding pin's bits set. - """ - return _mpsse.ReadPins(self.context) - - def PinState(self, pin, state=-1): - """ - Checks the current state of the pins. - For use in BITBANG mode only. - - @pin - The pin number whose state you want to check. - @state - The value returned by ReadPins. If not specified, ReadPins will be called automatically. - - Returns a 1 if the pin is high, 0 if the pin is low. - """ - return _mpsse.PinState(self.context, pin, state) - - def Tristate(self): - """ - Puts all I/O pins into a tristate mode (FT232H only). - """ - return _mpsse.Tristate(self.context) - - def Version(self): - """ - Returns the libmpsse version number. - High nibble is major, low nibble is minor. - """ - return _mpsse.Version() + @frequency - The frequency to use for the specified serial protocol, in hertz (default: 100KHz). + @endianess - The endianess of data transfers, one of: MSB, LSB (default: MSB). + + Returns None. + """ + self.context = None + if mode is not None: + self.context = _mpsse.MPSSE(mode, frequency, endianess) + if self.context.open == 0: + raise Exception(self.ErrorString()) + + def __enter__(self): + return self + + def __exit__(self, t, v, traceback): + if self.context: + self.Close() + + def __del__(self): + if self.context: + self.Close() + + def Open(self, vid, pid, mode, frequency=ONE_HUNDRED_KHZ, endianess=MSB, interface=IFACE_A, description=None, serial=None, index=0): + """ + Opens the specified FTDI device. + Called internally by __init__ if the __init__ mode is not None. + + @vid - FTDI USB vendor ID. + @pid - FTDI USB product ID. + @mode - The MPSSE mode to use, one of: SPI0, SPI1, SPI2, SPI3, I2C, GPIO, BITBANG. + @frequency - The frequency to use for the specified serial protocol, in hertz (default: 100KHz). + @endianess - The endianess of data transfers, one of: MSB, LSB (default: MSB). + @interface - The interface to use on the FTDI chip, one of: IFACE_A, IFACE_B, IFACE_C, IFACE_D, IFACE_ANY (default: IFACE_A). + @description - FTDI device product description (default: None). + @serial - FTDI device serial number (default: None). + @index - Number of matching device to open if there are more than one, starts with zero (default: 0). + + Returns MPSSE_OK on success. + Raises an exeption on failure. + """ + self.context = _mpsse.OpenIndex(vid, pid, mode, frequency, endianess, interface, description, serial, index) + if self.context.open == 0: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def Close(self): + """ + Closes the FTDI device connection, deinitializes libftdi, and frees the libmpsse context. + + Returns None. + """ + retval = _mpsse.Close(self.context) + self.context = None + + def ErrorString(self): + """ + Returns the last libftdi error string. + """ + return _mpsse.ErrorString(self.context) + + def SetMode(self, mode, endianess): + """ + Sets the appropriate transmit and receive commands based on the requested mode and byte order. + Called internally by __init__ and Open. + + @mode - The MPSSE mode to use, one of: SPI0, SPI1, SPI2, SPI3, I2C, GPIO, BITBANG. + @endianess - The endianess of data transfers, one of: MSB, LSB. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.SetMode(self.context, mode, endianess) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def EnableBitmode(self, tf): + """ + Enables/disables bitwise data transfers. + Called internally by ReadBits and WriteBites. + + @tf - Set to 1 to enable bitwise transfers, 0 to disable. + + Returns None. + """ + _mpsse.EnableBitmode(self.context, tf) + + def FlushAfterRead(self, tf): + """ + Enables / disables the explicit flushing of the recieve buffer after each read operation. + + @tf - Set to 1 to enable flushing, 0 to disable (disabled by default). + + Returns None. + """ + return _mpsse.FlushAfterRead(self.context, tf) + + def SetClock(self, frequency): + """ + Sets the appropriate divisor for the desired clock frequency. + Called internally by __init__ and Open. + + @frequency - The desired clock frequency, in hertz. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.SetClock(self.context, frequency) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def GetClock(self): + """ + Returns the currently configured clock rate, in hertz. + """ + return _mpsse.GetClock(self.context) + + def GetVid(self): + """ + Returns the vendor ID of the FTDI chip. + """ + return _mpsse.GetVid(self.context) + + def GetPid(self): + """ + Returns the product ID of the FTDI chip. + """ + return _mpsse.GetPid(self.context) + + def GetDescription(self): + """ + Returns the description of the FTDI chip, if any. + This will only be populated if __init__ was used to open the device. + """ + return _mpsse.GetDescription(self.context) + + def SetLoopback(self, enable): + """ + Enable / disable internal loopback. Loopback is disabled by default. + + @enable - Set to 1 to enable loopback, 0 to disable (disabled by default). + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.SetLoopback(self.context, enable) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def SetCSIdle(self, idle): + """ + Sets the idle state of the chip select pin. + + @idle - Set to 1 to idle high, 0 to idle low (CS idles high by default). + + Returns None. + """ + _mpsse.SetCSIdle(self.context, idle) + + def Start(self): + """ + Send data start condition. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.Start(self.context) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def Stop(self): + """ + Send data stop condition. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.Stop(self.context) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def Write(self, data): + """ + Writes bytes out via the selected serial protocol. + + @data - A string of bytes to be written. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.Write(self.context, data, len(data)) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def Read(self, size): + """ + Reads bytes over the selected serial protocol. + + @size - Number of bytes to read. + + Returns a string of size bytes. + """ + return _mpsse.Read(self.context, size) + + def Transfer(self, data): + """ + Transfers data over the selected serial protocol. + For use only in SPI0, SPI1, SPI2, SPI3 modes. + + @data - A string of bytes to be written. + + Returns a string of len(data) bytes. + """ + return _mpsse.Transfer(self.context, data) + + def SetAck(self, ack): + """ + Sets the transmitted ACK bit. + For use only in I2C mode. + + @ack - One of: ACK, NACK. + + Returns None. + """ + _mpsse.SetAck(self.context, ack) + + def SendAcks(self): + """ + Causes all subsequent I2C read operations to respond with an acknowledgement. + + Returns None. + """ + _mpsse.SendAcks(self.context) + + def SendNacks(self): + """ + Causes all subsequent I2C read operations to respond with a no-acknowledgement. + + Returns None. + """ + return _mpsse.SendNacks(self.context) + + def GetAck(self): + """ + Returns the last received ACK bit. + + Returns one of: ACK, NACK. + """ + return _mpsse.GetAck(self.context) + + def PinHigh(self, pin): + """ + Sets the specified GPIO pin high. + + @pin - Pin number 0 - 11 in GPIO mode. + In all other modes, one of: GPIOL0, GPIOL1, GPIOL2, GPIOL3, GPIOH0, GPIOH1, GPIOH2, GPIOH3, GPIOH4, GPIOH5, GPIOH6, GPIOH7. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.PinHigh(self.context, pin) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def PinLow(self, pin): + """ + Sets the specified GPIO pin low. + + @pin - Pin number 0 - 11 in GPIO mode. + In all other modes, one of: GPIOL0, GPIOL1, GPIOL2, GPIOL3, GPIOH0, GPIOH1, GPIOH2, GPIOH3, GPIOH4, GPIOH5, GPIOH6, GPIOH7. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.PinLow(self.context, pin) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def SetDirection(self, direction): + """ + Sets the input/output direction of pins as determined by direction (1 = Output, 0 = Input). + For use in BITBANG mode only. + + @direction - Byte indicating input/output direction of each bit (1 is output, 0 is input). + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.SetDirection(self.context, direction) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def WriteBits(self, bits, n): + """ + Performs a bitwise write of up to 8 bits at a time. + + @bits - An integer of bits to be written. + @n - Transmit n number of least-significant bits. + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.WriteBits(self.context, bits, n) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def ReadBits(self, n): + """ + Performs a bitwise read of up to 8 bits at a time. + + @n - Number of bits to read. + + Returns an integer value with the read bits set. + """ + return ord(_mpsse.ReadBits(self.context, n)) + + def WritePins(self, data): + """ + Writes a new state to the chip's pins. + For use in BITBANG mode only. + + @data - An integer with the bits set to the desired pin states (1 = output, 0 = input). + + Returns MPSSE_OK on success. + Raises an exception on failure. + """ + if _mpsse.WritePins(self.context, data) == MPSSE_FAIL: + raise Exception(self.ErrorString()) + return MPSSE_OK + + def ReadPins(self): + """ + Reads the current state of the chip's pins. + For use in BITBANG mode only. + + Returns an integer with the corresponding pin's bits set. + """ + return _mpsse.ReadPins(self.context) + + def PinState(self, pin, state=-1): + """ + Checks the current state of the pins. + For use in BITBANG mode only. + + @pin - The pin number whose state you want to check. + @state - The value returned by ReadPins. If not specified, ReadPins will be called automatically. + + Returns a 1 if the pin is high, 0 if the pin is low. + """ + return _mpsse.PinState(self.context, pin, state) + + def Tristate(self): + """ + Puts all I/O pins into a tristate mode (FT232H only). + """ + return _mpsse.Tristate(self.context) + + def Version(self): + """ + Returns the libmpsse version number. + High nibble is major, low nibble is minor. + """ + return _mpsse.Version() diff --git a/src/support.c b/src/support.c index d34f8b3..3bc02a3 100644 --- a/src/support.c +++ b/src/support.c @@ -5,17 +5,15 @@ * 27 December 2011 */ +#include #include -#if LIBFTDI1 == 1 -#include -#else -#include -#endif - +#include "config.h" #include "mpsse.h" #include "support.h" +#define RAW_READ_RETRY 10 + /* Write data to the FTDI chip */ int raw_write(struct mpsse_context *mpsse, unsigned char *buf, int size) { @@ -36,10 +34,11 @@ int raw_write(struct mpsse_context *mpsse, unsigned char *buf, int size) int raw_read(struct mpsse_context *mpsse, unsigned char *buf, int size) { int n = 0, r = 0; + int retry = RAW_READ_RETRY; if(mpsse->mode) { - while(n < size) + while((n < size) && (retry -- > 0)) { r = ftdi_read_data(&mpsse->ftdi, buf, size); if(r < 0) break; @@ -48,12 +47,12 @@ int raw_read(struct mpsse_context *mpsse, unsigned char *buf, int size) if(mpsse->flush_after_read) { - /* + /* * Make sure the buffers are cleared after a read or subsequent reads may fail. - * + * * Is this needed anymore? It slows down repetitive read operations by ~8%. */ - ftdi_usb_purge_rx_buffer(&mpsse->ftdi); + ftdi_tciflush(&mpsse->ftdi); } } @@ -85,11 +84,11 @@ uint32_t div2freq(uint32_t system_clock, uint16_t div) } /* Builds a buffer of commands + data blocks */ -unsigned char *build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, unsigned char *data, int size, int *buf_size) +unsigned char *build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, const unsigned char *data, size_t size, int *buf_size) { unsigned char *buf = NULL; - int i = 0, j = 0, k = 0, dsize = 0, num_blocks = 0, total_size = 0, xfer_size = 0; - uint16_t rsize = 0; + int i = 0, j = 0, k = 0, dsize = 0, num_blocks = 0, total_size = 0, xfer_size = 0; + uint16_t rsize = 0; *buf_size = 0; @@ -139,7 +138,7 @@ unsigned char *build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, unsi { buf[i++] = SET_BITS_LOW; buf[i++] = mpsse->pstart & ~SK; - + /* On receive, we need to ensure that the data out line is set as an input to avoid contention on the bus */ if(cmd == mpsse->rx) { @@ -229,6 +228,26 @@ int set_bits_high(struct mpsse_context *mpsse, int port) return raw_write(mpsse, (unsigned char *) &buf, sizeof(buf)); } +int get_bits_low(struct mpsse_context *mpsse, uint8_t* value) { + unsigned char buf[] = { GET_BITS_LOW }; + + int res = raw_write(mpsse, buf, sizeof(buf)); + if (res != MPSSE_OK) return res; + + if (raw_read(mpsse, value, 1) != 1) return MPSSE_FAIL; + return MPSSE_OK; +} + +int get_bits_high(struct mpsse_context *mpsse, uint8_t* value) { + unsigned char buf[] = { GET_BITS_HIGH }; + + int res = raw_write(mpsse, buf, sizeof(buf)); + if (res != MPSSE_OK) return res; + + if (raw_read(mpsse, value, 1) != 1) return MPSSE_FAIL; + return MPSSE_OK; +} + /* Set the GPIO pins high/low */ int gpio_write(struct mpsse_context *mpsse, int pin, int direction) { @@ -240,11 +259,11 @@ int gpio_write(struct mpsse_context *mpsse, int pin, int direction) { mpsse->bitbang |= (1 << pin); } - else + else { mpsse->bitbang &= ~(1 << pin); } - + if(set_bits_high(mpsse, mpsse->bitbang) == MPSSE_OK) { retval = raw_write(mpsse, (unsigned char *) &mpsse->bitbang, 1); @@ -286,8 +305,8 @@ int gpio_write(struct mpsse_context *mpsse, int pin, int direction) { mpsse->gpioh &= ~(1 << pin); } - - retval = set_bits_high(mpsse, mpsse->gpioh); + + retval = set_bits_high(mpsse, mpsse->gpioh); } } diff --git a/src/support.h b/src/support.h index ccf47b7..1e77747 100644 --- a/src/support.h +++ b/src/support.h @@ -8,10 +8,17 @@ int raw_read(struct mpsse_context *mpsse, unsigned char *buf, int size); void set_timeouts(struct mpsse_context *mpsse, int timeout); uint16_t freq2div(uint32_t system_clock, uint32_t freq); uint32_t div2freq(uint32_t system_clock, uint16_t div); -unsigned char *build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, unsigned char *data, int size, int *buf_size); +unsigned char *build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, const unsigned char *data, size_t size, int *buf_size); int set_bits_high(struct mpsse_context *mpsse, int port); int set_bits_low(struct mpsse_context *mpsse, int port); +int get_bits_high(struct mpsse_context *mpsse, uint8_t* value); +int get_bits_low(struct mpsse_context *mpsse, uint8_t* value); int gpio_write(struct mpsse_context *mpsse, int pin, int direction); int is_valid_context(struct mpsse_context *mpsse); +#if !HAVE_LIBFTDI1_5 +#define ftdi_tcioflush ftdi_usb_purge_buffers +#define ftdi_tciflush ftdi_usb_purge_rx_buffer +#endif + #endif