From c8f9c50e1632d07ee83e9191f161b323b469453a Mon Sep 17 00:00:00 2001 From: crossleyjo Date: Tue, 20 Oct 2015 17:52:14 -0700 Subject: [PATCH 01/57] Update mpsse.i I found that calling the SetDirection function from python led to an TypeError due to the uint8_t parameter int SetDirection(struct mpsse_context *mpsse, uint8_t direction); I found the solution on stack exchange, recompiled, and confirmed that the error disappeared. https://stackoverflow.com/questions/8897294/swig-python-c-how-to-use-type-int8-t --- src/mpsse.i | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mpsse.i b/src/mpsse.i index 976a583..0dcd30b 100644 --- a/src/mpsse.i +++ b/src/mpsse.i @@ -1,4 +1,5 @@ %module pylibmpsse +%include "stdint.i" %{ #include "mpsse.h" %} From 19072f569a6c46e75d9d5e42442b34bf9e2bc419 Mon Sep 17 00:00:00 2001 From: Ole Reinhardt Date: Tue, 5 Jul 2016 17:14:36 +0200 Subject: [PATCH 02/57] Re-Enable flushing of ftdi buffers after read --- src/mpsse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mpsse.c b/src/mpsse.c index 456b51b..c4125f5 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -124,7 +124,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) From 169a90b85404eef77d2361f9f99f959904a871ee Mon Sep 17 00:00:00 2001 From: Ole Reinhardt Date: Tue, 5 Jul 2016 17:14:54 +0200 Subject: [PATCH 03/57] Fix start condition --- src/mpsse.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mpsse.c b/src/mpsse.c index c4125f5..06fb7ab 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -642,6 +642,7 @@ int Start(struct mpsse_context *mpsse) /* 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. From f566194bf138357bf91747bd1200c1cd84da0b57 Mon Sep 17 00:00:00 2001 From: Ole Reinhardt Date: Wed, 6 Jul 2016 11:48:07 +0200 Subject: [PATCH 04/57] Add timeout on read raw_read() oprations. Enhance error handling and propagation --- src/mpsse.c | 19 +++++++++++++++++-- src/support.c | 5 ++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/mpsse.c b/src/mpsse.c index 06fb7ab..20509b4 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -769,7 +769,10 @@ int Write(struct mpsse_context *mpsse, char *data, int size) /* 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 @@ -794,6 +797,7 @@ char *InternalRead(struct mpsse_context *mpsse, int size) unsigned char *data = NULL, *buf = NULL; unsigned char sbuf[SPI_RW_SIZE] = { 0 }; int n = 0, rxsize = 0, data_size = 0, retval = 0; + int cnt; if(is_valid_context(mpsse)) { @@ -820,15 +824,26 @@ char *InternalRead(struct mpsse_context *mpsse, int size) if(retval == MPSSE_OK) { - n += raw_read(mpsse, buf+n, rxsize); + cnt = raw_read(mpsse, buf+n, rxsize); + if (cnt != rxsize) { + free(buf); + buf = NULL; + break; + } + + n += cnt; } else { + free(buf); + buf = NULL; break; } } else { + free(buf); + buf = NULL; break; } } diff --git a/src/support.c b/src/support.c index d34f8b3..e8b158f 100644 --- a/src/support.c +++ b/src/support.c @@ -16,6 +16,8 @@ #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 +38,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; From bb7b989d1503455f3ef527aa50d1572a49876a0e Mon Sep 17 00:00:00 2001 From: Florian Boor Date: Wed, 6 Jul 2016 14:53:02 +0200 Subject: [PATCH 05/57] Check for zero read at timeout instead of partial reads. Partial reads can be can be correct. Implement same behaviour for Transfer() Return NULL on errors. --- src/mpsse.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/mpsse.c b/src/mpsse.c index 20509b4..badc4f7 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -824,14 +824,14 @@ char *InternalRead(struct mpsse_context *mpsse, int size) if(retval == MPSSE_OK) { - cnt = raw_read(mpsse, buf+n, rxsize); - if (cnt != rxsize) { + cnt = raw_read(mpsse, buf + n, rxsize); + if (cnt > 0) + n += cnt; + else { free(buf); buf = NULL; break; } - - n += cnt; } else { @@ -951,6 +951,7 @@ char *Transfer(struct mpsse_context *mpsse, char *data, int size) { unsigned char *txdata = NULL, *buf = NULL; int n = 0, data_size = 0, rxsize = 0, retval = 0; + int cnt; if(is_valid_context(mpsse)) { @@ -979,15 +980,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; } } From 61580cc717ede9a747f4d626ed4de2710bda501b Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Tue, 9 Aug 2016 11:15:02 +0200 Subject: [PATCH 06/57] Don't use install -D option as it does not exist on OS X --- src/Makefile.in | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index 25e8434..2a9e900 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -43,9 +43,10 @@ pyswig-build: -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 + install -d -m755 $(DESTDIR)/$(PYLIB) + install -m644 pylib$(TARGET).py $(DESTDIR)/$(PYLIB)/pylib$(TARGET).py + install -m644 _pylib$(TARGET).so $(DESTDIR)/$(PYLIB)/_pylib$(TARGET).so + install -m644 $(TARGET).py $(DESTDIR)/$(PYLIB)/$(TARGET).py pyswig-uninstall: rm -f $(DESTDIR)/$(PYLIB)/$(TARGET).* \ @@ -58,9 +59,11 @@ 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 + install -d -m755 $(DESTDIR)/$(LIBDIR) $(DESTDIR)/$(INCDIR) + install -m644 $(TARGET).h $(DESTDIR)/$(INCDIR)/$(TARGET).h + install -m644 lib$(TARGET).so $(DESTDIR)/$(LIBDIR)/lib$(TARGET).so + install -m644 lib$(TARGET).a $(DESTDIR)/$(LIBDIR)/lib$(TARGET).a + install -m644 $(TARGET).h $(DESTDIR)/$(INCDIR)/$(TARGET).h uninstall: py$(BUILD)-uninstall rm -f $(DESTDIR)/$(LIBDIR)/lib$(TARGET).so \ From 91794d0657caf22fc1876752cf10c3be24d04387 Mon Sep 17 00:00:00 2001 From: John Hein Date: Thu, 16 Feb 2017 23:23:48 -0700 Subject: [PATCH 07/57] Remove LDFLAGS from commands to build object files. Fixes warnings like: cc: warning: -lftdi: 'linker' input unused --- src/Makefile.in | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index 25e8434..b67f803 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -26,17 +26,17 @@ example-code: make -C examples mpsse.o: support.o - $(CC) $(CFLAGS) $(LDFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c + $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c fast.o: support.o - $(CC) $(CFLAGS) $(LDFLAGS) -c fast.c + $(CC) $(CFLAGS) -c fast.c support.o: - $(CC) $(CFLAGS) $(LDFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c support.c + $(CC) $(CFLAGS) -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 + $(CC) $(CFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c support.c + $(CC) $(CFLAGS) -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 \ From cc97da4b38068a832c2d025ddd226879c0cd4526 Mon Sep 17 00:00:00 2001 From: John Hein Date: Thu, 16 Feb 2017 23:27:39 -0700 Subject: [PATCH 08/57] Don't build object files with the same filename for swig python object files & non-swig. This can help fix parallel builds - building with incorrect object file or trying to link with files that are still being written. See https://github.com/devttys0/libmpsse/issues/16 --- src/Makefile.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index b67f803..4eb00b6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -35,11 +35,11 @@ support.o: $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c support.c pyswig-build: - $(CC) $(CFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c support.c - $(CC) $(CFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c + $(CC) $(CFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c support.c -o pyswig_support.o + $(CC) $(CFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c -o pyswig_mpsse.o $(SWIG) -python $(TARGET).i $(CC) $(CFLAGS) -c -DLIBFTDI1=$(LIBFTDI1) $(TARGET)_wrap.c $(INC) - $(CC) $(CFLAGS) -shared $(FRAMEWORK) $(TARGET)_wrap.o mpsse.o support.o \ + $(CC) $(CFLAGS) -shared $(FRAMEWORK) $(TARGET)_wrap.o pyswig_mpsse.o pyswig_support.o \ -o _pylib$(TARGET).so $(LDFLAGS) $(INC) pyswig-install: From a3525a5d30141bddcba66b72a7937be705d93cf9 Mon Sep 17 00:00:00 2001 From: John Hein Date: Thu, 16 Feb 2017 23:39:51 -0700 Subject: [PATCH 09/57] include stdlib.h for malloc(3) --- src/support.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/support.c b/src/support.c index d34f8b3..45a4842 100644 --- a/src/support.c +++ b/src/support.c @@ -5,6 +5,7 @@ * 27 December 2011 */ +#include #include #if LIBFTDI1 == 1 From 1754c6ef742751c7791ab21395a2a2ead529c6a7 Mon Sep 17 00:00:00 2001 From: Klaus Drechsler Date: Fri, 11 Nov 2016 20:01:18 +0100 Subject: [PATCH 10/57] configure is autogenerated. Signed-off-by: Sergey Alirzaev --- src/configure | 4696 ------------------------------------------------- 1 file changed, 4696 deletions(-) delete mode 100755 src/configure 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 - From 62d3b61f5be2631bafc643bb6b02ad75d49caef5 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Mon, 22 May 2017 21:38:02 +0300 Subject: [PATCH 11/57] + .gitignore --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ba2b22 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.sw? +*.o +*.a +*.so +src/Makefile +src/autom4te.cache +src/config.h +src/config.log +src/config.status +src/configure From c269efb5c37e9ef261a5c0e3d9134259dbb197b4 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Mon, 22 May 2017 21:39:24 +0300 Subject: [PATCH 12/57] move README around for better visibility --- docs/README => README | 0 README.md | 4 ---- 2 files changed, 4 deletions(-) rename docs/README => README (100%) delete mode 100644 README.md diff --git a/docs/README b/README similarity index 100% rename from docs/README rename to README diff --git a/README.md b/README.md deleted file mode 100644 index 5be4d22..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -libmpsse -======== - -Open source library for SPI/I2C control via FTDI chips From 77631267702f2a0bc45f6f755d00638b1348b669 Mon Sep 17 00:00:00 2001 From: Daniel Casner Date: Mon, 6 Jul 2015 16:07:35 -0700 Subject: [PATCH 13/57] Fix python3 compatibility. Still compatible with Python 2.7, untested below that. Signed-off-by: Sergey Alirzaev --- docs/{README.PYTHON => README.PYTHON.html} | 0 src/mpsse.i | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/{README.PYTHON => README.PYTHON.html} (100%) 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/mpsse.i b/src/mpsse.i index 0dcd30b..bc34e49 100644 --- a/src/mpsse.i +++ b/src/mpsse.i @@ -18,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); } From c6271bc5f0240a19c4c1ee394d8146c6c82bb963 Mon Sep 17 00:00:00 2001 From: Daniel Casner Date: Mon, 6 Jul 2015 18:13:43 -0700 Subject: [PATCH 14/57] Make mpsse.py compatible with python3 Signed-off-by: Sergey Alirzaev --- src/mpsse.py | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/mpsse.py b/src/mpsse.py index bc67f8b..a98c166 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 @@ -67,7 +67,7 @@ def __init__(self, mode=None, frequency=ONE_HUNDRED_KHZ, endianess=MSB): if mode is not None: self.context = _mpsse.MPSSE(mode, frequency, endianess) if self.context.open == 0: - raise Exception, self.ErrorString() + raise Exception(self.ErrorString()) def __enter__(self): return self @@ -100,7 +100,7 @@ def Open(self, vid, pid, mode, frequency=ONE_HUNDRED_KHZ, endianess=MSB, interfa """ self.context = _mpsse.OpenIndex(vid, pid, mode, frequency, endianess, interface, description, serial, index) if self.context.open == 0: - raise Exception, self.ErrorString() + raise Exception(self.ErrorString()) return MPSSE_OK def Close(self): @@ -111,7 +111,7 @@ def Close(self): """ retval = _mpsse.Close(self.context) self.context = None - + def ErrorString(self): """ Returns the last libftdi error string. @@ -125,12 +125,12 @@ def SetMode(self, mode, endianess): @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() + raise Exception(self.ErrorString()) return MPSSE_OK def EnableBitmode(self, tf): @@ -165,7 +165,7 @@ def SetClock(self, frequency): Raises an exception on failure. """ if _mpsse.SetClock(self.context, frequency) == MPSSE_FAIL: - raise Exception, self.ErrorString() + raise Exception(self.ErrorString()) return MPSSE_OK def GetClock(self): @@ -188,7 +188,7 @@ def GetPid(self): def GetDescription(self): """ - Returns the description of the FTDI chip, if any. + 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) @@ -203,7 +203,7 @@ def SetLoopback(self, enable): Raises an exception on failure. """ if _mpsse.SetLoopback(self.context, enable) == MPSSE_FAIL: - raise Exception, self.ErrorString() + raise Exception(self.ErrorString()) return MPSSE_OK def SetCSIdle(self, idle): @@ -224,7 +224,7 @@ def Start(self): Raises an exception on failure. """ if _mpsse.Start(self.context) == MPSSE_FAIL: - raise Exception, self.ErrorString() + raise Exception(self.ErrorString()) return MPSSE_OK def Stop(self): @@ -235,20 +235,20 @@ def Stop(self): Raises an exception on failure. """ if _mpsse.Stop(self.context) == MPSSE_FAIL: - raise Exception, self.ErrorString() + 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() + raise Exception(self.ErrorString()) return MPSSE_OK def Read(self, size): @@ -310,7 +310,7 @@ def GetAck(self): 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. @@ -318,41 +318,41 @@ def PinHigh(self, pin): Raises an exception on failure. """ if _mpsse.PinHigh(self.context, pin) == MPSSE_FAIL: - raise Exception, self.ErrorString() + 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() + 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). + 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). + @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() + 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. @@ -360,7 +360,7 @@ def WriteBits(self, bits, n): Raises an exception on failure. """ if _mpsse.WriteBits(self.context, bits, n) == MPSSE_FAIL: - raise Exception, self.ErrorString() + raise Exception(self.ErrorString()) return MPSSE_OK def ReadBits(self, n): @@ -384,7 +384,7 @@ def WritePins(self, data): Raises an exception on failure. """ if _mpsse.WritePins(self.context, data) == MPSSE_FAIL: - raise Exception, self.ErrorString() + raise Exception(self.ErrorString()) return MPSSE_OK def ReadPins(self): @@ -401,7 +401,7 @@ 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. + @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. From 1ad4d5d6a90ddf095d818f36f1cb21260b060a68 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Mon, 22 May 2017 22:10:19 +0300 Subject: [PATCH 15/57] a better way to find the python headers is to ask python now it works for Gentoo --- src/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configure.ac b/src/configure.ac index 7c3130a..27baae9 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -44,7 +44,7 @@ then if ! test $PYDEV then - PYDEV="/usr/include/python$(python -V 2>&1 | awk '{print $2}' | cut -d'.' -f1,2)" + PYDEV="$(echo 'from distutils.sysconfig import get_python_inc; print(get_python_inc())' | python)" fi AC_CHECK_HEADERS([$PYDEV/Python.h],[],[echo "error: missing python header files" && exit 1]) From 2fada1f09b1d8e69120d5cb34c2aa89ac687d94b Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Mon, 22 May 2017 22:11:08 +0300 Subject: [PATCH 16/57] python3'ify the configure script --- src/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configure.ac b/src/configure.ac index 27baae9..b0ecf93 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -53,7 +53,7 @@ then 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 + echo "for path in sys.path: print(path)" >> pylib.py PYLIB="$(python pylib.py | grep -e '-packages$' | head -1)" rm -f pylib.py fi From 1884daec82fc75374b809003113ff6fced158f26 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Mon, 22 May 2017 22:29:08 +0300 Subject: [PATCH 17/57] + python-dependent generated files to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 3ba2b22..dfaa542 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ src/config.h src/config.log src/config.status src/configure +src/mpsse_wrap.c +src/pylibmpsse.py From 9011c377884c394a6136970c3022ed41fa806adc Mon Sep 17 00:00:00 2001 From: pat1 Date: Mon, 25 Dec 2017 12:04:41 +0100 Subject: [PATCH 18/57] added -DLIBFTDI1 to fast.c compiler options --- src/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.in b/src/Makefile.in index 07aaa89..52bd4e6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -29,7 +29,7 @@ mpsse.o: support.o $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c fast.o: support.o - $(CC) $(CFLAGS) -c fast.c + $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c fast.c support.o: $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c support.c From 03d589017bd9a30cbf69b906dcf1133a5dc96891 Mon Sep 17 00:00:00 2001 From: Martin Gysel Date: Wed, 24 Jan 2018 14:14:23 +0100 Subject: [PATCH 19/57] migrate README to markown --- README | 82 ------------------------------------------------------- README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 82 deletions(-) delete mode 100644 README create mode 100644 README.md diff --git a/README b/README deleted file mode 100644 index 65289c4..0000000 --- a/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/README.md b/README.md new file mode 100644 index 0000000..dedbf28 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# 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](docs/README.C) and [README.PYTHON](docs/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 [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. + From fdcede66b46ad9708216b80108f34d1b1272efb1 Mon Sep 17 00:00:00 2001 From: Fabien LETORT Date: Thu, 20 Aug 2015 14:18:04 +0200 Subject: [PATCH 20/57] Define fast_rw_buf from code file not from header File. It should fix #11 --- src/fast.c | 2 ++ src/mpsse.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fast.c b/src/fast.c index 8cf66b0..d2daa10 100644 --- a/src/fast.c +++ b/src/fast.c @@ -10,6 +10,8 @@ #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) { diff --git a/src/mpsse.h b/src/mpsse.h index 4a00eed..2d00d55 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -218,7 +218,7 @@ swig_string_data Transfer(struct mpsse_context *mpsse, char *data, int size); char *Read(struct mpsse_context *mpsse, int size); char *Transfer(struct mpsse_context *mpsse, char *data, int size); -unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE]; +extern 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); From 3be0edc105ba8e594790302055a100310eced581 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Tue, 10 Apr 2018 21:16:19 +0300 Subject: [PATCH 21/57] update AC_INIT invocation --- src/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configure.ac b/src/configure.ac index b0ecf93..3d953b4 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([libmpsse],[1.3],[http://libmpsse.googlecode.com]) +AC_INIT([libmpsse],[1.3.1],[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=""]) From eaf067cfee40f0374387d27be434e548ed6c6d95 Mon Sep 17 00:00:00 2001 From: Ivan Baldin Date: Tue, 6 Oct 2015 00:27:40 +0300 Subject: [PATCH 22/57] Fix FastTransfer --- src/fast.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fast.c b/src/fast.c index d2daa10..f87dc71 100644 --- a/src/fast.c +++ b/src/fast.c @@ -177,7 +177,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) { From fc8affcf6a3774727356e5006a2b87675b8046c7 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Sun, 15 Apr 2018 16:53:42 +0300 Subject: [PATCH 23/57] fast.c: keeping the symbol space clean! --- src/fast.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/fast.c b/src/fast.c index f87dc71..6e16dfe 100644 --- a/src/fast.c +++ b/src/fast.c @@ -13,10 +13,10 @@ 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, int size, int *buf_size) { - int i = 0; - uint16_t rsize = 0; + int i = 0; + uint16_t rsize = 0; *buf_size = 0; @@ -66,9 +66,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; @@ -92,7 +92,7 @@ int FastWrite(struct mpsse_context *mpsse, char *data, int size) } } } - + return MPSSE_FAIL; } @@ -146,11 +146,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. @@ -205,5 +205,3 @@ int FastTransfer(struct mpsse_context *mpsse, char *wdata, char *rdata, int size return MPSSE_FAIL; } - - From e681db97fd4ee79f32209957d94e74611b544b3c Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Thu, 3 May 2018 08:35:26 +0300 Subject: [PATCH 24/57] convert sizes to size_t meanwhile making -Wextra happy --- src/fast.c | 17 ++++++++++------- src/mpsse.c | 39 +++++++++++++++++++++------------------ src/mpsse.h | 20 ++++++++++---------- src/support.c | 8 ++++---- src/support.h | 2 +- 5 files changed, 46 insertions(+), 40 deletions(-) diff --git a/src/fast.c b/src/fast.c index 6e16dfe..494b845 100644 --- a/src/fast.c +++ b/src/fast.c @@ -13,7 +13,7 @@ unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE]; /* Builds a block buffer for the Fast* functions. For internal use only. */ -static 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; @@ -51,9 +51,10 @@ static int fast_build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, uns * * 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, 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)) { @@ -105,9 +106,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)) { @@ -160,9 +162,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, 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)) { diff --git a/src/mpsse.c b/src/mpsse.c index badc4f7..cdd1fb6 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -683,10 +683,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)) { @@ -694,7 +694,7 @@ int WriteBits(struct mpsse_context *mpsse, char bits, int size) } /* Convert each bit in bits to an array of bytes */ - for(i=0; i 0) + if (cnt > 0) n += cnt; else { free(buf); diff --git a/src/mpsse.h b/src/mpsse.h index 2d00d55..2eaa36e 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -187,7 +187,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, 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 +197,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,16 +212,16 @@ 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, 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, char *data, size_t size); extern 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); +int FastWrite(struct mpsse_context *mpsse, char *data, size_t size); +int FastRead(struct mpsse_context *mpsse, char *data, size_t size); +int FastTransfer(struct mpsse_context *mpsse, char *wdata, char *rdata, size_t size); #endif diff --git a/src/support.c b/src/support.c index 877da31..f822e5f 100644 --- a/src/support.c +++ b/src/support.c @@ -89,11 +89,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, 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; @@ -143,7 +143,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) { diff --git a/src/support.h b/src/support.h index ccf47b7..3434f11 100644 --- a/src/support.h +++ b/src/support.h @@ -8,7 +8,7 @@ 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, 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 gpio_write(struct mpsse_context *mpsse, int pin, int direction); From 148b0702c30f8ed29ddd962bb920185d36bb9a48 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Thu, 3 May 2018 08:40:52 +0300 Subject: [PATCH 25/57] use pointers to const memory for writes --- src/fast.c | 4 ++-- src/mpsse.c | 8 ++++---- src/mpsse.h | 10 +++++----- src/support.c | 2 +- src/support.h | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/fast.c b/src/fast.c index 494b845..f520be1 100644 --- a/src/fast.c +++ b/src/fast.c @@ -51,7 +51,7 @@ static int fast_build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, uns * * Returns MPSSE_OK on success, MPSSE_FAIL on failure. */ -int FastWrite(struct mpsse_context *mpsse, char *data, size_t size) +int FastWrite(struct mpsse_context *mpsse, const char *data, size_t size) { int buf_size = 0, txsize = 0; size_t n = 0; @@ -162,7 +162,7 @@ int FastRead(struct mpsse_context *mpsse, char *data, size_t size) * * Returns MPSSE_OK on success, MPSSE_FAIL on failure. */ -int FastTransfer(struct mpsse_context *mpsse, char *wdata, char *rdata, size_t size) +int FastTransfer(struct mpsse_context *mpsse, const char *wdata, char *rdata, size_t size) { int data_size = 0, rxsize = 0; size_t n = 0; diff --git a/src/mpsse.c b/src/mpsse.c index cdd1fb6..0e31742 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -728,7 +728,7 @@ int WriteBits(struct mpsse_context *mpsse, char bits, size_t size) * Returns MPSSE_OK on success. * Returns MPSSE_FAIL on failure. */ -int Write(struct mpsse_context *mpsse, char *data, size_t size) +int Write(struct mpsse_context *mpsse, const char *data, size_t size) { unsigned char *buf = NULL; int retval = MPSSE_FAIL, buf_size = 0, txsize = 0; @@ -755,7 +755,7 @@ int Write(struct mpsse_context *mpsse, char *data, size_t size) 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); @@ -946,9 +946,9 @@ char ReadBits(struct mpsse_context *mpsse, size_t size) * Returns NULL on failure. */ #ifdef SWIGPYTHON -swig_string_data Transfer(struct mpsse_context *mpsse, char *data, size_t size) +swig_string_data Transfer(struct mpsse_context *mpsse, const char *data, size_t size) #else -char *Transfer(struct mpsse_context *mpsse, char *data, size_t size) +char *Transfer(struct mpsse_context *mpsse, const char *data, size_t size) #endif { unsigned char *txdata = NULL, *buf = NULL; diff --git a/src/mpsse.h b/src/mpsse.h index 2eaa36e..3bb5453 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -187,7 +187,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, size_t 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); @@ -213,15 +213,15 @@ typedef struct swig_string_data } swig_string_data; swig_string_data Read(struct mpsse_context *mpsse, size_t size); -swig_string_data Transfer(struct mpsse_context *mpsse, char *data, size_t size); +swig_string_data Transfer(struct mpsse_context *mpsse, const char *data, size_t size); #else char *Read(struct mpsse_context *mpsse, size_t size); -char *Transfer(struct mpsse_context *mpsse, char *data, size_t size); +char *Transfer(struct mpsse_context *mpsse, const char *data, size_t size); extern unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE]; -int FastWrite(struct mpsse_context *mpsse, char *data, size_t 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, char *wdata, char *rdata, size_t size); +int FastTransfer(struct mpsse_context *mpsse, const char *wdata, char *rdata, size_t size); #endif diff --git a/src/support.c b/src/support.c index f822e5f..77b14b2 100644 --- a/src/support.c +++ b/src/support.c @@ -89,7 +89,7 @@ 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, size_t 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; diff --git a/src/support.h b/src/support.h index 3434f11..d5fbf42 100644 --- a/src/support.h +++ b/src/support.h @@ -8,7 +8,7 @@ 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, size_t 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 gpio_write(struct mpsse_context *mpsse, int pin, int direction); From 37b065a572279adff228d425e7d0a4af25603388 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Thu, 3 May 2018 08:42:30 +0300 Subject: [PATCH 26/57] make -Wextra a default --- src/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configure.ac b/src/configure.ac index 3d953b4..d451034 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -12,7 +12,7 @@ AC_LANG(C) AC_TYPE_SIZE_T AC_FUNC_MALLOC -CFLAGS="-Wall -fPIC -fno-strict-aliasing $CFLAGS" +CFLAGS="-Wall -Wextra -fPIC -fno-strict-aliasing $CFLAGS" dnl Check to see if the libftdi1 headers have been installed AC_CHECK_HEADERS([libftdi1/ftdi.h], [LIBFTDI1=1], [LIBFTDI1=""]) From e9c7935cdb764db458bc8d286b0b0f287a99f8f4 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Sat, 5 May 2018 17:40:14 +0300 Subject: [PATCH 27/57] python -> python2 as python3 is the default in some distros --- src/examples/bitbang.py | 2 +- src/examples/ds1305.py | 2 +- src/examples/gpio.py | 2 +- src/examples/i2ceeprom.py | 2 +- src/examples/spiflash.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/examples/bitbang.py b/src/examples/bitbang.py index 5a73637..f6d41c6 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 diff --git a/src/examples/ds1305.py b/src/examples/ds1305.py index fcbf895..5041f60 100755 --- a/src/examples/ds1305.py +++ b/src/examples/ds1305.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * from time import sleep diff --git a/src/examples/gpio.py b/src/examples/gpio.py index 4a6deb1..407af42 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 diff --git a/src/examples/i2ceeprom.py b/src/examples/i2ceeprom.py index 2de2acf..c097a1b 100755 --- a/src/examples/i2ceeprom.py +++ b/src/examples/i2ceeprom.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * diff --git a/src/examples/spiflash.py b/src/examples/spiflash.py index e1cf9ab..f8518e8 100755 --- a/src/examples/spiflash.py +++ b/src/examples/spiflash.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from mpsse import * from time import sleep From 8844087509234100b9b85c2fe69392c893404493 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Wed, 30 May 2018 09:45:42 +0300 Subject: [PATCH 28/57] add built examples to .gitignore --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index dfaa542..a1a688c 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,10 @@ 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 From f5c40f272342a2c3a1b99d4a07f5f2e26e826b02 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Wed, 30 May 2018 10:05:09 +0300 Subject: [PATCH 29/57] release 1.3.2 --- src/configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configure.ac b/src/configure.ac index d451034..65971d0 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.65]) -AC_INIT([libmpsse],[1.3.1],[https://github.com/l29ah/libmpsse/issues]) +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=""]) From 13d262a4a0b3b681d42d4a9e92c8753d1a5d92bb Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Fri, 14 Sep 2018 17:19:42 +0300 Subject: [PATCH 30/57] updated prerequisites in docs/INSTALL fixes #4 --- docs/INSTALL | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/INSTALL b/docs/INSTALL index 7f3e2eb..e245066 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 - 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 $ ./configure $ make # make install From 1161a3bd51505fb22bffec9b2b89b41a7f105f33 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Fri, 14 Sep 2018 20:37:29 +0300 Subject: [PATCH 31/57] support older build environments in CFLAGS as suggested by https://github.com/devttys0/libmpsse/pull/36 and https://github.com/l29ah/libmpsse/issues/4#issuecomment-421429810 --- src/Makefile.in | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index 52bd4e6..00a5801 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -6,8 +6,8 @@ SONAME=@SONAME@ FRAMEWORK=@FRAMEWORK@ BUILD=@BUILD@ LDFLAGS=@LDFLAGS@ -CFLAGS=@CFLAGS@ LIBFTDI1=@LIBFTDI1@ +CFLAGS=-std=c99 -DLIBFTDI1=$(LIBFTDI1) @CFLAGS@ prefix=@prefix@ exec_prefix=@exec_prefix@ LIBDIR=@libdir@ @@ -26,19 +26,19 @@ example-code: make -C examples mpsse.o: support.o - $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c + $(CC) $(CFLAGS) -c mpsse.c fast.o: support.o - $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c fast.c + $(CC) $(CFLAGS) -c fast.c support.o: - $(CC) $(CFLAGS) -DLIBFTDI1=$(LIBFTDI1) -c support.c + $(CC) $(CFLAGS) -c support.c pyswig-build: - $(CC) $(CFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c support.c -o pyswig_support.o - $(CC) $(CFLAGS) -DSWIGPYTHON -DLIBFTDI1=$(LIBFTDI1) -c mpsse.c -o pyswig_mpsse.o + $(CC) $(CFLAGS) -DSWIGPYTHON -c support.c -o pyswig_support.o + $(CC) $(CFLAGS) -DSWIGPYTHON -c mpsse.c -o pyswig_mpsse.o $(SWIG) -python $(TARGET).i - $(CC) $(CFLAGS) -c -DLIBFTDI1=$(LIBFTDI1) $(TARGET)_wrap.c $(INC) + $(CC) $(CFLAGS) -c $(TARGET)_wrap.c $(INC) $(CC) $(CFLAGS) -shared $(FRAMEWORK) $(TARGET)_wrap.o pyswig_mpsse.o pyswig_support.o \ -o _pylib$(TARGET).so $(LDFLAGS) $(INC) From a2ba169a3d2ff6597c66f340c3ee6871c69e59d0 Mon Sep 17 00:00:00 2001 From: Maxim Sloyko Date: Mon, 25 Mar 2019 16:52:44 -0700 Subject: [PATCH 32/57] Extra whitespace cleanup in mpsse.c --- src/mpsse.c | 124 ++++++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/src/mpsse.c b/src/mpsse.c index 0e31742..4425222 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -21,9 +21,9 @@ #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 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 +31,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 +40,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. */ @@ -75,7 +75,7 @@ struct mpsse_context *MPSSE(enum modes mode, int freq, int endianess) return mpsse; } -/* +/* * Open device by VID/PID * * @vid - Device vendor ID. @@ -87,7 +87,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 +96,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,7 +109,7 @@ 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. */ @@ -150,7 +150,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 +161,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); @@ -175,9 +175,9 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int /* Give the chip a few mS to initialize */ usleep(SETUP_DELAY); - /* + /* * 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); } @@ -199,7 +199,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. @@ -365,32 +365,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 +419,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 +430,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 +442,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 +463,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 +484,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 +530,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 +539,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 +601,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,7 +635,7 @@ 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); } @@ -644,9 +644,9 @@ int Start(struct mpsse_context *mpsse) 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) @@ -662,7 +662,7 @@ int Start(struct mpsse_context *mpsse) { status |= set_bits_low(mpsse, (mpsse->pstart | SK)); } - + mpsse->status = STARTED; } else @@ -674,7 +674,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. @@ -745,28 +745,28 @@ int Write(struct mpsse_context *mpsse, const char *data, size_t size) { txsize = mpsse->xsize; } - - /* - * 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, (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) { @@ -817,17 +817,17 @@ char *InternalRead(struct mpsse_context *mpsse, size_t 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) { cnt = raw_read(mpsse, buf + n, rxsize); - if (cnt > 0) + if (cnt > 0) n += cnt; else { free(buf); @@ -858,7 +858,7 @@ char *InternalRead(struct mpsse_context *mpsse, size_t size) /* * Reads data over the selected serial protocol. - * + * * @mpsse - MPSSE context pointer. * @size - Number of bytes to read. * @@ -885,7 +885,7 @@ char *Read(struct mpsse_context *mpsse, size_t size) #endif } -/* +/* * Performs a bit-wise read of up to 8 bits. * * @mpsse - MPSSE context pointer. @@ -922,13 +922,13 @@ char ReadBits(struct mpsse_context *mpsse, size_t 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); } @@ -937,7 +937,7 @@ char ReadBits(struct mpsse_context *mpsse, size_t 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. @@ -1028,7 +1028,7 @@ char *Transfer(struct mpsse_context *mpsse, const char *data, size_t size) * Returns either an ACK (0) or a NACK (1). */ int GetAck(struct mpsse_context *mpsse) -{ +{ int ack = 0; if(is_valid_context(mpsse)) @@ -1116,7 +1116,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 @@ -1128,12 +1128,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. */ @@ -1161,7 +1161,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); @@ -1218,7 +1218,7 @@ int WritePins(struct mpsse_context *mpsse, uint8_t data) } } } - + return retval; } @@ -1286,8 +1286,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) @@ -1306,7 +1306,7 @@ char Version(void) } major = atoi(version_string); - + free(version_string); } From 6260cd89d19b105f3ee3a5f414c284beec2c4e21 Mon Sep 17 00:00:00 2001 From: Maxim Sloyko Date: Mon, 25 Mar 2019 16:55:04 -0700 Subject: [PATCH 33/57] Use nanosleep instead of usleep Also, define _POSIX_C_SOURCE in Makefile.in to get rid of the compiler warning. --- src/Makefile.in | 2 +- src/mpsse.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index 00a5801..898d592 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -7,7 +7,7 @@ FRAMEWORK=@FRAMEWORK@ BUILD=@BUILD@ LDFLAGS=@LDFLAGS@ LIBFTDI1=@LIBFTDI1@ -CFLAGS=-std=c99 -DLIBFTDI1=$(LIBFTDI1) @CFLAGS@ +CFLAGS=-std=c99 -DLIBFTDI1=$(LIBFTDI1) -D_POSIX_C_SOURCE=200809L @CFLAGS@ prefix=@prefix@ exec_prefix=@exec_prefix@ LIBDIR=@libdir@ diff --git a/src/mpsse.c b/src/mpsse.c index 4425222..a1d51e2 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -8,7 +8,7 @@ #include #include #include -#include +#include #if LIBFTDI1 == 1 #include @@ -173,7 +173,10 @@ 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. From fe902514e1b9b6ac07ae0e214af41cf00cb37c08 Mon Sep 17 00:00:00 2001 From: Maxim Sloyko Date: Tue, 26 Mar 2019 19:47:39 -0700 Subject: [PATCH 34/57] Major overhaul of the build system This is a large change, but since it involved the changes to the build system, it is extremely hard to split into smaller chunks. Use automake to generate makefiles. This documentation was used to write build rules for python wrappers in Makefile.am: https://github.com/swig/swig/wiki/FAQ#autotools-integration configure.ac rewritten substantially to use existing checks and canonical m4sh constructs, where applicable. The check for LibFTDI version in the source code has been changed to a canonical "HAVE_LIBFTDI". --- .gitignore | 26 ++++++++ src/Makefile.am | 43 +++++++++++++ src/Makefile.in | 79 ------------------------ src/configure.ac | 129 +++++++++++++++++---------------------- src/examples/Makefile | 27 -------- src/examples/Makefile.am | 5 ++ src/mpsse.c | 6 -- src/mpsse.h | 6 +- src/support.c | 18 ++---- 9 files changed, 140 insertions(+), 199 deletions(-) create mode 100644 src/Makefile.am delete mode 100644 src/Makefile.in delete mode 100644 src/examples/Makefile create mode 100644 src/examples/Makefile.am diff --git a/.gitignore b/.gitignore index a1a688c..50d34fa 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ *.o *.a *.so +*.lo +*.la src/Makefile src/autom4te.cache src/config.h @@ -17,3 +19,27 @@ 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 diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..c07921a --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,43 @@ +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 + +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 $< $@ + +install-exec-hook: + -rm ${pythondir}/_pylibmpsse.so + $(CREATE_LINK) + +uninstall-hook: + -rm ${pythondir}/_pylibmpsse.so diff --git a/src/Makefile.in b/src/Makefile.in deleted file mode 100644 index 898d592..0000000 --- a/src/Makefile.in +++ /dev/null @@ -1,79 +0,0 @@ -CC=@CC@ -SWIG=@SWIG@ -PYDEV=@PYDEV@ -PYLIB=@PYLIB@ -SONAME=@SONAME@ -FRAMEWORK=@FRAMEWORK@ -BUILD=@BUILD@ -LDFLAGS=@LDFLAGS@ -LIBFTDI1=@LIBFTDI1@ -CFLAGS=-std=c99 -DLIBFTDI1=$(LIBFTDI1) -D_POSIX_C_SOURCE=200809L @CFLAGS@ -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) -c mpsse.c - -fast.o: support.o - $(CC) $(CFLAGS) -c fast.c - -support.o: - $(CC) $(CFLAGS) -c support.c - -pyswig-build: - $(CC) $(CFLAGS) -DSWIGPYTHON -c support.c -o pyswig_support.o - $(CC) $(CFLAGS) -DSWIGPYTHON -c mpsse.c -o pyswig_mpsse.o - $(SWIG) -python $(TARGET).i - $(CC) $(CFLAGS) -c $(TARGET)_wrap.c $(INC) - $(CC) $(CFLAGS) -shared $(FRAMEWORK) $(TARGET)_wrap.o pyswig_mpsse.o pyswig_support.o \ - -o _pylib$(TARGET).so $(LDFLAGS) $(INC) - -pyswig-install: - install -d -m755 $(DESTDIR)/$(PYLIB) - install -m644 pylib$(TARGET).py $(DESTDIR)/$(PYLIB)/pylib$(TARGET).py - install -m644 _pylib$(TARGET).so $(DESTDIR)/$(PYLIB)/_pylib$(TARGET).so - install -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 -m755 $(DESTDIR)/$(LIBDIR) $(DESTDIR)/$(INCDIR) - install -m644 $(TARGET).h $(DESTDIR)/$(INCDIR)/$(TARGET).h - install -m644 lib$(TARGET).so $(DESTDIR)/$(LIBDIR)/lib$(TARGET).so - install -m644 lib$(TARGET).a $(DESTDIR)/$(LIBDIR)/lib$(TARGET).a - install -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.ac b/src/configure.ac index 65971d0..e6c5722 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -2,87 +2,72 @@ AC_PREREQ([2.65]) 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 -Wextra -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 -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="$(echo 'from distutils.sysconfig import get_python_inc; print(get_python_inc())' | python)" - fi - - AC_CHECK_HEADERS([$PYDEV/Python.h],[],[echo "error: missing python header files" && exit 1]) +LT_INIT +AC_ENABLE_SHARED +AC_ENABLE_STATIC - 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]) +dnl Check to see if the libftdi1 headers have been installed +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])],[])],[]) + +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]) + +AM_CONDITIONAL([BUILD_PYTHON_WRAPPERS], [test "x$enable_python" != "xno"]) +AS_IF([test "x$enable_python" != "xno"], [ + 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_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/mpsse.c b/src/mpsse.c index a1d51e2..0596331 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -10,12 +10,6 @@ #include #include -#if LIBFTDI1 == 1 -#include -#else -#include -#endif - #include "mpsse.h" #include "support.h" #include "config.h" diff --git a/src/mpsse.h b/src/mpsse.h index 3bb5453..133e2b9 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -1,9 +1,9 @@ -#ifndef _LIBMPSSE_H_ +#ifndef _LIBMPSSE_H_ #define _LIBMPSSE_H_ #include -#if LIBFTDI1 == 1 +#if HAVE_LIBFTDI1 == 1 #include #else #include @@ -16,7 +16,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 diff --git a/src/support.c b/src/support.c index 77b14b2..2d8fea9 100644 --- a/src/support.c +++ b/src/support.c @@ -8,12 +8,6 @@ #include #include -#if LIBFTDI1 == 1 -#include -#else -#include -#endif - #include "mpsse.h" #include "support.h" @@ -52,9 +46,9 @@ 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); @@ -244,11 +238,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); @@ -290,8 +284,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); } } From d7b96d6467dfeca9d3235adac220c62c0b628a6d Mon Sep 17 00:00:00 2001 From: ms65 Date: Fri, 26 Jul 2019 13:01:39 +0200 Subject: [PATCH 35/57] Fix configure.ac / INSTALL for building from scratch - Package "libtool" must be installed - "autoreconf --install" is necessary to create missing files - config.h must be created --- docs/INSTALL | 4 ++-- src/configure.ac | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/INSTALL b/docs/INSTALL index e245066..1d2bbde 100644 --- a/docs/INSTALL +++ b/docs/INSTALL @@ -5,7 +5,7 @@ PREREQUISITES Libmpsse requires swig as well as the libftdi and python development packages. These can typically be installed by your Linux distro's package manager, for Debian: - # apt-get install swig libftdi-dev python-dev autoconf automake + # apt-get install swig libftdi-dev python-dev autoconf automake libtool For OSX, you will likely need to at least install libftdi from source. @@ -13,7 +13,7 @@ INSTALLATION With the required prerequisites installed, libmpsse can be built and installed: - $ autoreconf + $ autoreconf --install $ ./configure $ make # make install diff --git a/src/configure.ac b/src/configure.ac index e6c5722..fba07b3 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -70,4 +70,5 @@ AC_SUBST(PYTHON_INCLUDE) AC_SUBST(PYTHON_LIBS) AC_SUBST(LIBFTDI1) AC_CONFIG_FILES([Makefile examples/Makefile]) +AC_CONFIG_HEADERS([config.h]) AC_OUTPUT From 809adecfe9b07f52743b0e4b7aa8f5cf881124a2 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Sun, 29 Sep 2019 15:06:38 +0300 Subject: [PATCH 36/57] fixed the link to README.PYTHON.html fixes #10 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dedbf28..0f76e4a 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ in Python: 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](docs/README.PYTHON) files for more details. +See the [README.C](docs/README.C) and [README.PYTHON.html](docs/README.PYTHON.html) files for more details. # CODE EXAMPLES From 249fd23df4504f0f1a874e663ad93e59d048cfb5 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Sun, 29 Sep 2019 15:13:17 +0300 Subject: [PATCH 37/57] link to the installation instructions in README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0f76e4a..a2afeb8 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ chips. Additionally, it provides control over the GPIO pins on the FTDI chips an 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, From 3fcacada56cc8f2d22fefe0b8f7f64aaa4a4d12a Mon Sep 17 00:00:00 2001 From: elimohl Date: Sun, 29 Sep 2019 15:58:43 +0300 Subject: [PATCH 38/57] pylibmpsse wirte needs size; fix #9 --- src/mpsse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mpsse.py b/src/mpsse.py index a98c166..3299399 100644 --- a/src/mpsse.py +++ b/src/mpsse.py @@ -247,7 +247,7 @@ def Write(self, data): Returns MPSSE_OK on success. Raises an exception on failure. """ - if _mpsse.Write(self.context, data) == MPSSE_FAIL: + if _mpsse.Write(self.context, data, len(data)) == MPSSE_FAIL: raise Exception(self.ErrorString()) return MPSSE_OK From d9365c9235e2d1078cf01b28fbb1fc752666952f Mon Sep 17 00:00:00 2001 From: elimohl Date: Fri, 4 Oct 2019 23:48:35 +0300 Subject: [PATCH 39/57] Fixed mixed indentation --- src/examples/bitbang.py | 12 +- src/examples/ds1305.py | 80 ++--- src/examples/gpio.py | 12 +- src/examples/i2ceeprom.py | 66 ++-- src/examples/spiflash.py | 374 +++++++++---------- src/mpsse.py | 738 +++++++++++++++++++------------------- 6 files changed, 641 insertions(+), 641 deletions(-) diff --git a/src/examples/bitbang.py b/src/examples/bitbang.py index f6d41c6..a64a8e8 100755 --- a/src/examples/bitbang.py +++ b/src/examples/bitbang.py @@ -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.py b/src/examples/ds1305.py index 5041f60..4386afa 100755 --- a/src/examples/ds1305.py +++ b/src/examples/ds1305.py @@ -4,56 +4,56 @@ 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.py b/src/examples/gpio.py index 407af42..e523e6e 100755 --- a/src/examples/gpio.py +++ b/src/examples/gpio.py @@ -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.py b/src/examples/i2ceeprom.py index c097a1b..190cefa 100755 --- a/src/examples/i2ceeprom.py +++ b/src/examples/i2ceeprom.py @@ -2,39 +2,39 @@ 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.py b/src/examples/spiflash.py index f8518e8..d8b7f82 100755 --- a/src/examples/spiflash.py +++ b/src/examples/spiflash.py @@ -5,95 +5,95 @@ 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/mpsse.py b/src/mpsse.py index 3299399..e4698f1 100644 --- a/src/mpsse.py +++ b/src/mpsse.py @@ -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, 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() + @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() From a7b353b84bd0458863f1e7c3f5e7469f1dcc57e6 Mon Sep 17 00:00:00 2001 From: Derek Olson Date: Fri, 4 Oct 2019 16:34:03 -0500 Subject: [PATCH 40/57] add config.h before includes for mpsse.h fixes #13 --- src/examples/bitbang.c | 1 + src/examples/ds1305.c | 1 + src/examples/gpio.c | 1 + src/examples/i2ceeprom.c | 2 +- src/examples/spiflash.c | 1 + src/examples/spiflashfast.c | 2 +- src/fast.c | 1 + src/mpsse.c | 2 +- src/support.c | 1 + 9 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/examples/bitbang.c b/src/examples/bitbang.c index 68e9ec6..7cca7d6 100644 --- a/src/examples/bitbang.c +++ b/src/examples/bitbang.c @@ -1,3 +1,4 @@ +#include "config.h" #include #include #include 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/gpio.c b/src/examples/gpio.c index 326b626..f86fcea 100644 --- a/src/examples/gpio.c +++ b/src/examples/gpio.c @@ -1,3 +1,4 @@ +#include "config.h" #include #include #include 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/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/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 f520be1..faa03c8 100644 --- a/src/fast.c +++ b/src/fast.c @@ -7,6 +7,7 @@ */ #include +#include "config.h" #include "mpsse.h" #include "support.h" diff --git a/src/mpsse.c b/src/mpsse.c index 0596331..b904271 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -10,9 +10,9 @@ #include #include +#include "config.h" #include "mpsse.h" #include "support.h" -#include "config.h" /* List of known FT2232-based devices */ struct vid_pid supported_devices[] = { diff --git a/src/support.c b/src/support.c index 2d8fea9..a3bf3f1 100644 --- a/src/support.c +++ b/src/support.c @@ -8,6 +8,7 @@ #include #include +#include "config.h" #include "mpsse.h" #include "support.h" From fe0a0e12a6b7e71efd4c49fdfad5c6907f4147e1 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Sat, 19 Oct 2019 06:42:09 +0300 Subject: [PATCH 41/57] + travis-ci build --- .travis.yml | 9 +++++++++ README.md | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..478a23a --- /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 && make diff --git a/README.md b/README.md index a2afeb8..0c41214 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # 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 From d64842838e8266262e9b07b7cfc84e2a1ba31d83 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Sat, 19 Oct 2019 22:31:22 +0300 Subject: [PATCH 42/57] travis: utilize clang's static analyzer --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 478a23a..0adcea5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,4 +6,4 @@ before_install: - sudo apt-get update -qq - sudo apt-get install -qq libftdi-dev swig script: - - cd src && autoreconf --install && ./configure && make + - cd src && autoreconf --install && ./configure && scan-build make From 6783a4e0b5307227d44589a45309126ef5a39267 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Thu, 14 Nov 2019 18:16:41 +0300 Subject: [PATCH 43/57] docs: corrected python env vars as seen in https://github.com/l29ah/libmpsse/issues/16 --- docs/INSTALL | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/INSTALL b/docs/INSTALL index 1d2bbde..6329918 100644 --- a/docs/INSTALL +++ b/docs/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 From 254ef9aab3def7955107d65d4089110a404e038d Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Thu, 11 Mar 2021 15:14:24 -0800 Subject: [PATCH 44/57] Mark headers as C for C++ programs using the library. --- src/mpsse.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mpsse.h b/src/mpsse.h index 133e2b9..91b4e8c 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -1,6 +1,10 @@ #ifndef _LIBMPSSE_H_ #define _LIBMPSSE_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include #if HAVE_LIBFTDI1 == 1 @@ -224,5 +228,8 @@ 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 From a01d5118bb5c5a05b21fc3abf28c916777c89520 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Thu, 11 Mar 2021 15:19:36 -0800 Subject: [PATCH 45/57] Implement get_bits_high to fetch ACBUS pin states. --- src/support.c | 10 ++++++++++ src/support.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/support.c b/src/support.c index a3bf3f1..7433270 100644 --- a/src/support.c +++ b/src/support.c @@ -228,6 +228,16 @@ int set_bits_high(struct mpsse_context *mpsse, int port) return raw_write(mpsse, (unsigned char *) &buf, sizeof(buf)); } +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) { diff --git a/src/support.h b/src/support.h index d5fbf42..56fc77d 100644 --- a/src/support.h +++ b/src/support.h @@ -11,6 +11,7 @@ uint32_t div2freq(uint32_t system_clock, uint16_t div); 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 gpio_write(struct mpsse_context *mpsse, int pin, int direction); int is_valid_context(struct mpsse_context *mpsse); From a833dd9a75a820652b6a9ed55512470102b20dd8 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Tue, 16 Mar 2021 08:27:43 -0700 Subject: [PATCH 46/57] Fix build warning about incorrect memcpy use and update .gitignore. The bug should never happen, but the convoluted logic of fast_build_block_buffer makes it difficult for the compiler to understand it. --- .gitignore | 2 ++ src/fast.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 50d34fa..c8c4679 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ missing mpsse_wrap_python.c py-compile pyswig_*.c +config.h.in +stamp-h1 diff --git a/src/fast.c b/src/fast.c index faa03c8..ee7ce39 100644 --- a/src/fast.c +++ b/src/fast.c @@ -30,7 +30,7 @@ static int fast_build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, uns 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); From f8108cd224747a3f08e161af3e08bd9073a92848 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Thu, 11 Mar 2021 15:30:04 -0800 Subject: [PATCH 47/57] Fix deprecation warnings by using the new flush functions --- src/configure.ac | 3 +++ src/mpsse.c | 2 +- src/support.c | 2 +- src/support.h | 5 +++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/configure.ac b/src/configure.ac index fba07b3..6986fd9 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -37,6 +37,9 @@ AC_CHECK_HEADERS([libftdi1/ftdi.h], [LIBFTDI1=1], 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.]) + AC_PATH_PROG([SWIG], [swig], [no]) AM_PATH_PYTHON AC_ARG_VAR([PYTHON_INCLUDE], [Include flags for Python, bypassing python-config]) diff --git a/src/mpsse.c b/src/mpsse.c index b904271..21552fb 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -176,7 +176,7 @@ struct mpsse_context *OpenIndex(int vid, int pid, enum modes mode, int freq, int * 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. */ - ftdi_usb_purge_buffers(&mpsse->ftdi); + ftdi_tcioflush(&mpsse->ftdi); } } } diff --git a/src/support.c b/src/support.c index 7433270..0f8b8a8 100644 --- a/src/support.c +++ b/src/support.c @@ -52,7 +52,7 @@ int raw_read(struct mpsse_context *mpsse, unsigned char *buf, int size) * * Is this needed anymore? It slows down repetitive read operations by ~8%. */ - ftdi_usb_purge_rx_buffer(&mpsse->ftdi); + ftdi_tciflush(&mpsse->ftdi); } } diff --git a/src/support.h b/src/support.h index 56fc77d..6cdbd65 100644 --- a/src/support.h +++ b/src/support.h @@ -15,4 +15,9 @@ int get_bits_high(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 From a757bdffa561ada807d227551c64ab814845de07 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Thu, 11 Mar 2021 15:31:14 -0800 Subject: [PATCH 48/57] Implement OpenUsbDev to open a specific USB device by bus and address --- src/mpsse.c | 32 +++++++++++++++++++++++++++++++- src/mpsse.h | 1 + 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/mpsse.c b/src/mpsse.c index 21552fb..58ae541 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -69,6 +69,15 @@ 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 * @@ -108,6 +117,14 @@ struct mpsse_context *Open(int vid, int pid, enum modes mode, int freq, int endi * 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; @@ -126,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; diff --git a/src/mpsse.h b/src/mpsse.h index 91b4e8c..e6f7fec 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -178,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); From f8ec86091be43314389b50d72a427453c10d3f67 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Thu, 8 Apr 2021 14:51:51 +0300 Subject: [PATCH 49/57] Don't try to {un,}install the python wrapper if we weren't asked for it --- src/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Makefile.am b/src/Makefile.am index c07921a..4f10d93 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -35,9 +35,11 @@ pyswig_mpsse.c: mpsse.c 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 From 9ea558cfae1d74e6904d2d79860ed5ab7b7fc25d Mon Sep 17 00:00:00 2001 From: Jaap Crezee Date: Wed, 14 Apr 2021 12:47:03 +0200 Subject: [PATCH 50/57] make sure the header file mpsse.h is also installed --- src/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Makefile.am b/src/Makefile.am index 4f10d93..bb90bad 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,6 +18,8 @@ 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) From 4d3ab17686106dbf90d73b0ddcfba8d385b71ec6 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Fri, 16 Apr 2021 11:40:38 -0700 Subject: [PATCH 51/57] Implement get_bits_low. Verified with FT4232H Mini Module. --- src/support.c | 10 ++++++++++ src/support.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/support.c b/src/support.c index 0f8b8a8..3bc02a3 100644 --- a/src/support.c +++ b/src/support.c @@ -228,6 +228,16 @@ 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 }; diff --git a/src/support.h b/src/support.h index 6cdbd65..1e77747 100644 --- a/src/support.h +++ b/src/support.h @@ -12,6 +12,7 @@ unsigned char *build_block_buffer(struct mpsse_context *mpsse, uint8_t cmd, cons 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); From bf2cafe7097f216ccfb8c02b20724c88ca8f38a0 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Tue, 18 May 2021 18:44:24 +0300 Subject: [PATCH 52/57] cleanup ftdi context if it was initialized uses the internal structure of libftdi as seen in https://www.intra2net.com/en/developer/libftdi/documentation/ftdi_8c_source.html#l00091 fixes https://github.com/l29ah/libmpsse/issues/7 --- src/mpsse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mpsse.c b/src/mpsse.c index 58ae541..1ea4549 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -237,7 +237,7 @@ void Close(struct mpsse_context *mpsse) { if(mpsse) { - if(mpsse->open) + if(mpsse->ftdi.eeprom) { ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_RESET); ftdi_usb_close(&mpsse->ftdi); From 0b44e1327042775efcaf2a7eb7d1e7b1ab0ffa20 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Tue, 18 May 2021 18:49:55 +0300 Subject: [PATCH 53/57] Revert "cleanup ftdi context if it was initialized" This reverts commit bf2cafe7097f216ccfb8c02b20724c88ca8f38a0. apparently libftdi in Ubuntu 16.04.6 doesn't provide that hack --- src/mpsse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mpsse.c b/src/mpsse.c index 1ea4549..58ae541 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -237,7 +237,7 @@ void Close(struct mpsse_context *mpsse) { if(mpsse) { - if(mpsse->ftdi.eeprom) + if(mpsse->open) { ftdi_set_bitmode(&mpsse->ftdi, 0, BITMODE_RESET); ftdi_usb_close(&mpsse->ftdi); From 8e1ce70b57772bf1c9bb647bf0d5498e989f0ce9 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Tue, 18 May 2021 18:53:44 +0300 Subject: [PATCH 54/57] apparently we can cleanup regardless if libftdi opened its ctx just get plenty of ftdi errors but whatever fixes https://github.com/l29ah/libmpsse/issues/7 --- src/mpsse.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/mpsse.c b/src/mpsse.c index 58ae541..9beafc6 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -237,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; From 1cbd21e2f67be66509bec012b670231e9c52a51f Mon Sep 17 00:00:00 2001 From: Matthias Proske Date: Fri, 25 Nov 2022 11:10:25 +0100 Subject: [PATCH 55/57] Fix configure.ac: Don't check for python if we disable-python Don't look for swig or python if the flag --disable-python is used. This allows to have a minimalistic build environment without a python installation. --- src/configure.ac | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/configure.ac b/src/configure.ac index 6986fd9..c409f2d 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -40,14 +40,14 @@ AC_CHECK_LIB([ftdi1],[ftdi_init],[], 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.]) -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]) - 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"], [ @@ -66,11 +66,12 @@ AS_IF([test "x$enable_python" != "xno"], [ PYTHON_LIBS=`$PYTHON_CONFIG --libs` AC_MSG_RESULT([$PYTHON_LIBS]) ]) + + AC_SUBST(PYTHON_INCLUDE) + AC_SUBST(PYTHON_LIBS) ]) -AC_SUBST(PYTHON_INCLUDE) -AC_SUBST(PYTHON_LIBS) AC_SUBST(LIBFTDI1) AC_CONFIG_FILES([Makefile examples/Makefile]) AC_CONFIG_HEADERS([config.h]) From 2c91605695d7519db0257068cdf4a78703adcd7d Mon Sep 17 00:00:00 2001 From: stephendpmurphy Date: Fri, 28 Jan 2022 14:27:41 -0500 Subject: [PATCH 56/57] Make the mpsse supported device list external --- src/mpsse.c | 10 +++++----- src/mpsse.h | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/mpsse.c b/src/mpsse.c index 9beafc6..4721bc1 100644 --- a/src/mpsse.c +++ b/src/mpsse.c @@ -15,7 +15,7 @@ #include "support.h" /* List of known FT2232-based devices */ -struct vid_pid supported_devices[] = { +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" }, @@ -48,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; diff --git a/src/mpsse.h b/src/mpsse.h index e6f7fec..3af1201 100644 --- a/src/mpsse.h +++ b/src/mpsse.h @@ -223,6 +223,8 @@ swig_string_data Transfer(struct mpsse_context *mpsse, const char *data, size_t char *Read(struct mpsse_context *mpsse, size_t size); char *Transfer(struct mpsse_context *mpsse, const char *data, size_t 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); From af8c2f1feb9173b57f5b618322d94e54e9a467e2 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Fri, 25 Nov 2022 18:49:13 +0100 Subject: [PATCH 57/57] fixed warnings in examples --- src/examples/bitbang.c | 1 + src/examples/gpio.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/examples/bitbang.c b/src/examples/bitbang.c index 7cca7d6..ab6336a 100644 --- a/src/examples/bitbang.c +++ b/src/examples/bitbang.c @@ -1,6 +1,7 @@ #include "config.h" #include #include +#include #include int main(void) diff --git a/src/examples/gpio.c b/src/examples/gpio.c index f86fcea..59b0f11 100644 --- a/src/examples/gpio.c +++ b/src/examples/gpio.c @@ -1,6 +1,7 @@ #include "config.h" #include #include +#include #include int main(void)