dfu-programmer-0.6.1/0000755000076400010400000000000012127276760011454 500000000000000dfu-programmer-0.6.1/aclocal.m40000644000076400010400000010766312127275506013246 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR dfu-programmer-0.6.1/AUTHORS0000644000076400010400000000540012111526137012430 00000000000000Original Author: - Weston Schmidt Contributors: - Reinhard Arlt - at89c5131 chip support - Anton Blad - at90usb162 and at90usb82 chip support - David Brownell - compiler flag improvements - command line argument processing improvements - debugging system improvements - significant man page improvements - support for the at90usb series AVR chips - the beginnings of the move over to using stdint.h - Nick Hibma - bug fixes - Markus Schneider - OS X porting issues - Geoffrey Wossum - added reset command - Sean D'Epagnier - eeprom bug fix - 4K bootloader support fix - Peter Gammie - at90usb647 PID fix - Zachary Clifford - completed AVR32 support - identified a number of off-by-one errors waiting to happen - identified that AVR32 "User Pages" aren't supported yet - patch to allow proper handling of the trampoline code - patch to allow flashing user flash space & STDIN - patch to enable support for windows using mingw32 - patch to enable setting/getting fuses for the AVR32 devices - Donald Davis - patch with new AVR devices & testing of support for the devices - Brad Schick - identified that the flash memory overlaps the bootloader memory - identified the off-by-one issue when the bootloader is in upper memory - Xavier Leprevost - patch to fix an error in the avr32 user flash dump command - Dave Fletcher - patch to enable atmega32u2 chips - Torsten Rottmann - patch to enable libusb 1.0 support - Mitko - patch to enable at32uc3b1512 and at32uc3b0512 chips - Darren Gibbs - identified dead/bad code around the bootloader overlap checking - Holger Steinhaus - patch to enable atmega8u2 - Martin Guy - patch to enable automotive AVR32 flashing without a timeout - Simon Large - fix atmel_reset function - get rid of compiler warnings around fprintf statements - fix build system for selecting libusb-1.0 - atmega16u2 support - better support for Windows users - improve layout of help text - add security fuse support for AVR32 - Johannes Carlsson - patch to fix use of libusb in configure.ac - Grégory S. - identified too-late check for null pointer - Dmitry Nedospasov - support for xmega devices - Kees Bakker - support for atxmega256a3bu - David Nelson - support for at32uc3a4256s - support for using a specific usb bus/address - support for device serialisation - correction to --quiet output dfu-programmer-0.6.1/bootstrap.sh0000755000076400010400000000012512066122517013736 00000000000000#! /bin/sh aclocal -I m4 autoheader automake --foreign --add-missing --copy autoconf dfu-programmer-0.6.1/ChangeLog0000644000076400010400000007035612127263532013152 000000000000002013-04-04 Simon Large * src/commands.c Clarify some error messages and suggest that a validation fail may be due to not erasing first. 2013-04-04 Simon Large * doc/dfu-programmer.1 doc/dfu-programmer.html Document the fact that dfu-programmer requires separate erase and program commands, unlike BatchISP. 2013-02-22 Simon Large * configure.ac When building Configure on a system that does not have pkg-config installed, supply the default include and lib paths for libusb-1.0. 2013-02-21 Simon Large * doc/dfu-programmer.1 doc/dfu-programmer.html Apply patch sent by David Nelson and copy into the html help too. 2013-02-21 Simon Large * src/commands.c src/arguments.c src/arguments.h src/dfu.c src/dfu.h src/main.c AUTHORS Apply patch sent by David Nelson to add support for using a specific usb bus and device, to add device serialisation, add a new AVR32 device and clean up some output. 2013-01-24 Simon Large * doc/dfu-programmer.1 doc/dfu-programmer.html Update the documentation. 2013-01-23 Simon Large * src/commands.c src/arguments.c Do not attempt eeprom operations on devices without. Report unrecognised target device name better. 2013-01-23 Simon Large * src/commands.c src/atmel.c src/atmel.h Check the security fuse state for AVR32 to give a better error message. 2013-01-22 Simon Large * doc/dfu-programmer.html Add an html version of the man page. 2013-01-20 Simon Large * src/commands.c src/arguments.c src/arguments.h src/atmel.c src/atmel.h Add a new command to set the security fuse in AVR32 devices. 2013-01-19 Simon Large * src/commands.c src/dfu.c Improve some error messages. 2013-01-19 Simon Large * src/arguments.c Better presentation of help text. Use some simple switches for basic help: --help, --targets, --version. 2013-01-18 Simon Large, Kees Bakker * src/atmel.c Correct eeprom selection in dump-eeprom. The protcol differs between AVR and AVR32 families. 2013-01-18 Simon Large * src/arguments.c src/atmel.c src/commands.c src/dfu-device.h Better handling of device->type to make it easier to cover additional device classes (e.g. XMega) 2013-01-18 Simon Large * src/arguments.c Show target list in 4 columns 2013-01-18 Simon Large, Dmitry Nedospasov, Kees Bakker * src/arguments.c src/arguments.h Add definitions for atxmega devices 2013-01-18 Simon Large * windows/atmel_usb_dfu.inf Correct label for atxmega64a3u 2012-12-22 Simon Large * windows configwin.sh README: Include the libusb-win32 1.2.2 lib and header files which go with the Atmel-compiled 1.2.2 driver. 2012-12-21 Simon Large * src/arguments.c arguments.h: Add support for atmega16u2 2012-12-21 Simon Large * configure.ac: Correct the sense of the --disable-libusb_1_0 switch. If PKG_CHECK_MODULES is not defined, assume libusb 1.0 is available. Bug 3597941. 2012-12-20 Simon Large * src/atmel.c: Test a pointer for NULL before using it. One instance was suggested in bug 3464910 and several more were found in the same file. 2012-12-20 Simon Large * configure.ac: Apply patch supplied by Johannes Carlsson to fix bug 3521662. 2012-12-20 Simon Large * src/commands.c: Use explicit casts for size_t values in printf to avoid a compiler warning. Bug 3597609. 2012-12-20 Simon Large * src/atmel.c: Fix the atmel_reset function as described by bug 3597607. 2011-09-22 Weston Schmidt * src/dfu.c: Apply fix suggested by bug 340959. Increase the timeout to support the automotive AVR32 chips. 2011-01-16 Weston Schmidt * fedora/dfu-programmer.spec.in, fedora/10-dfu-programmer.fdi, configure.ac, NEWS, AUTHORS, src/arguments.c, src/arguments.h, docs/dfu-programmer.1: Updated to the new 0.5.3 release. 2011-01-16 Weston Schmidt * src/arguments.c, src/arguments.h, fedora/10-dfu-programmer.fdi, doc/dfu-programmer.1: Added support for at32uc3c chips. 2011-01-16 Weston Schmidt * src/commands.c: Apply fix suggested by bug 3017901. Fix an off by 1 error for the bootloader size. 2011-01-16 Weston Schmidt * src/intel_hex.c: Apply fix suggested by bug 3016469. Fix a sign extension problem during reading in the data to flash. 2010-05-02 Weston Schmidt * AUTHORS, src/commands.c: Removed confusing & useless code that Darren Gibbs found. 2010-04-08 Weston Schmidt * AUTHORS, src/arguments.c, src/arguments.h doc/dfu-programmer.1: Added the patch Mitko sent to enable at32uc3b1512 and at32uc3b0512 chips. 2010-02-15 Weston Schmidt * config.h.in, configure.ac, AUTHORS, src/commands.c, src/dfu.c, src/dfu-device.h, src/dfu.h, src/main.c: Added the patch Torsten Rottmann sent to enable libusb 1.0 support, plus I some changes to allow for switching via a configure file flag. 2010-02-15 Weston Schmidt * src/arguments.c, src/arguments.h, dfu-programmer.1, AUTHORS: Added the patch Dave Fletcher sent to enable atmega32u2 support. 2009-09-09 Weston Schmidt * src/commands.c: Fix a bug due to the order of the bootloader suppression and the lower boundary verification. Additionally, fixed an off by 1 error in the flash address verification. 2009-08-22 Weston Schmidt * fedora/dfu-programmer.spec.in, configure.ac, NEWS: Updated to the new 0.5.2 release. 2009-08-13 Weston Schmidt * src/arguments.c, src/arguments.h, src/atmel.c, src/commands.c: Fixed the broken state that the AVR devices were in due to not selecting the correct memory page prior to flashing. Broke apart the eeprom/flash/user page flashing/dumping into separate functions so the maintenance will be easier. Cleaned up the address ranges so they are consistent across memory types. Fixed some debug statements that should have been going to stderr instead of stdout that made the output of a dump garbled. Cleaned up some more off by 1 errors that were in the dump functionality. Verified my changes on my AVR32 and AVR boards. 2009-05-31 Weston Schmidt * src/atmel.c: Fix a memory address identification bug that would cause the value 0xff to not be recognized. * src/commands.c, AUTHORS: Applied the patch that Xavier Leprevost created to allow dumping avr32 user flash properly. 2009-05-23 Weston Schmidt * src/atmel.c: Fix a buffer overrun error that would cause a core dump sometimes. 2009-04-30 Weston Schmidt * src/arguments.c, src/arguments.h, src/atmel.c, src/atmel.h, src/commands.c, AUTHORS: Applied the patch from Zachary Clifford to enable all the AVR32 fuses to be set or gotten (all BOD fuse setting is disabled for device safety since they can brick your device.) 2009-04-29 Weston Schmidt * src/arguments.c, src/atmel.c: Fix the off by one issue Brad pointed out for blank checking. Fix a bug in the blank checking for devices with greater than 65k of memory that were not AVR32 based, so that all the memory is checked, not just a portion of the lower bytes. 2009-04-28 Weston Schmidt * src/arguments.c, src/arguments.h, src/commands.c: Fix a memory overlap issue between the bootloader & the flash memory available for the new firmware. * AUTHORS: Added Brad Schick to the list of contributers. 2009-04-27 Weston Schmidt * src/atmel.c: Fix a crash due to larger sized images not being handled properly in a loop. 2009-01-22 Weston Schmidt * src/dfu.c: Applied the patch from Zachary Clifford to support Windows. * AUTHORS: Update the file to reflect Zach's patches. 2009-01-18 Weston Schmidt * src/arguments.c, src/arguments.h, src/atmel.c, src/atmel.h, src/commands.c, src/intel_hex.c, doc/dfu-programmer.1: Applied the patch from Zachary Clifford to support programming user flash on the AVR32 chips and reading flash information from STDIN. Additionally, updated the man page. 2008-12-10 Weston Schmidt * src/*, AUTHORS, docs/dfu-programmer.1 NEWS, fedora/dfu-programmer.spec.in, configure.ac: Applied the patch to add support for ignoring data writes that could take place in the bootloader region. 2008-12-03 Weston Schmidt * src/*, AUTHORS, docs/dfu-programmer.1: Update the project to support all the devices that FLIP supports. * NEWS, fedora/dfu-programmer.spec.in, configure.ac: Updated the latest news about the 0.5.0 release 2008-10-31 Weston Schmidt * src/*, AUTHORS, fedora/dfu-programmer.spec.in, docs/dfu-programmer.1: Apply Zachary Clifford patch to add more support for AVR32 devices & merged the two together. * src/*: Fixed a number of off-by-one errors that were all over the place. 2008-10-02 Weston Schmidt * src/atmel.c: Enable chip erase, blank checking and reading from flash for the AVR32 devices. 2008-10-01 Weston Schmidt * src/*, fedora/10-dfu-programmer.fdi: Change the parameters to use a struct instead of passing the usb information as separate parameters. Additionally cleaned up some of the code to make the way for AVR32 support & added very basic identification support. 2008-09-26 Weston Schmidt * src/arguments.c, AUTHORS: Fixed PID values for the at90usb82 and at90usb182 chips based on Peter's findings. 2008-09-13 Weston Schmidt * fedora/dfu-programmer.spec.in, fedora/10-dfu-programmer.fdi: Fixed the broken HAL rules. 2008-09-10 Weston Schmidt * src/arguments.c, src/arguments.h, atmel.c, atmel.h commands.c, commands.h, dfu-bool.h, dfu.c, dfu.h main.c: Changed to using dfu_bool & stdint.h values. * configure.ac: Removed dependency on stdbool.h. 2008-08-29 Weston Schmidt * fedora/dfu-programmer.spec.in, fedora/99-dfu-programmer.rules, fedora/10-dfu-programmer.fdi, fedora/dfu-programmer-at90usb.perms, fedora/dfu-programmer-at89c51.perms: Changed the permission handling code to be based on HAL instead of PAM to keep up with Fedora 9+ releases. * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.4.6 release 2008-08-20 Weston Schmidt * src/arguments.c, AUTHORS: Apply the patch Sean D'Epagnier sent to enable 4K bootloaders. * fedora/dfu-programmer.spec.in, configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.4.5 release 2008-07-22 Weston Schmidt * src/arguments.c, AUTHORS: Apply the patch Sean D'Epagnier sent to fix eeprom flashing. 2008-05-22 Weston Schmidt * docs/dfu-programmer.1, src/arguments.c, src/arguments.h, src/atmel.c, src/atmel.h, src/commands.c: Added support for eeprom-dump and eeprom-flash for the supported chips. * configure.ac, config.h.in: Added checks for stdbool.h stdint.h. 2007-11-19 Weston Schmidt * docs/dfu-programmer.1, src/arguments.c, src/arguments.h, src/commands.c, AUTHORS: Applied the patch that Geoffrey Wossum provided to add a reset command. * fedora/*: Adding udev rules for and permissions so that the console owner will automatically be able to flash any of the devices supported by dfu-programmer. * dfu-programmer.spec.in, Makefile.am, configure.ac: Moved the spec file into the fedora specific directory and excluded from the tar dist. * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.4.4 release 2007-08-15 Weston Schmidt * dfu-programmer.spec.in: Updating the license tag. 2007-08-12 Weston Schmidt * AUTHORS: added Anton Blad (for new devices) and Nick Hibma (for bug fixes) to the list of contributors. * configure.ac: Incremented the release number * docs/dfu-programmer.1: Added at90usb162 and at90usb82 devices * dfu-programmer.spec.in: Added the newly supported chips * NEWS: Updated the latest news about the 0.4.3 release * src/arguments.c, src/arguments.h: Applied the patch that Anton Blad provided to add support for the at90usb162 and at90usb82. 2007-07-22 Weston Schmidt * src/atmel.c: Fix the incorrect status to string conversion that Nick Hibma found and pointed out. * dfu-programmer.spec.in: Updating the file to be compliant with the Fedora requirements for packaging (again) 2007-07-07 Weston Schmidt * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.4.2 release * dfu-programmer.spec.in: Updating the file to be compliant with the Fedora requirements for packaging 2007-04-29 Weston Schmidt * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.4.1 release 2007-04-25 Weston Schmidt * docs/dfu-programmer.1: Added a KNOWN ISSUES section, updated the BUGS section, and corrected the Free Software Foundation address. * src/arguments.c: Adjusted the memory sizes for the at90 series of chips so they can take advantage of the entire amount of flash memory. * src/atmel.c, src/atmel.h: Add the concept and support for paged flash memory. I added this so that only devices that actually go into paged memory will try to make calls to the memory paging routine. I also did a bit of cleanup to allow a clean transition between the pages (so there are not regions of memory being flashed that overlap a flash memory page boundary). 2007-03-28 Weston Schmidt * m4/depcomp, m4/missing, src/dfu.c, src/intel_hex.c, src/commands.c, src/atmel.c, src/util.h, src/dfu.h, src/intel_hex.h, src/main.c, src/arguments.c, src/commands.h, src/atmel.h, src/arguments.h, src/util.c, COPYING: Updated the FSF address in the GPL license. 2007-01-27 Weston Schmidt * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.4.0 release * src/arguments.c, src/arguments.h: add two fields to the chip configuration structures to handle the two inconsistencies in the dfu firmware - the at90 chips need to be aborted initially, and the at90 chips don't return valid interface class and subclass information. Originally, the interface problem was thought to be related to OS X, but it now looks like it is the chipset. * src/dfu.c, src/dfu.h, src/main.c: add the handing of the new initial abort and interface class/subclass workarounds. 2007-01-16 Weston Schmidt * src/intel_hex.c: change the sscanf() parameter to an int from a char to be compliant with the sscanf() %x documentation stating that the output of %x is an int. 2007-01-14 Weston Schmidt * src/arguments.c: added the flash_page_size data and values to the data structure. I checked to make sure that the flash page size is correct for all of the processors. * src/arguments.h: added the flash_page_size data member to the programmer_arguments data structure. * src/atmel.c: updated the atmel_flash() functionality so that only the memory pages that need to be flashed are flashed. * src/atmel.h: updated the external interface for atmel_flash() to refelect the changes in src/atmel.c * src/commands.c: changed the passing of the argument structure to be a pointer instead of the actual full structure. Updated the execute_flash() functionality to support the changes made in src/atmel.x. * src/commands.h: updated the function prototype. * src/intel_hex.c: changed the processing of the hex strutures to allow the support of only flashing the memory locations that are actually programmed. * src/intel_hex.h: updated the function prototypes. * src/main.c: pass the pointer to the argument structure instead of passing the entire structure. 2007-01-07 Weston Schmidt * AUTHORS: added Markus Schneider for his OS X contributions * configure.ac: changed AC_CONFIG_HEADER to AM_CONFIG_HEADER to allow easier compiling on OS X. * src/dfu.c: added a workaround for OS X because it was not finding devices since the DFU interface information is not being correctly reported. 2007-01-06 Weston Schmidt * config.h.in: added the autogenerated information from autoheader. * configure.ac: added checking for errno.h stdarg.h and stddef.h to be more thorough in checking for required headers. * src/dfu.c: added an #ifdef around the EREMOTEIO case * src/intel_hex.c: refactored intel_read_data() to not use getline(), but to simply walk the file via fgets() and fgetc(). As it turns out, getline() wasn't really adding much value. 2006-11-28 Weston Schmidt * src/atmel.c: remove the dfu_make_idle() calls * src/dfu.c: large changes to allow the dfu module to discover and acquire the usb device. This change was required to allow the dfu module to try to transition a USB device from its runtime mode into its DFU mode. Part of this transition requires resetting, re-enumerating, and re-acquiring the device. All of this was not possible before because the main function held onto the device and it's handle. Additionally, when acquiring the device for the first time, the dfu module tries to put the device into the correct state, instead of punting this process to the later steps, when it is impossible to recover from. Finally, the variables named "device" were changed to be "handle" since that's what they really are and there are references to the actual "device" structure in dfu.c now. * src/dfu.h: updated the prototypes to reflect the changes in dfu.c. * src/main.c: remove the dfu_make_idle() calls and simplify the main function since most of the work is now being done in dfu.c. Additionally, move the device discovery to dfu.c 2006-11-19 Weston Schmidt * src/atmel.c: Added the dfu_make_idle() call before operations that communicate with the device being flashed. This should make the communications more reliable as it puts the device in a known state. Additionally, I added some better error messages in the hopes that it will be easier to diagnose the problem when commands to the device fail. Finally, I adjusted the return code checking for dfu_get_statue() to reflect the new interface of 0 for success or < 0 for errors. * src/commands.c: I fixed a poor error message. * src/dfu.c: I updated the dfu_get_status() function to simply return 0 on a success, or < 0 on an error. I added dfu_make_idle() to allow the device to be put in a known state or to force an early bailout. * src/dfu.h: dfu_make_idle() is publically available. 2006-11-19 Weston Schmidt * src/dfu.c: Added a DFU status to string conversion method and when debug is enabled, dfu_get_status() shows both the string and the number for the status. * src/dfu.h: the dfu_status_to_string() is made publically available. 2006-11-15 Weston Schmidt * src/atmel.c: Remove the init function since it is no longer needed. This re-works the debug message support so there is a simple macro DEBUG() that takes care of all the work. Additionally, this fixes an erasing problem where when the entire chip was supposed to be erased, it was not. This could cause problems because when the security bits are set, they could never be unset. * src/atmel.h: Remove the init function since it is no longer needed. * src/commands.c: This re-works the debug message support so there is a simple macro DEBUG() that takes care of all the work. * src/dfu.c: This re-works the debug message support so there is a simple macro DEBUG() that takes care of all the work. Additionally, there is no reason to have the init function since we are going to use the one external debug variable. This normalized all of the functions so they produce useful information when debug messages are enabled. Finally, this adds an error number to message converter so that tracking down errors is a bit easier. * src/dfu.h: Remove the init & debug functions. * src/main.c: Adjust the level needed to turn the libusb debugging messages on. Removed the atmel_init() call. * src/Makefile.am: Added util.c and util.h to be built. * src/util.c: Added the dfu_debug() function in a common location. * src/util.h: Added the dfu_debug() function in a common location. 2006-10-21 Weston Schmidt * dfu-programmer.spec.in: This resolves several of the problems present in the spec file. The goal is to be able to make this package part of the fedora extras. * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.3.1 release * docs/dfu-programmer.1: Update the SEE ALSO section, AUTHOR section and added the copyright information. 2006-06-24 Weston Schmidt * dfu-programmer.spec.in: Update the supported chips * NEWS: Updated the latest news about the 0.3.0 release * src/arguments.c: Adjusted the 8051 based chip memory sizes to be accurate, and the top memory address is calculated based off of the memory size. * src/arguments.h: Added top_memory_address to differentiate the memory size and top memory address. This resolves my question about the +1 offset. * src/atmel.c: Fix a bug where the last byte of memory was not being transferred from the device for validation purposes. * src/commands.c: Updated to use memory_size and top_memory_address depending on which value is needed, instead of using one value to serve both purposes. 2006-06-24 Weston Schmidt * dfu-programmer.spec.in: Update the supported chips * README: Added an instruction about building the source from CVS. 2006-06-19 Weston Schmidt * AUTHORS: Updated David Brownell's contributions - which makes up almost this entire check-in! * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.3.0 release * src/arguments.c: Added the new targets, made the target names case insensitive, added a version command line "command", updated the mechanism for matching commands, and updated debugging output. * src/arguments.h: Added new targets, and cleaned the arguments structure up a bit. * src/atmel.c: Applied general cleanup, matched the atmel.h interfaces and added an AVR a configuration reading function. * src/atmel.h: Updated the interface to allow for 8051 vs AVR differences. This also starts the use of stdint.h values. * src/commands.c: Updated to a more standard debugging system and added command checking for 8051 vs AVR differences. There is an open question about why we switch between args.memory_size and args.memory_size+1 in comparisons. I need to re-read up on why in the world I did args.memory_size+1 in the first place, then follow up with David about implications around the AVR chips. * src/dfu.c: Updated to a more standard debugging system and removed an overly verbose debug message. * src/intel_hex.c: Added comments about the record types, and added 20 bit address types for the larger amount of addressable flash memory. * src/main.c: Updated to a more standard debugging system, updated the failure messages to include the package information. * README: Updated description and list of supported chips 2006-06-18 Weston Schmidt * AUTHORS: Added David Brownell as a contributor. * configure: Removed because it is generated by bootstrap.sh * Makefile.in: Removed because it is generated * docs/Makefile.in: Removed because it is generated * src/Makefile.in: Removed because it is generated * src/Makefile.am: Applied David Brownell's patch that adds -Wall as a compiler option. 2005-05-07 Weston Schmidt * AUTHORS: Updated my email address * configure.ac: Incremented the release number * dfu-programmer.spec.in: Update the release to Fedora Core 5 * NEWS: Updated the latest news about the 0.2.2 release * src/main.c: Fix the failure cases so that if the USB interface was not acquired then it is not errantly released. 2005-11-21 Weston Schmidt * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.2.1 release 2005-11-21 Weston Schmidt * docs/dfu-programmer.1: Bring the man page in-line with the built in help, plus a bit more info. 2005-11-21 Weston Schmidt * src/main.c: Two minor fixes to allow it to work with newer 2.6.xx kernels. The first had to do with using a function call to get the buses to iterate over, and the second has to do with not setting a configuration. Apparently this doesn't need to be done. 2005-09-24 Weston Schmidt * configure.ac: Incremented the release number * NEWS: Updated the latest news about the 0.2.0 release * src/commands.c: Removed the hard-coded restrictions on sizes and instead malloc the space needed. Additionally the size is gotten from the arguments data structure, so that adding future devices should be easier. * src/arguments.h: Added memory_size to the programmer_arguments data structure. Restructured the targets_enum so that it can be used as keys into the target_map data structure for target to name resolution without needing to duplicate data. * src/arguments.c: Made the changes needed to take advantage of the memory size restructuring and changed the usage() function to use iteration instead of duplication to display supported chips 2005-09-24 Weston Schmidt * src/{*.c,*.h}, AUTHORS: removed the copyright information from the file so that the AUTHORS file can manage this information for the entire project 2005-09-24 Weston Schmidt * src/{arguments.c,arguments.h,atmel.c,commands.c}: applied Reinhard Arlt's patch that adds support for the at89c5131 chip dfu-programmer-0.6.1/config.h.in0000644000076400010400000000360312065326374013417 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have libusb. */ #undef HAVE_LIBUSB /* Define to 1 if you have libusb-1.0. */ #undef HAVE_LIBUSB_1_0 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `unsigned int' if does not define. */ #undef size_t dfu-programmer-0.6.1/configure0000755000076400010400000052022312127275522013302 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for dfu-programmer 0.6.1. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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. as_myself= 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. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$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 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 STATUS 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=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&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, old GNU/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='dfu-programmer' PACKAGE_TARNAME='dfu-programmer' PACKAGE_VERSION='0.6.1' PACKAGE_STRING='dfu-programmer 0.6.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="src/atmel.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='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM 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_maintainer_mode enable_dependency_tracking enable_libusb_1_0 ' 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= ;; *) 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 dfu-programmer 0.6.1 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/dfu-programmer] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of dfu-programmer 0.6.1:";; 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] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-libusb_1_0 disable libusb-1.0 support even if available 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 the package provider. _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 dfu-programmer configure 0.6.1 generated by GNU Autoconf 2.68 Copyright (C) 2010 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # 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; } > conftest.i && { 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # 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 eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; 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.i 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;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # 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; ${as_lineno_stack:+:} 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 eval \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_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 eval \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type 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 dfu-programmer $as_me 0.6.1, which was generated by GNU Autoconf 2.68. 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 $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" 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 $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" 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 $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" 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 $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" 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 # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac 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" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } 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 ac_aux_dir= for ac_dir in m4 "$srcdir"/m4; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in m4 \"$srcdir\"/m4" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip" $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 STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip" $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_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" 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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk 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 ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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_AWK="$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 AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=dfu-programmer VERSION=0.6.1 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Checks for programs. 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 ${ac_cv_prog_CC+:} false; 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 ${ac_cv_prog_ac_ct_CC+:} false; 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 ${ac_cv_prog_CC+:} false; 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 ${ac_cv_prog_CC+:} false; 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 ${ac_cv_prog_CC+:} false; 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 ${ac_cv_prog_ac_ct_CC+:} false; 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_error 77 "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 ${ac_cv_objext+:} false; 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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Checks for libusb - from sane-backends configuration disable_libusb_1_0=no # Check whether --enable-libusb_1_0 was given. if test "${enable_libusb_1_0+set}" = set; then : enableval=$enable_libusb_1_0; if test "x$enableval" = "xno"; then disable_libusb_1_0=yes; fi fi have_libusb_1_0=no if test "$disable_libusb_1_0" = "no"; then have_libusb_1_0=yes LIBUSB_1_0_CFLAGS=-I/usr/include/libusb-1.0 LIBUSB_1_0_LIBS=-L/usr/lib if test "$have_libusb_1_0" = "yes"; then $as_echo "using libusb_1.0"; CFLAGS="$CFLAGS $LIBUSB_1_0_CFLAGS" LIBS="$LIBS $LIBUSB_1_0_LIBS" HAVE_USB=yes fi fi if test "$have_libusb_1_0" = "no"; then $as_echo "using libusb"; 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 ${ac_cv_prog_CPP+:} false; 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.i 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.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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.i 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.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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 ${ac_cv_path_GREP+:} false; 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 ${ac_cv_path_EGREP+:} false; 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 ${ac_cv_header_stdc+:} false; 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 " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "usb.h" "ac_cv_header_usb_h" "$ac_includes_default" if test "x$ac_cv_header_usb_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usb_interrupt_read in -lusb" >&5 $as_echo_n "checking for usb_interrupt_read in -lusb... " >&6; } if ${ac_cv_lib_usb_usb_interrupt_read+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lusb $LIBS" # 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link 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 usb_interrupt_read (); int main () { return usb_interrupt_read (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_usb_usb_interrupt_read=yes else ac_cv_lib_usb_usb_interrupt_read=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_usb_usb_interrupt_read" >&5 $as_echo "$ac_cv_lib_usb_usb_interrupt_read" >&6; } if test "x$ac_cv_lib_usb_usb_interrupt_read" = xyes; then : LIBS="$LIBS -lusb" HAVE_USB=yes fi fi fi if test "$HAVE_USB" = "no"; then as_fn_error $? "USB support requested but required libraries not found." "$LINENO" 5 fi if test "$HAVE_USB" = "yes"; then if test "$have_libusb_1_0" = "yes"; then $as_echo "#define HAVE_LIBUSB_1_0 1" >>confdefs.h else $as_echo "#define HAVE_LIBUSB 1" >>confdefs.h fi fi # Checks for header files. { $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 ${ac_cv_header_stdc+:} false; 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 # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # Checks for library functions. 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" = xyes; 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 ${ac_cv_func_malloc_0_nonnull+:} false; 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 $as_echo_n "checking for working memcmp... " >&6; } if ${ac_cv_func_memcmp_working+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_memcmp_working=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Some versions of memcmp are not 8-bit clean. */ char c0 = '\100', c1 = '\200', c2 = '\201'; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) return 1; /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) return 1; } return 0; } ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_memcmp_working=yes else ac_cv_func_memcmp_working=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_memcmp_working" >&5 $as_echo "$ac_cv_func_memcmp_working" >&6; } test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac #AC_CHECK_FUNC([memset], :, [AC_CHECK_LIB([libc], [libc])]) ac_config_files="$ac_config_files fedora/dfu-programmer.spec Makefile docs/Makefile src/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 if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi 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}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= 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 if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${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. as_myself= 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 STATUS 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=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&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 dfu-programmer $as_me 0.6.1, which was generated by GNU Autoconf 2.68. 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 case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _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 --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ dfu-programmer config.status 0.6.1 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 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' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= 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"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --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 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _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 "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "fedora/dfu-programmer.spec") CONFIG_FILES="$CONFIG_FILES fedora/dfu-programmer.spec" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/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 test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands 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= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_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 -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # 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 {' >"$ac_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 >>"\$ac_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 >>"\$ac_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 < "$ac_tmp/subs1.awk" > "$ac_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 sole $(srcdir), # ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" 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="$ac_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 1 "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 >"$ac_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 # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _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 s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_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' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_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 "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; 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 1 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 dfu-programmer-0.6.1/configure.ac0000644000076400010400000000506712127266040013660 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) #AC_INIT(dfu-programmer, VERSION, BUG-REPORT-ADDRESS) AC_INIT([dfu-programmer],[0.6.1]) AC_CONFIG_AUX_DIR(m4) AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) AC_CONFIG_SRCDIR([src/atmel.c]) AM_CONFIG_HEADER([config.h]) AM_MAINTAINER_MODE # Checks for programs. AC_PROG_CC # Checks for libusb - from sane-backends configuration dnl Enable libusb-1.0, if available disable_libusb_1_0=no AC_ARG_ENABLE(libusb_1_0, AC_HELP_STRING([--disable-libusb_1_0], [disable libusb-1.0 support even if available]), [ if test "x$enableval" = "xno"; then disable_libusb_1_0=yes; fi ], []) dnl If libusb-1.0 is enabled and available, prefer that to the old libusb have_libusb_1_0=no if test "$disable_libusb_1_0" = "no"; then ifdef([PKG_CHECK_MODULES], [PKG_CHECK_MODULES(LIBUSB_1_0, [ libusb-1.0 >= 1.0.0 ], have_libusb_1_0=yes, have_libusb_1_0=no)], [have_libusb_1_0=yes LIBUSB_1_0_CFLAGS=-I/usr/include/libusb-1.0 LIBUSB_1_0_LIBS=-L/usr/lib]) if test "$have_libusb_1_0" = "yes"; then AS_ECHO("using libusb_1.0"); CFLAGS="$CFLAGS $LIBUSB_1_0_CFLAGS" LIBS="$LIBS $LIBUSB_1_0_LIBS" HAVE_USB=yes fi fi if test "$have_libusb_1_0" = "no"; then dnl Fallback to the old libusb dnl libusb >= 0.1.8 is required, as we need usb_interrupt_read() AS_ECHO("using libusb"); AC_CHECK_HEADER(usb.h, AC_CHECK_LIB(usb, usb_interrupt_read, [LIBS="$LIBS -lusb" HAVE_USB=yes])) fi dnl The following logic is useful for distributions. If they force dnl USB support with --enable-libusb=yes then configure will fail dnl when its detected that it can not be supported. Default is dnl "auto" which means only enable if libraries are found and do dnl not error out. if test "$HAVE_USB" = "no"; then AC_MSG_ERROR([USB support requested but required libraries not found.]) fi if test "$HAVE_USB" = "yes"; then if test "$have_libusb_1_0" = "yes"; then AC_DEFINE(HAVE_LIBUSB_1_0, 1, [Define to 1 if you have libusb-1.0.]) else AC_DEFINE(HAVE_LIBUSB, 1, [Define to 1 if you have libusb.]) fi fi # Checks for header files. AC_HEADER_STDC # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T # Checks for library functions. AC_FUNC_MALLOC AC_FUNC_MEMCMP #AC_CHECK_FUNC([memset], :, [AC_CHECK_LIB([libc], [libc])]) AC_CONFIG_FILES(fedora/dfu-programmer.spec Makefile docs/Makefile src/Makefile) AC_OUTPUT dfu-programmer-0.6.1/COPYING0000644000076400010400000004311512066122517012423 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. dfu-programmer-0.6.1/docs/0000755000076400010400000000000012127276763012407 500000000000000dfu-programmer-0.6.1/docs/dfu-programmer.10000644000076400010400000002156212127260566015340 00000000000000.TH DFU\-PROGRAMMER 1 "January 24, 2013" "DFU\-PROGRAMMER" "" .SH NAME dfu\-programmer \- USB firmware upgrading for Atmel microcontrollers .nh .SH SYNOPSIS .B dfu\-programmer target[:usb-bus,usb-addr] command [options] [parameters] .br .B dfu\-programmer --help .br .B dfu\-programmer --targets .br .B dfu\-programmer --version .SH DESCRIPTION .B dfu\-programmer is a multi-platform command line Device Firmware Upgrade (DFU) based programmer for the flash memory on Atmel AVR, AVR32, XMEGA and 8051 based microcontrollers which ship with a USB boot loader. It supports In System Programming (ISP) for developers and potentially product updates in the field. Those boot loaders are patterned after the standard USB DFU 1.0 class specification, but depend on extensions defined by Atmel to the extent that standard DFU drivers will not work. .PP To use it, first connect the device to be programmed and ensure that it comes up in DFU mode. The microcontrollers come up in that mode as shipped by Atmel; or they may reenter that mode after a special hardware reset. Then invoke this program to issue one or more DFU commands. You will normally need to start by issuing the "erase" command; the default security policies prevent extracting firmware, to prevent reverse engineering of what is usually proprietary code. .SH SUPPORTED MICROCONTROLLERS These chip names are used as the command line "target" parameter. .IP "8051 based controllers:" at89c51snd1c, at89c51snd2c, at89c5130, at89c5131, and at89c5132. .IP "AVR based controllers:" at90usb1287, at90usb1286, at90usb647, at90usb646, at90usb162, at90usb82, atmega32u6, atmega32u4, atmega32u2, atmega16u4, atmega16u2 and atmega8u2. .IP "AVR32 based controllers:" at32uc3a0128, at32uc3a1128, at32uc3a0256, at32uc3a1256, at32uc3a0512, at32uc3a1512, at32uc3a0512es, at32uc3a1512es, at32uc3a364, at32uc3a364s, at32uc3a3128, at32uc3a3128s, at32uc3a3256, at32uc3a3256s, at32uc3a4256s, at32uc3b064, at32uc3b164, at32uc3b0128, at32uc3b1128, at32uc3b0256, at32uc3b1256, at32uc3b0256es, at32uc3b1256es, at32uc3b1512, at32uc3b0512, at32uc3c064, at32uc3c0128, at32uc3c0256, at32uc3c0512, at32uc3c164, at32uc3c1128, at32uc3c1256, at32uc3c1512, at32uc3c264, at32uc3c2128, at32uc3c2256 and at32uc3c2512. .IP "XMEGA based controllers:" atxmega64a1u, atxmega128a1u, atxmega64a3u, atxmega128a3u, atxmega192a3u, atxmega256a3u, atxmega16a4u, atxmega32a4u, atxmega64a4u, atxmega128a4u, atxmega256a3bu, atxmega64b1, atxmega128b1, atxmega64b3, atxmega128b3, atxmega64c3, atxmega128c3, atxmega256c3, atxmega384c3 .SH USAGE There are no mechanisms to implement gang programming. By default, the first device that matches the id codes for the given target is selected. Many targets share the same id codes. Accordingly, you will usually avoid connecting more than one device of a given family (AVR, XMEGA, AVR32 or 8051) at a time. .PP The target may be qualified with the USB bus and address number of the device you wish to program. This allows programming multiple devices of the same family at the same time. .PP All of these commands support the "global options". Unless you override it, commands which write to the microcontroller will perform a validation step that rereads the data which was written, compares it to the expected result, and reports any errors. .PP Note that unlike Atmel's BatchISP program, dfu-programmer will only perform a single operation at a time. Erasing and programming require separate commands. .HP .B configure register [\-\-suppress\-validation] data .br Bootloaders for 8051 based controllers support writing certain configuration bytes. .HP .B dump .br Reads all the available flash memory, and writes it as binary data to stdout. .HP .B dump-eeprom .br Reads all the available eeprom memory, and writes it as binary data to stdout. .HP .B dump-user .br Reads the user space flash on the AVR32 chips and writes it as binary data to stdout. .HP .B erase [\-\-suppress\-validation] .br Erases all the flash memory. This is required before the bootloader will perform other commands. .HP .B flash [\-\-suppress\-validation] [\-\-suppress\-bootloader\-mem] [\-\-serial=hexbytes:offset] file or STDIN .br Writes flash memory. The input file (or stdin) must use the "ihex" file format convention for a memory image. \-\-suppress\-bootloader\-mem ignores any data written to the bootloader memory space when flashing the device. This option is particularly useful for the AVR32 chips .B trampoline code. .PP \-\-serial provides a way to inject a serial number or other unique sequence of bytes into the memory image programmed into the device. This allows using a single .ihex file to program multiple devices, and still give each device its own unique serial number. For example, \-\-serial=ABCDEF01:0x6000 would program the byte at 0x6000 with the hex value AB, the byte at 0x6001 with the value CD, and so on. There must be an even number of hex digits, but the sequence can be any length. The offset is assumed to be given in hex if it starts with a "0x" prefix, octal if it begins with a "0", otherwise is it assumed to be decimal. .HP .B flash-user [\-\-suppress\-validation] [\-\-serial=hexbytes:offset] file or STDIN .br Writes to user space flash on the AVR32 chips. This block of flash is out of the normal range of flash blocks and is designed to contain configuration parameters. The input file (or stdin) must use the "ihex" file format convention for a memory image. .HP .B flash-eeprom [\-\-suppress\-validation] [\-\-serial=hexbytes:offset] file or STDIN .br Writes to eeprom memory. The input file (or stdin) must use the "ihex" file format convention for a memory image. .HP .B setsecure .br Sets the security bit on AVR32 chips. This prevents the content being read back from the chip, except in the same session in which it was programmed. When the security fuse is set, almost nothing will work without first executing the erase command. The only way to clear the security fuse once set is to use a JTAG chip erase, which will also erase the bootloader. .HP .B get register .br Displays various product identifier bytes. .HP .B reset .br Resets microcontroller using watchdog timer .HP .B start .br Starts the application firmware by having the microcontroller jump to address zero. .SS Global Options \-\-quiet \- minimizes the output \-\-debug level \- enables verbose output at the specified level .SS Configure Registers The standard bootloader for 8051 based chips supports writing data bytes which are not relevant for the AVR based chips. .LP BSB \- boot status byte .br SBV \- software boot vector .br SSB \- software security byte .br EB \- extra byte .br HSB \- hardware security byte .SS Get Register bootloader\-version \- currently flashed bootloader version .br ID1 \- device boot identification 1 .br ID2 \- device boot identification 2 .br manufacturer \- the hardware manufacturer code .br family \- the product family code .br product\-name \- the product name .br product\-revision \- the product revision .br HSB \- same as the configure_register version .br BSB \- same as the configure_register version .br SBV \- same as the configure_register version .br SSB \- same as the configure_register version .br EB \- same as the configure_register version .SH BUGS None known. .SH KNOWN ISSUES The at90usb series chips do not make available any read/write protect flags so the .B dump or .B flash command may fail with a less than helpful error message. .PP To remove .B any write or read protection from any chips, a full chip erasure is required. For AVR32 chips an erase operation over USB will remove protection until the device is rebooted. To remove the protection more permanently requires a JTAG erase (which will also erase the bootloader). .PP You may need to be a member of the .B uucp group in order to have access to the device without needing to be root. .SH AUTHOR Weston Schmidt .SH SEE ALSO .UR dfu-programmer.sourceforge.net http://dfu-programmer.sourceforge.net .UR USB DFU Bootloader Datasheet (8052, AVR) http://www.atmel.com/Images/doc7618.pdf .UR AVR32 UC3 USB DFU Bootloader Protocol http://www.atmel.com/Images/doc32131.pdf .UR FLIP USB DFU Protocol http://www.atmel.com/Images/doc8457.pdf .UR AVR32 UC3 USB DFU Bootloader http://www.atmel.com/Images/doc7745.pdf .SH COPYRIGHT Copyright (C) 2005-2013 Weston Schmidt This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA dfu-programmer-0.6.1/docs/Makefile.am0000644000076400010400000000006612066122517014352 00000000000000man_MANS = dfu-programmer.1 EXTRA_DIST = $(man_MANS) dfu-programmer-0.6.1/docs/Makefile.in0000644000076400010400000002774512127275520014401 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = docs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = dfu-programmer.1 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign docs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-man uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: dfu-programmer-0.6.1/fedora/0000755000076400010400000000000012127276760012714 500000000000000dfu-programmer-0.6.1/fedora/10-dfu-programmer.fdi0000644000076400010400000000162212065120623016451 00000000000000 dfu-device access_control linux.device_file dfu-device uucp dfu-programmer-0.6.1/fedora/dfu-programmer.spec0000644000076400010400000001020112127276756016436 00000000000000Name: dfu-programmer Version: 0.6.1 Release: 1%{?dist} Summary: A Device Firmware Update based USB programmer for Atmel chips Group: Development/Tools License: GPLv2+ URL: http://dfu-programmer.sourceforge.net/ Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: libusb-devel >= 0.1.10a %description A linux based command-line programmer for Atmel chips with a USB bootloader supporting ISP. This is a mostly Device Firmware Update (DFU) 1.0 compliant user-space application. Supports all DFU enabled Atmel chips with USB support. %prep %setup -q %build %configure %{__make} %{?_smp_mflags} %install %{__rm} -rf %{buildroot} %{__make} DESTDIR=%{buildroot} install %{__install} -d %{buildroot}%{_datadir}/hal/fdi/information/20thirdparty %{__install} -pm 644 fedora/10-dfu-programmer.fdi %{buildroot}%{_datadir}/hal/fdi/information/20thirdparty/10-dfu-programmer.fdi %clean %{__rm} -rf %{buildroot} %files %defattr(-,root,root,-) %doc AUTHORS ChangeLog NEWS README COPYING %{_bindir}/%{name} %{_mandir}/man1/%{name}.1* %{_datadir}/hal/fdi/information/20thirdparty/10-dfu-programmer.fdi %changelog * Thu Apr 04 2013 Simon Large - 0.6.1-1 - Added support for specifying a USB bus and address - Added support for device serialization - Fix packaging problem when dist built on a Windows machine. - Clarified some error messages * Tue Jan 29 2013 Simon Large - 0.6.0-1 - Added support for xmega chips currently supported by FLIP - Do not attempt eeprom operations on devices without eeprom - Allow setting the security bit on AVR32 - Add HTML help file for Windows users - Added new commands --version, --help, --targets - Improved built in help text - Improved several error messages * Sat Dec 22 2012 Simon Large - 0.5.5-1 - added atmega16u2 support - fixed operation of reset command - more reliable autoconf operation * Sun Jan 16 2011 Weston Schmidt - 0.5.4-1 - added atmega8u2 support * Sun Jan 16 2011 Weston Schmidt - 0.5.3-1 - added at32uc3c* support - fixed a number of defects * Sat Aug 22 2009 Weston Schmidt - 0.5.2-1 - added ability to read from STDIN - added ability to configure AVR32 fuses - Applied a number of bug fixes - Fixed AVR device support * Wed Dec 10 2008 Weston Schmidt - 0.5.1-1 - add new flag to surpress bootloader memory checking * Wed Dec 03 2008 Weston Schmidt - 0.5.0-1 - update the description - fix the broken hal rules * Fri Aug 29 2008 Weston Schmidt - 0.4.6-1 - change udev rules and permissions to be hal based * Wed Aug 20 2008 Weston Schmidt - 0.4.5-1 - added 4K bootloader support - added eeprom-dump and eeprom-flash support - fixed the Source0 url * Mon Nov 19 2007 Weston Schmidt - 0.4.4-1 - added reset command - added udev rules and permissions * Sun Aug 15 2007 Weston Schmidt - 0.4.3-2 - updated the license tag * Sun Aug 12 2007 Weston Schmidt - 0.4.3-1 - see NEWS for details about this release * Fri Jul 20 2007 Weston Schmidt - 0.4.2-2 - updated the release to include the dist, and remove the runtime lib req. * Fri Jul 06 2007 Weston Schmidt - 0.4.2-1 - updating the release and other information to be ready to be part of fedora * Tue May 08 2007 Weston Schmidt - 0.4.1-1 - fixint the changelog and Source0 URL * Wed Oct 21 2006 Weston Schmidt - 0.3.1-1 - updated the release to get ready to be part of the fedora extras * Wed May 07 2006 Weston Schmidt - 0.3.0-1 - updated the release to Fedora Core 5 & the email address * Wed Aug 31 2005 Weston Schmidt - initial creation dfu-programmer-0.6.1/fedora/dfu-programmer.spec.in0000644000076400010400000001020512127276620017035 00000000000000Name: dfu-programmer Version: @VERSION@ Release: 1%{?dist} Summary: A Device Firmware Update based USB programmer for Atmel chips Group: Development/Tools License: GPLv2+ URL: http://dfu-programmer.sourceforge.net/ Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: libusb-devel >= 0.1.10a %description A linux based command-line programmer for Atmel chips with a USB bootloader supporting ISP. This is a mostly Device Firmware Update (DFU) 1.0 compliant user-space application. Supports all DFU enabled Atmel chips with USB support. %prep %setup -q %build %configure %{__make} %{?_smp_mflags} %install %{__rm} -rf %{buildroot} %{__make} DESTDIR=%{buildroot} install %{__install} -d %{buildroot}%{_datadir}/hal/fdi/information/20thirdparty %{__install} -pm 644 fedora/10-dfu-programmer.fdi %{buildroot}%{_datadir}/hal/fdi/information/20thirdparty/10-dfu-programmer.fdi %clean %{__rm} -rf %{buildroot} %files %defattr(-,root,root,-) %doc AUTHORS ChangeLog NEWS README COPYING %{_bindir}/%{name} %{_mandir}/man1/%{name}.1* %{_datadir}/hal/fdi/information/20thirdparty/10-dfu-programmer.fdi %changelog * Thu Apr 04 2013 Simon Large - 0.6.1-1 - Added support for specifying a USB bus and address - Added support for device serialization - Fix packaging problem when dist built on a Windows machine. - Clarified some error messages * Tue Jan 29 2013 Simon Large - 0.6.0-1 - Added support for xmega chips currently supported by FLIP - Do not attempt eeprom operations on devices without eeprom - Allow setting the security bit on AVR32 - Add HTML help file for Windows users - Added new commands --version, --help, --targets - Improved built in help text - Improved several error messages * Sat Dec 22 2012 Simon Large - 0.5.5-1 - added atmega16u2 support - fixed operation of reset command - more reliable autoconf operation * Sun Jan 16 2011 Weston Schmidt - 0.5.4-1 - added atmega8u2 support * Sun Jan 16 2011 Weston Schmidt - 0.5.3-1 - added at32uc3c* support - fixed a number of defects * Sat Aug 22 2009 Weston Schmidt - 0.5.2-1 - added ability to read from STDIN - added ability to configure AVR32 fuses - Applied a number of bug fixes - Fixed AVR device support * Wed Dec 10 2008 Weston Schmidt - 0.5.1-1 - add new flag to surpress bootloader memory checking * Wed Dec 03 2008 Weston Schmidt - 0.5.0-1 - update the description - fix the broken hal rules * Fri Aug 29 2008 Weston Schmidt - 0.4.6-1 - change udev rules and permissions to be hal based * Wed Aug 20 2008 Weston Schmidt - 0.4.5-1 - added 4K bootloader support - added eeprom-dump and eeprom-flash support - fixed the Source0 url * Mon Nov 19 2007 Weston Schmidt - 0.4.4-1 - added reset command - added udev rules and permissions * Sun Aug 15 2007 Weston Schmidt - 0.4.3-2 - updated the license tag * Sun Aug 12 2007 Weston Schmidt - 0.4.3-1 - see NEWS for details about this release * Fri Jul 20 2007 Weston Schmidt - 0.4.2-2 - updated the release to include the dist, and remove the runtime lib req. * Fri Jul 06 2007 Weston Schmidt - 0.4.2-1 - updating the release and other information to be ready to be part of fedora * Tue May 08 2007 Weston Schmidt - 0.4.1-1 - fixint the changelog and Source0 URL * Wed Oct 21 2006 Weston Schmidt - 0.3.1-1 - updated the release to get ready to be part of the fedora extras * Wed May 07 2006 Weston Schmidt - 0.3.0-1 - updated the release to Fedora Core 5 & the email address * Wed Aug 31 2005 Weston Schmidt - initial creation dfu-programmer-0.6.1/m4/0000755000076400010400000000000012127276757012002 500000000000000dfu-programmer-0.6.1/m4/depcomp0000755000076400010400000003677512066122517013303 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-02-09.22 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: dfu-programmer-0.6.1/m4/install-sh0000755000076400010400000002202112066122517013705 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-02-02.21 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: dfu-programmer-0.6.1/m4/missing0000755000076400010400000002517112066122517013311 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-02-08.22 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: dfu-programmer-0.6.1/Makefile.am0000644000076400010400000000016512066122517013422 00000000000000SUBDIRS = src docs EXTRA_DIST = bootstrap.sh fedora/10-dfu-programmer.fdi \ fedora/dfu-programmer.spec dfu-programmer-0.6.1/Makefile.in0000644000076400010400000005257112127275520013444 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure \ $(top_srcdir)/fedora/dfu-programmer.spec.in AUTHORS COPYING \ ChangeLog NEWS m4/depcomp m4/install-sh m4/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = fedora/dfu-programmer.spec CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src docs EXTRA_DIST = bootstrap.sh fedora/10-dfu-programmer.fdi \ fedora/dfu-programmer.spec all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 fedora/dfu-programmer.spec: $(top_builddir)/config.status $(top_srcdir)/fedora/dfu-programmer.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-hdr distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: dfu-programmer-0.6.1/NEWS0000644000076400010400000000650712127267043012075 00000000000000Release 0.6.1 * Added support for specifying a USB bus and address * Added support for device serialization * Fix packaging problem which failed to supply the default path for libusb-1.0 files when built on a machine without that package. * Clarified some error messages Release 0.6.0 * Added support for xmega chips currently supported by FLIP * Do not attempt eeprom operations on devices without eeprom * Allow setting the security bit on AVR32 * Add HTML help file for Windows users * Added new commands --version, --help, --targets * Improved built in help text * Improved several error messages Release 0.5.5 * Added support for atmega16u2 * Fixed operation of reset command * More reliable autoconf operation * Better support for Windows users Release 0.5.4 * Added support for a number of chips (at32uc3c series, atmega32u2, at32uc3b1512, at32uc3b0512 and atmega8u2). * Fixed a few off by 1 errors in flash verification & memory dumping. Release 0.5.2 * Added ability to read from STDIN. * Added ability to configure AVR32 fuses. * Applied a number of bug fixes. * Fixed AVR device support. Release 0.5.1 * Applied patch that fixes AVR32 support so that the trampoline code can be used. Release 0.5.0 * All known Atmel USB AVR/8051/AVR32 chips are now supported. * A number of cross platform friendly code changes have been added. Release 0.4.6 * Minor release changes - focused on changing the permission handling. code for fedora * This is the last planned 0.4.x release. The next release will be 0.5.0 and will be focused on better cross platform support (for windows, etc) in addition to new chips. Release 0.4.5 * Added support for 4K bootloaders on supported chips. * Added support for eeprom-dump and eeprom-flash on supported chips. Release 0.4.4 * Added new reset command * Added out of the box permission changes to allow the console owner to flash a device without needing to be root. Release 0.4.3 * Added support for the at90usb162 and at90usb82 chips. * Applied patch for incorrect status string conversion. Release 0.4.2 * Minor spec file changes to be Fedora compliant Release 0.4.1 * Added support for flashing both memory pages for the at90usb128x chips. * Updated the man page. Release 0.4.0 * Major set of fixes added for the at90xxx chips. * Optimized the flashing algorithm that only flashes the blocks needed based on the data being flashed, instead of flashing the entire chip each time (potentially saves s good deal of time during development) * The chip should be initialized better than before, increasing the likelihood of a successful operation. * Refined the code to allow OS X to compile and run dfu-programmer. Release 0.3.1 * Minor documentation changes and polishing of the spec file to get the project inline with what is needed to be part of the fedora extras. Release 0.3.0 * Added support for (AVR) at90usb1287, at90usb1286, at90usb647, at90usb646 chips. * Fixes a minor validation bug where the last byte of flash was not being correctly validated. Release 0.2.2 * Minor bug fix for a segmentation fault if only the usage is displayed. Release 0.2.1 * Minor bug fixes and documentation updates. Release 0.2 * Limited support for the at89c5132, at89c5131 and at89c5130 chip is added. where the known limitations now have to do with P1_CF, P3_CF, P4_CF not being supported (read or write). Release 0.1 * Initial release dfu-programmer-0.6.1/README0000644000076400010400000001171512127264113012246 00000000000000dfu-programmer is an implementation of the Device Firmware Upgrade class USB driver that enables firmware upgrades for various USB enabled (with the correct bootloader) Atmel chips. This program was created because the Atmel "FLIP" program for flashing devices does not support flashing via USB on Linux, and because standard DFU loaders do not work for Atmel's chips. Check out the Atmel website for more information. They are kind enough to provide generally correct specifications this implementation is based on. The project website is http://dfu-programmer.sourceforge.net and you can use that to check for updates. Currently Supported Chips ========================= 8051 based: at89c51snd1c at89c51snd2c at89c5130 at89c5131 at89c5132 AVR8 based: at90usb1287 at90usb1286 at90usb647 at90usb646 at90usb162 at90usb82 atmega32u6 atmega32u4 atmega32u2 atmega16u4 atmega16u2 AVR32 based: at32uc3a0128 at32uc3a1128 at32uc3a0256 at32uc3a1256 at32uc3a0512 at32uc3a1512 at32uc3a0512es at32uc3a1512es at32uc3a364 at32uc3a364s at32uc3a3128 at32uc3a3128s at32uc3a3256 at32uc3a3256s at32uc3b064 at32uc3b164 at32uc3b0128 at32uc3b1128 at32uc3b0256 at32uc3b1256 at32uc3b0256es at32uc3b1256es at32uc3b0512 at32uc3b1512 at32uc3c064 at32uc3c0128 at32uc3c0256 at32uc3c0512 at32uc3c164 at32uc3c1128 at32uc3c1256 at32uc3c1512 at32uc3c264 at32uc3c2128 at32uc3c2256 at32uc3c2512 Simple install procedure for Unix/Linux/MAC =========================================== % tar -xzf dfu-programmer-.tar.gz # unpack the sources % cd dfu-programmer # change to the top-level # directory [ If the source was checked-out from SVN, run the following command. You may also need to do this if your libusb is in a non-standard location, or if the build fails to find it for some reason. ] % ./bootstrap.sh # regenerate base config # files % ./configure # regenerate configure and # run it [ Optionally you can specify where dfu-programmer gets installed using the --prefix= option to the ./configure command. See % ./configure --help for more details. ] [ By default the build process will use libusb-1.0 if available. It tries to auto-discover the library, falling back to the older libusb if libusb-1.0 is not available. This process is not entirely reliable and may decide that libusb-1.0 is available when in fact it is not. You can select libusb using --disable-libusb_1_0. ] % make # build dfu-programmer [ Become root if necessary ] % make install # install dfu-programmer Build procedure for Windows =========================== Building Windows apps from source is never quite as simple ... Firstly you need to have MinGW and MSys with developer tools. Get them from http://sourceforge.net/projects/mingw/files/ The windows build uses the libusb-win32 library, which is a port of libusb 0.1. For convenience these files are included with this distribution, located in the windows sub-directory. You need to copy these files to your MinGW install directory if they are not already there: windows/usb.h -> {path-to-mingw}/include/usb.h windows/libusb.a -> {path-to-mingw}/lib/libusb.a Open the MinGW shell window and change to the dfu-programmer folder. Note that C:\dir is accessed in MinGW using the path /c/dir [ If the source was checked-out from SVN, run the following command ] $ ./bootstrap.sh $ ./configure --disable-libusb_1_0 $ make The executable will be built in the dfu-programmer/src folder. Windows Driver Files ==================== Atmel's FLIP programmer also uses libusb-win32, so we use the same library here and take advantage of Atmel's official certified driver set. The windows driver files can be downloaded as a separate zip file dfu-prog-usb-x.x.x.zip Building RPM Binary Packages ============================ This section is intended to make it easier for those people that wish to build RPMs from the source included in this package, but aren't sure how. 1) Copy dfu-programmer-.tar.gz to your RPM SOURCES directory. Usually this is /usr/src/redhat/SOURCES/. 2) Extract or copy dfu-programmer.spec into your RPM SPECS directory. Usually this is /usr/src/redhat/SPECS/. 3) In your RPM SPECS directory, issue the command 'rpm -ba dfu-programmer.spec'. This will cause rpm to extract the dfu-programmer sources to a temporary directory, build them, and build rpm packages based on the information in the spec file. The binary rpms will be put into your RPM RPMS directory. Usually this is /usr/src/redhat/RPMS//. If you have any further questions, please refer to the RPM documentation. dfu-programmer-0.6.1/src/0000755000076400010400000000000012127276761012244 500000000000000dfu-programmer-0.6.1/src/arguments.c0000644000076400010400000010750012111522666014327 00000000000000/* * dfu-programmer * * $Id: arguments.c 149 2013-02-21 22:54:47Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include #include "dfu-bool.h" #include "dfu-device.h" #include "config.h" #include "arguments.h" struct option_mapping_structure { const char *name; int32_t value; }; struct target_mapping_structure { const char *name; enum targets_enum value; atmel_device_class_t device_type; uint16_t chip_id; uint16_t vendor_id; size_t memory_size; size_t bootloader_size; dfu_bool bootloader_at_highmem; size_t flash_page_size; dfu_bool initial_abort; dfu_bool honor_interfaceclass; size_t eeprom_page_size; size_t eeprom_memory_size; }; /* NOTE FOR: at90usb1287, at90usb1286, at90usb647, at90usb646, at90usb162, at90usb82 * * The actual size of the user-programmable section is limited by the * space needed by the bootloader. The size of the bootloader is set * by BOOTSZ0/BOOTSZ1 fuse bits; here we assume the bootloader is 4kb or 8kb. * The window used for the bootloader is at the top of the of memory. * * For at89c5130/1 the bootloader is outside the normal flash area. * Which is why the boot size is marked as 0 bytes. * * VID and PID are the USB identifiers returned by the DFU bootloader. * They are defined by Atmel's bootloader code, and are not in the chip datasheet. * An incomplete list can be found the the various DFU bootloader docs. * If you plug the device in, lsusb or the Windows device manager can tell you * the VID and PID values. */ /* ----- target specific structures ----------------------------------------- */ static struct target_mapping_structure target_map[] = { // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "at89c51snd1c", tar_at89c51snd1c, ADC_8051, 0x2FFF, 0x03eb, 0x10000, 0x1000, true, 128, false, true, 0, 0 }, { "at89c51snd2c", tar_at89c51snd2c, ADC_8051, 0x2FFF, 0x03eb, 0x10000, 0x1000, true, 128, false, true, 0, 0 }, { "at89c5130", tar_at89c5130, ADC_8051, 0x2FFD, 0x03eb, 0x04000, 0x0000, true, 128, false, true, 128, 0x0400 }, { "at89c5131", tar_at89c5131, ADC_8051, 0x2FFD, 0x03eb, 0x08000, 0x0000, true, 128, false, true, 128, 0x0400 }, { "at89c5132", tar_at89c5132, ADC_8051, 0x2FFF, 0x03eb, 0x10000, 0x0C00, true, 128, false, true, 0, 0 }, // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "at90usb1287", tar_at90usb1287, ADC_AVR, 0x2FFB, 0x03eb, 0x20000, 0x2000, true, 128, true, false, 128, 0x1000 }, { "at90usb1286", tar_at90usb1286, ADC_AVR, 0x2FFB, 0x03eb, 0x20000, 0x2000, true, 128, true, false, 128, 0x1000 }, { "at90usb1287-4k", tar_at90usb1287_4k, ADC_AVR, 0x2FFB, 0x03eb, 0x20000, 0x1000, true, 128, true, false, 128, 0x1000 }, { "at90usb1286-4k", tar_at90usb1286_4k, ADC_AVR, 0x2FFB, 0x03eb, 0x20000, 0x1000, true, 128, true, false, 128, 0x1000 }, { "at90usb647", tar_at90usb647, ADC_AVR, 0x2FF9, 0x03eb, 0x10000, 0x2000, true, 128, true, false, 128, 0x0800 }, { "at90usb646", tar_at90usb646, ADC_AVR, 0x2FF9, 0x03eb, 0x10000, 0x2000, true, 128, true, false, 128, 0x0800 }, { "at90usb162", tar_at90usb162, ADC_AVR, 0x2FFA, 0x03eb, 0x04000, 0x1000, true, 128, true, false, 128, 0x0200 }, { "at90usb82", tar_at90usb82, ADC_AVR, 0x2FF7, 0x03eb, 0x02000, 0x1000, true, 128, true, false, 128, 0x0200 }, { "atmega32u6", tar_atmega32u6, ADC_AVR, 0x2FF2, 0x03eb, 0x08000, 0x1000, true, 128, true, false, 128, 0x0400 }, { "atmega32u4", tar_atmega32u4, ADC_AVR, 0x2FF4, 0x03eb, 0x08000, 0x1000, true, 128, true, false, 128, 0x0400 }, { "atmega32u2", tar_atmega32u2, ADC_AVR, 0x2FF0, 0x03eb, 0x08000, 0x1000, true, 128, true, false, 128, 0x0400 }, { "atmega16u4", tar_atmega16u4, ADC_AVR, 0x2FF3, 0x03eb, 0x04000, 0x1000, true, 128, true, false, 128, 0x0200 }, { "atmega16u2", tar_atmega16u2, ADC_AVR, 0x2FEF, 0x03eb, 0x04000, 0x1000, true, 128, true, false, 128, 0x0200 }, { "atmega8u2", tar_atmega8u2, ADC_AVR, 0x2FEE, 0x03eb, 0x02000, 0x1000, true, 128, true, false, 128, 0x0200 }, // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "at32uc3a0128", tar_at32uc3a0128, ADC_AVR32, 0x2FF8, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a1128", tar_at32uc3a1128, ADC_AVR32, 0x2FF8, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a0256", tar_at32uc3a0256, ADC_AVR32, 0x2FF8, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a1256", tar_at32uc3a1256, ADC_AVR32, 0x2FF8, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a0512", tar_at32uc3a0512, ADC_AVR32, 0x2FF8, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a1512", tar_at32uc3a1512, ADC_AVR32, 0x2FF8, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a0512es", tar_at32uc3a0512es, ADC_AVR32, 0x2FF8, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a1512es", tar_at32uc3a1512es, ADC_AVR32, 0x2FF8, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a364", tar_at32uc3a364, ADC_AVR32, 0x2FF1, 0x03eb, 0x10000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a364s", tar_at32uc3a364s, ADC_AVR32, 0x2FF1, 0x03eb, 0x10000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a3128", tar_at32uc3a3128, ADC_AVR32, 0x2FF1, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a3128s", tar_at32uc3a3128s, ADC_AVR32, 0x2FF1, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a3256", tar_at32uc3a3256, ADC_AVR32, 0x2FF1, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a3256s", tar_at32uc3a3256s, ADC_AVR32, 0x2FF1, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3a4256s", tar_at32uc3a4256s, ADC_AVR32, 0x2FF1, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "at32uc3b064", tar_at32uc3b064, ADC_AVR32, 0x2FF6, 0x03eb, 0x10000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b164", tar_at32uc3b164, ADC_AVR32, 0x2FF6, 0x03eb, 0x10000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b0128", tar_at32uc3b0128, ADC_AVR32, 0x2FF6, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b1128", tar_at32uc3b1128, ADC_AVR32, 0x2FF6, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b0256", tar_at32uc3b0256, ADC_AVR32, 0x2FF6, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b1256", tar_at32uc3b1256, ADC_AVR32, 0x2FF6, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b0256es", tar_at32uc3b0256es, ADC_AVR32, 0x2FF6, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b1256es", tar_at32uc3b1256es, ADC_AVR32, 0x2FF6, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b0512", tar_at32uc3b0512, ADC_AVR32, 0x2FF6, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3b1512", tar_at32uc3b1512, ADC_AVR32, 0x2FF6, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "at32uc3c064", tar_at32uc3c064, ADC_AVR32, 0x2FEB, 0x03eb, 0x10000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c0128", tar_at32uc3c0128, ADC_AVR32, 0x2FEB, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c0256", tar_at32uc3c0256, ADC_AVR32, 0x2FEB, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c0512", tar_at32uc3c0512, ADC_AVR32, 0x2FEB, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c164", tar_at32uc3c164, ADC_AVR32, 0x2FEB, 0x03eb, 0x10000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c1128", tar_at32uc3c1128, ADC_AVR32, 0x2FEB, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c1256", tar_at32uc3c1256, ADC_AVR32, 0x2FEB, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c1512", tar_at32uc3c1512, ADC_AVR32, 0x2FEB, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c264", tar_at32uc3c264, ADC_AVR32, 0x2FEB, 0x03eb, 0x10000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c2128", tar_at32uc3c2128, ADC_AVR32, 0x2FEB, 0x03eb, 0x20000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c2256", tar_at32uc3c2256, ADC_AVR32, 0x2FEB, 0x03eb, 0x40000, 0x2000, false, 512, false, true, 0, 0 }, { "at32uc3c2512", tar_at32uc3c2512, ADC_AVR32, 0x2FEB, 0x03eb, 0x80000, 0x2000, false, 512, false, true, 0, 0 }, // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "atxmega64a1u", tar_atxmega64a1u, ADC_XMEGA, 0x2FE8, 0x03eb, 0x10000, 0x1000, true, 256, true, false, 32, 0x0800 }, { "atxmega128a1u", tar_atxmega128a1u, ADC_XMEGA, 0x2FED, 0x03eb, 0x20000, 0x2000, true, 256, true, false, 32, 0x0800 }, { "atxmega64a3u", tar_atxmega64a3u, ADC_XMEGA, 0x2FE5, 0x03eb, 0x10000, 0x1000, true, 256, true, false, 32, 0x0800 }, { "atxmega128a3u", tar_atxmega128a3u, ADC_XMEGA, 0x2FE6, 0x03eb, 0x20000, 0x2000, true, 512, true, false, 32, 0x0800 }, { "atxmega192a3u", tar_atxmega192a3u, ADC_XMEGA, 0x2FE7, 0x03eb, 0x30000, 0x2000, true, 512, true, false, 32, 0x0800 }, { "atxmega256a3u", tar_atxmega256a3u, ADC_XMEGA, 0x2FEC, 0x03eb, 0x40000, 0x2000, true, 512, true, false, 32, 0x1000 }, { "atxmega16a4u", tar_atxmega16a4u, ADC_XMEGA, 0x2FE3, 0x03eb, 0x04000, 0x1000, true, 256, true, false, 32, 0x0400 }, { "atxmega32a4u", tar_atxmega32a4u, ADC_XMEGA, 0x2FE4, 0x03eb, 0x08000, 0x1000, true, 256, true, false, 32, 0x0400 }, { "atxmega64a4u", tar_atxmega64a4u, ADC_XMEGA, 0x2FDD, 0x03eb, 0x10000, 0x1000, true, 256, true, false, 32, 0x0800 }, { "atxmega128a4u", tar_atxmega128a4u, ADC_XMEGA, 0x2FDE, 0x03eb, 0x20000, 0x2000, true, 256, true, false, 32, 0x0800 }, { "atxmega256a3bu", tar_atxmega256a3bu, ADC_XMEGA, 0x2FE2, 0x03eb, 0x40000, 0x2000, true, 512, true, false, 32, 0x1000 }, // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "atxmega64b1", tar_atxmega64b1, ADC_XMEGA, 0x2FE1, 0x03eb, 0x10000, 0x1000, true, 256, true, false, 32, 0x0800 }, { "atxmega128b1", tar_atxmega128b1, ADC_XMEGA, 0x2FEA, 0x03eb, 0x20000, 0x2000, true, 256, true, false, 32, 0x0800 }, { "atxmega64b3", tar_atxmega64b3, ADC_XMEGA, 0x2FDF, 0x03eb, 0x10000, 0x1000, true, 256, true, false, 32, 0x0800 }, { "atxmega128b3", tar_atxmega128b3, ADC_XMEGA, 0x2FE0, 0x03eb, 0x20000, 0x2000, true, 256, true, false, 32, 0x0800 }, // Name ID (arguments.h) DevType PID VID MemSize BootSz BootHi FPage Abort IF EPage ESize { "atxmega64c3", tar_atxmega64c3, ADC_XMEGA, 0x2FD6, 0x03eb, 0x10000, 0x1000, true, 256, true, false, 32, 0x0800 }, { "atxmega128c3", tar_atxmega128c3, ADC_XMEGA, 0x2FD7, 0x03eb, 0x20000, 0x2000, true, 512, true, false, 32, 0x0800 }, { "atxmega256c3", tar_atxmega256c3, ADC_XMEGA, 0x2FDA, 0x03eb, 0x40000, 0x2000, true, 512, true, false, 32, 0x1000 }, { "atxmega384c3", tar_atxmega384c3, ADC_XMEGA, 0x2FDB, 0x03eb, 0x60000, 0x2000, true, 512, true, false, 32, 0x1000 }, { NULL } }; /* ----- command specific structures ---------------------------------------- */ static struct option_mapping_structure command_map[] = { { "configure", com_configure }, { "dump", com_dump }, { "dump-eeprom", com_edump }, { "dump-user", com_udump }, { "erase", com_erase }, { "flash", com_flash }, { "flash-user", com_user }, { "flash-eeprom", com_eflash }, { "get", com_get }, { "getfuse", com_getfuse }, { "setfuse", com_setfuse }, { "setsecure", com_setsecure }, { "reset", com_reset }, { "start", com_start_app }, { NULL } }; /* ----- configure specific structures -------------------------------------- */ static struct option_mapping_structure configure_map[] = { { "BSB", conf_BSB }, { "SBV", conf_SBV }, { "SSB", conf_SSB }, { "EB", conf_EB }, { "HSB", conf_HSB }, { NULL } }; /* ----- get specific structures -------------------------------------- */ static struct option_mapping_structure get_map[] = { { "bootloader-version", get_bootloader }, { "ID1", get_ID1 }, { "ID2", get_ID2 }, { "BSB", get_BSB }, { "SBV", get_SBV }, { "SSB", get_SSB }, { "EB", get_EB }, { "manufacturer", get_manufacturer }, { "family", get_family }, { "product-name", get_product_name }, { "product-revision", get_product_rev }, { "HSB", get_HSB }, { NULL } }; /* ----- getfuse specific structures ---------------------------------- */ static struct option_mapping_structure getfuse_map[] = { { "LOCK", get_lock }, { "EPFL", get_epfl }, { "BOOTPROT", get_bootprot }, { "BODLEVEL", get_bodlevel }, { "BODHYST", get_bodhyst }, { "BODEN", get_boden }, { "ISP_BOD_EN", get_isp_bod_en }, { "ISP_IO_COND_EN", get_isp_io_cond_en }, { "ISP_FORCE", get_isp_force }, { NULL } }; /* ----- setfuse specific structures ---------------------------------- */ static struct option_mapping_structure setfuse_map[] = { { "LOCK", set_lock }, { "EPFL", set_epfl }, { "BOOTPROT", set_bootprot }, { "BODLEVEL", set_bodlevel }, { "BODHYST", set_bodhyst }, { "BODEN", set_boden }, { "ISP_BOD_EN", set_isp_bod_en }, { "ISP_IO_COND_EN", set_isp_io_cond_en }, { "ISP_FORCE", set_isp_force }, { NULL } }; static void list_targets() { struct target_mapping_structure *map = NULL; int col = 0; map = target_map; fprintf( stderr, "targets:\n" ); while( 0 != *((int32_t *) map) ) { if( 0 == col ) { fprintf( stderr, " " ); } fprintf( stderr, " %-16s", map->name ); if( 4 == ++col ) { fprintf( stderr, "\n" ); col = 0; } map++; } if( 0 != col ) fprintf( stderr, "\n" ); } static void basic_help() { fprintf( stderr, "Type 'dfu-programmer --help' for a list of commands\n" ); fprintf( stderr, " 'dfu-programmer --targets' to list supported target devices\n" ); fprintf( stderr, " 'dfu-programmer --version' to show version information\n" ); } static void usage() { fprintf( stderr, "Usage: dfu-programmer target[:usb-bus,usb-addr] command [options] " "[global-options] [file|data]\n\n" ); fprintf( stderr, "global-options:\n" " --quiet\n" " --debug level (level is an integer specifying level of detail)\n" " Global options can be used with any command and must come\n" " after the command and before any file or data value\n\n" ); fprintf( stderr, "commands:\n" ); fprintf( stderr, " configure {BSB|SBV|SSB|EB|HSB} " "[--suppress-validation] data\n" ); fprintf( stderr, " dump\n" ); fprintf( stderr, " dump-eeprom\n" ); fprintf( stderr, " dump-user\n" ); fprintf( stderr, " erase [--suppress-validation]\n" ); fprintf( stderr, " flash [--suppress-validation] [--suppress-bootloader-mem]\n" " [--serial=hexdigits:offset] {file|STDIN}\n" ); fprintf( stderr, " flash-eeprom [--suppress-validation]\n" " [--serial=hexdigits:offset] {file|STDIN}\n" ); fprintf( stderr, " flash-user [--suppress-validation]\n" " [--serial=hexdigits:offset] {file|STDIN}\n" ); fprintf( stderr, " get {bootloader-version|ID1|ID2|BSB|SBV|SSB|EB|\n" " manufacturer|family|product-name|\n" " product-revision|HSB}\n" ); fprintf( stderr, " getfuse {LOCK|EPFL|BOOTPROT|BODLEVEL|BODHYST|\n" " BODEN|ISP_BOD_EN|ISP_IO_COND_EN|\n" " ISP_FORCE}\n" ); fprintf( stderr, " setfuse {LOCK|EPFL|BOOTPROT|BODLEVEL|BODHYST|\n" " BODEN|ISP_BOD_EN|ISP_IO_COND_EN|\n" " ISP_FORCE} data\n" ); fprintf( stderr, " setsecure\n" ); fprintf( stderr, " reset\n" ); fprintf( stderr, " start\n" ); } static int32_t assign_option( int32_t *arg, char *value, struct option_mapping_structure *map ) { while( 0 != *((int32_t *) map) ) { if( 0 == strcasecmp(value, map->name) ) { *arg = map->value; return 0; } map++; } return -1; } static int32_t assign_target( struct programmer_arguments *args, char *value, struct target_mapping_structure *map ) { while( 0 != *((int32_t *) map) ) { size_t name_len = strlen(map->name); if( 0 == strncasecmp(value, map->name, name_len) && (value[name_len] == '\0' || value[name_len] == ':')) { args->target = map->value; args->chip_id = map->chip_id; args->vendor_id = map->vendor_id; args->bus_id = 0; args->device_address = 0; if (value[name_len] == ':') { /* The target name includes USB bus and address info. * This is used to differentiate between multiple dfu * devices with the same vendor/chip ID numbers. By * specifying the bus and address, mltiple units can * be programmed at one time. */ int bus = 0; int address = 0; if( 2 != sscanf(&value[name_len+1], "%i,%i", &bus, &address) ) return -1; if (bus <= 0) return -1; if (address <= 0) return -1; args->bus_id = bus; args->device_address = address; } args->device_type = map->device_type; args->eeprom_memory_size = map->eeprom_memory_size; args->flash_page_size = map->flash_page_size; args->eeprom_page_size = map->eeprom_page_size; args->initial_abort = map->initial_abort; args->honor_interfaceclass = map->honor_interfaceclass; args->memory_address_top = map->memory_size - 1; args->memory_address_bottom = 0; args->flash_address_top = args->memory_address_top; args->flash_address_bottom = args->memory_address_bottom; args->bootloader_bottom = 0; args->bootloader_top = 0; args->bootloader_at_highmem = map->bootloader_at_highmem; if( true == map->bootloader_at_highmem ) { args->bootloader_bottom = map->memory_size - map->bootloader_size; args->bootloader_top = args->flash_address_top; args->flash_address_top -= map->bootloader_size; } else { args->bootloader_bottom = args->flash_address_bottom; args->bootloader_top += map->bootloader_size - 1; args->flash_address_bottom += map->bootloader_size; } switch( args->device_type ) { case ADC_8051: strncpy( args->device_type_string, "8051", DEVICE_TYPE_STRING_MAX_LENGTH ); break; case ADC_AVR: strncpy( args->device_type_string, "AVR", DEVICE_TYPE_STRING_MAX_LENGTH ); break; case ADC_AVR32: strncpy( args->device_type_string, "AVR32", DEVICE_TYPE_STRING_MAX_LENGTH ); break; case ADC_XMEGA: strncpy( args->device_type_string, "XMEGA", DEVICE_TYPE_STRING_MAX_LENGTH ); break; } return 0; } map++; } return -1; } static int32_t assign_global_options( struct programmer_arguments *args, const size_t argc, char **argv ) { size_t i = 0; /* Find '--quiet' if it is here */ for( i = 0; i < argc; i++ ) { if( 0 == strcmp("--quiet", argv[i]) ) { *argv[i] = '\0'; args->quiet = 1; break; } } /* Find '--suppress-bootloader-mem' if it is here */ for( i = 0; i < argc; i++ ) { if( 0 == strcmp("--suppress-bootloader-mem", argv[i]) ) { *argv[i] = '\0'; args->suppressbootloader = 1; break; } } /* Find '--suppress-validation' if it is here - even though it is not * used by all this is easier. */ for( i = 0; i < argc; i++ ) { if( 0 == strcmp("--suppress-validation", argv[i]) ) { *argv[i] = '\0'; switch( args->command ) { case com_configure: args->com_configure_data.suppress_validation = 1; break; case com_erase: args->com_erase_data.suppress_validation = 1; break; case com_flash: case com_eflash: case com_user: args->com_flash_data.suppress_validation = 1; break; default: /* not supported. */ return -1; } break; } } /* Find '--debug' if it is here */ for( i = 0; i < argc; i++ ) { if( 0 == strncmp("--debug", argv[i], 7) ) { if( 0 == strncmp("--debug=", argv[i], 8) ) { if( 1 != sscanf(argv[i], "--debug=%i", &debug) ) return -2; } else { if( (i+1) >= argc ) return -3; if( 1 != sscanf(argv[i+1], "%i", &debug) ) return -4; *argv[i+1] = '\0'; } *argv[i] = '\0'; break; } } /* Find '--serial=:' */ for( i = 0; i < argc; i++ ) { if( 0 == strncmp("--serial=", argv[i], 9) ) { *argv[i] = '\0'; switch( args->command ) { case com_flash: case com_eflash: case com_user: { char *hexdigits = &argv[i][9]; char *offset_start = hexdigits; size_t num_digits = 0; int16_t *serial_data = NULL; long serial_offset = 0; size_t j = 0; char buffer[3] = {0,0,0}; while (*offset_start != ':') { char c = *offset_start; if ('\0' == c) { return -1; } else if (('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')) { ++offset_start; } else { fprintf(stderr, "other character: '%c'\n", *offset_start); return -1; } } num_digits = offset_start - hexdigits; if (num_digits & 1) { fprintf(stderr,"There must be an even number of hexdigits in the serial data\n"); return -1; } *offset_start++ = '\0'; if( 1 != sscanf(offset_start, "%ld", &serial_offset) ) { fprintf(stderr, "sscanf failed\n"); return -1; } serial_data = (int16_t *) malloc( (num_digits/2) * sizeof(int16_t) ); for (j=0; j < num_digits; j+=2) { int data; buffer[0] = hexdigits[j]; buffer[1] = hexdigits[j+1]; buffer[2] = 0; if( 1 != sscanf(buffer, "%02x", &data) ) { fprintf(stderr, "sscanf failed with buffer: %s\n", buffer); return -1; } serial_data[j/2] = (int16_t)data; } args->com_flash_data.serial_data = serial_data; args->com_flash_data.serial_offset = serial_offset; args->com_flash_data.serial_length = num_digits/2; break; } default: /* not supported. */ fprintf(stderr,"command did not match: %d flash: %d\n", args->command, com_flash); return -1; } fprintf(stderr, "Success getting serial number\n"); break; } } return 0; } static int32_t assign_com_setfuse_option( struct programmer_arguments *args, const int32_t parameter, char *value ) { /* name & value */ if( 0 == parameter ) { /* name */ if( 0 != assign_option((int32_t *) &(args->com_setfuse_data.name), value, setfuse_map) ) { return -1; } } else { int32_t temp = 0; /* value */ if( 1 != sscanf(value, "%i", &(temp)) ) return -2; /* ensure the range is greater than 0 */ if( temp < 0 ) return -3; args->com_setfuse_data.value = temp; } return 0; } static int32_t assign_com_configure_option( struct programmer_arguments *args, const int32_t parameter, char *value ) { /* name & value */ if( 0 == parameter ) { /* name */ if( 0 != assign_option((int32_t *) &(args->com_configure_data.name), value, configure_map) ) { return -1; } } else { int32_t temp = 0; /* value */ if( 1 != sscanf(value, "%i", &(temp)) ) return -2; /* ensure the range is greater than 0 */ if( temp < 0 ) return -3; args->com_configure_data.value = temp; } return 0; } static int32_t assign_com_flash_option( struct programmer_arguments *args, const int32_t parameter, char *value ) { /* file */ args->com_flash_data.original_first_char = *value; args->com_flash_data.file = value; return 0; } static int32_t assign_com_getfuse_option( struct programmer_arguments *args, const int32_t parameter, char *value ) { /* name */ if( 0 != assign_option((int32_t *) &(args->com_getfuse_data.name), value, getfuse_map) ) { return -1; } return 0; } static int32_t assign_com_get_option( struct programmer_arguments *args, const int32_t parameter, char *value ) { /* name */ if( 0 != assign_option((int32_t *) &(args->com_get_data.name), value, get_map) ) { return -1; } return 0; } static int32_t assign_command_options( struct programmer_arguments *args, const size_t argc, char **argv ) { size_t i = 0; int32_t param = 0; int32_t required_params = 0; /* Deal with all remaining command-specific arguments. */ for( i = 0; i < argc; i++ ) { if( '\0' == *argv[i] ) continue; switch( args->command ) { case com_configure: required_params = 2; if( 0 != assign_com_configure_option(args, param, argv[i]) ) return -1; break; case com_setfuse: required_params = 2; if( 0 != assign_com_setfuse_option(args, param, argv[i]) ) return -1; break; case com_flash: case com_eflash: case com_user: required_params = 1; if( 0 != assign_com_flash_option(args, param, argv[i]) ) return -3; break; case com_getfuse: required_params = 1; if( 0 != assign_com_getfuse_option(args, param, argv[i]) ) return -4; break; case com_get: required_params = 1; if( 0 != assign_com_get_option(args, param, argv[i]) ) return -4; break; default: return -5; } *argv[i] = '\0'; param++; } if( required_params != param ) return -6; return 0; } static void print_args( struct programmer_arguments *args ) { const char *command = "(unknown)"; const char *target = "(unknown)"; size_t i; for( i = 0; i < sizeof(target_map) / sizeof(target_map[0]); i++ ) { if( args->target == target_map[i].value ) { target = target_map[i].name; break; } } for( i = 0; i < sizeof(command_map) / sizeof(command_map[0]); i++ ) { if( args->command == command_map[i].value ) { command = command_map[i].name; break; } } fprintf( stderr, " target: %s\n", target ); fprintf( stderr, " chip_id: 0x%04x\n", args->chip_id ); fprintf( stderr, " vendor_id: 0x%04x\n", args->vendor_id ); fprintf( stderr, " command: %s\n", command ); fprintf( stderr, " quiet: %s\n", (0 == args->quiet) ? "false" : "true" ); fprintf( stderr, " debug: %d\n", debug ); fprintf( stderr, "device_type: %s\n", args->device_type_string ); fprintf( stderr, "------ command specific below ------\n" ); switch( args->command ) { case com_configure: fprintf( stderr, " name: %d\n", args->com_configure_data.name ); fprintf( stderr, " validate: %s\n", (args->com_configure_data.suppress_validation) ? "false" : "true" ); fprintf( stderr, " value: %d\n", args->com_configure_data.value ); break; case com_erase: fprintf( stderr, " validate: %s\n", (args->com_erase_data.suppress_validation) ? "false" : "true" ); break; case com_flash: case com_eflash: case com_user: fprintf( stderr, " validate: %s\n", (args->com_flash_data.suppress_validation) ? "false" : "true" ); fprintf( stderr, " hex file: %s\n", args->com_flash_data.file ); break; case com_get: fprintf( stderr, " name: %d\n", args->com_get_data.name ); break; default: break; } fprintf( stderr, "\n" ); fflush( stdout ); } int32_t parse_arguments( struct programmer_arguments *args, const size_t argc, char **argv ) { int32_t i; int32_t status = 0; if( NULL == args ) return -1; /* initialize the argument block to empty, known values */ args->target = tar_none; args->command = com_none; args->quiet = 0; args->suppressbootloader = 0; /* Special case - check for the help commands which do not require a device type */ if( argc == 2 ) { if( 0 == strcasecmp(argv[1], "--version") ) { fprintf( stderr, PACKAGE_STRING "\n"); return -1; } if( 0 == strcasecmp(argv[1], "--targets") ) { list_targets(); return -1; } if( 0 == strcasecmp(argv[1], "--help") ) { usage(); return -1; } } /* Make sure there are the minimum arguments */ if( argc < 3 ) { basic_help(); return -1; } if( 0 != assign_target(args, argv[1], target_map) ) { fprintf( stderr, "Unsupported target '%s'.\n", argv[1]); status = -3; goto done; } if( 0 != assign_option((int32_t *) &(args->command), argv[2], command_map) ) { status = -4; goto done; } /* These were taken care of above. */ *argv[0] = '\0'; *argv[1] = '\0'; *argv[2] = '\0'; if( 0 != assign_global_options(args, argc, argv) ) { status = -5; goto done; } if( 0 != assign_command_options(args, argc, argv) ) { status = -6; goto done; } /* Make sure there weren't any *extra* options. */ for( i = 0; i < argc; i++ ) { if( '\0' != *argv[i] ) { fprintf( stderr, "unrecognized parameter\n" ); status = -7; goto done; } } /* if this is a flash command, restore the filename */ if( (com_flash == args->command) || (com_eflash == args->command) || (com_user == args->command) ) { if( 0 == args->com_flash_data.file ) { fprintf( stderr, "flash filename is missing\n" ); status = -8; goto done; } args->com_flash_data.file[0] = args->com_flash_data.original_first_char; } done: if( 1 < debug ) { print_args( args ); } if(-3 == status ) { list_targets(); } else if( 0 != status ) { usage(); } return status; } dfu-programmer-0.6.1/src/arguments.h0000644000076400010400000001706712111522666014344 00000000000000/* * dfu-programmer * * $Id: arguments.h 149 2013-02-21 22:54:47Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __ARGUMENTS_H__ #define __ARGUMENTS_H__ #include "dfu-bool.h" #include "dfu-device.h" #include "atmel.h" #define DEVICE_TYPE_STRING_MAX_LENGTH 6 /* * atmel_programmer target command * * configure {BSB|SBV|SSB|EB|HSB} [--suppress-validation, --quiet, --debug level] value * dump [--quiet, --debug level] * erase [--suppress-validation, --quiet, --debug level] * flash [--suppress-validation, --quiet, --debug level] file * get {bootloader-version|ID1|ID2|BSB|SBV|SSB|EB|manufacturer|family|product-name|product-revision|HSB} [--quiet, --debug level] */ extern int debug; enum targets_enum { tar_at89c51snd1c, tar_at89c51snd2c, tar_at89c5130, tar_at89c5131, tar_at89c5132, tar_at90usb1287, tar_at90usb1286, tar_at90usb1287_4k, tar_at90usb1286_4k, tar_at90usb647, tar_at90usb646, tar_at90usb162, tar_at90usb82, tar_atmega32u6, tar_atmega32u4, tar_atmega32u2, tar_atmega16u4, tar_atmega16u2, tar_atmega8u2, tar_at32uc3b064, tar_at32uc3b164, tar_at32uc3b0128, tar_at32uc3b1128, tar_at32uc3b0256, tar_at32uc3b1256, tar_at32uc3b0256es, tar_at32uc3b1256es, tar_at32uc3b0512, tar_at32uc3b1512, tar_at32uc3a0128, tar_at32uc3a1128, tar_at32uc3a0256, tar_at32uc3a1256, tar_at32uc3a0512, tar_at32uc3a1512, tar_at32uc3a0512es, tar_at32uc3a1512es, tar_at32uc3a364, tar_at32uc3a364s, tar_at32uc3a3128, tar_at32uc3a3128s, tar_at32uc3a3256, tar_at32uc3a3256s, tar_at32uc3a4256s, tar_at32uc3c064, tar_at32uc3c0128, tar_at32uc3c0256, tar_at32uc3c0512, tar_at32uc3c164, tar_at32uc3c1128, tar_at32uc3c1256, tar_at32uc3c1512, tar_at32uc3c264, tar_at32uc3c2128, tar_at32uc3c2256, tar_at32uc3c2512, tar_atxmega64a1u, tar_atxmega128a1u, tar_atxmega64a3u, tar_atxmega128a3u, tar_atxmega192a3u, tar_atxmega256a3u, tar_atxmega16a4u, tar_atxmega32a4u, tar_atxmega64a4u, tar_atxmega128a4u, tar_atxmega256a3bu, tar_atxmega64b1, tar_atxmega128b1, tar_atxmega64b3, tar_atxmega128b3, tar_atxmega64c3, tar_atxmega128c3, tar_atxmega256c3, tar_atxmega384c3, tar_none }; enum commands_enum { com_none, com_erase, com_flash, com_user, com_eflash, com_configure, com_get, com_getfuse, com_dump, com_edump, com_udump, com_setfuse, com_setsecure, com_start_app, com_version, com_reset }; enum configure_enum { conf_BSB = ATMEL_SET_CONFIG_BSB, conf_SBV = ATMEL_SET_CONFIG_SBV, conf_SSB = ATMEL_SET_CONFIG_SSB, conf_EB = ATMEL_SET_CONFIG_EB, conf_HSB = ATMEL_SET_CONFIG_HSB }; enum setfuse_enum { set_lock, set_epfl, set_bootprot, set_bodlevel, set_bodhyst, set_boden, set_isp_bod_en, set_isp_io_cond_en, set_isp_force }; enum get_enum { get_bootloader, get_ID1, get_ID2, get_BSB, get_SBV, get_SSB, get_EB, get_manufacturer, get_family, get_product_name, get_product_rev, get_HSB }; enum getfuse_enum { get_lock, get_epfl, get_bootprot, get_bodlevel, get_bodhyst, get_boden, get_isp_bod_en, get_isp_io_cond_en, get_isp_force }; struct programmer_arguments { /* target-specific inputs */ enum targets_enum target; uint16_t vendor_id; uint16_t chip_id; uint16_t bus_id; /* if non-zero, use bus_id and device_address */ uint16_t device_address; /* to identify the specific target device. */ atmel_device_class_t device_type; char device_type_string[DEVICE_TYPE_STRING_MAX_LENGTH]; uint32_t memory_address_top; /* the maximum memory address */ uint32_t memory_address_bottom; /* the minimum memory address */ uint32_t flash_address_top; /* the maximum flash-able address */ uint32_t flash_address_bottom; /* the minimum flash-able address */ uint32_t bootloader_top; /* the top of the bootloader code */ uint32_t bootloader_bottom; /* the bottom of the bootloader code */ dfu_bool bootloader_at_highmem; size_t flash_page_size; dfu_bool initial_abort; dfu_bool honor_interfaceclass; size_t eeprom_memory_size; size_t eeprom_page_size; /* command-specific state */ enum commands_enum command; char quiet; char suppressbootloader; union { struct com_configure_struct { enum configure_enum name; int32_t suppress_validation; int32_t value; } com_configure_data; struct com_setfuse_struct { enum setfuse_enum name; int32_t value; } com_setfuse_data; /* No special data needed for 'dump' */ struct com_erase_struct { int32_t suppress_validation; } com_erase_data; struct com_flash_struct { int32_t suppress_validation; char original_first_char; char *file; int16_t *serial_data; /* serial number or other device specific bytes */ size_t serial_offset; /* where the serial_data should be written */ size_t serial_length; /* how many bytes to write */ } com_flash_data; struct com_get_struct { enum get_enum name; } com_get_data; struct com_getfuse_struct { enum getfuse_enum name; } com_getfuse_data; }; }; int32_t parse_arguments( struct programmer_arguments *args, const size_t argc, char **argv ); #endif dfu-programmer-0.6.1/src/atmel.c0000644000076400010400000011553512100070120013410 00000000000000/* * dfu-programmer * * $Id: atmel.c 141 2013-01-23 23:20:48Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include #include #include "dfu-bool.h" #include "dfu-device.h" #include "config.h" #include "arguments.h" #include "dfu.h" #include "atmel.h" #include "util.h" /* * Atmel's firmware doesn't export a DFU descriptor in its config * descriptor, so we have to guess about parameters listed there. * We use 3KB for wTransferSize (MAX_TRANSFER_SIZE). */ #define ATMEL_MAX_TRANSFER_SIZE 0x0400 #define ATMEL_MAX_FLASH_BUFFER_SIZE (ATMEL_MAX_TRANSFER_SIZE + \ ATMEL_AVR32_CONTROL_BLOCK_SIZE + \ ATMEL_AVR32_CONTROL_BLOCK_SIZE + \ ATMEL_FOOTER_SIZE) #define ATMEL_FOOTER_SIZE 16 #define ATMEL_CONTROL_BLOCK_SIZE 32 #define ATMEL_AVR32_CONTROL_BLOCK_SIZE 64 #define ATMEL_DEBUG_THRESHOLD 50 #define ATMEL_TRACE_THRESHOLD 55 #define DEBUG(...) dfu_debug( __FILE__, __FUNCTION__, __LINE__, \ ATMEL_DEBUG_THRESHOLD, __VA_ARGS__ ) #define TRACE(...) dfu_debug( __FILE__, __FUNCTION__, __LINE__, \ ATMEL_TRACE_THRESHOLD, __VA_ARGS__ ) static int32_t atmel_flash_block( dfu_device_t *device, int16_t *buffer, const uint32_t base_address, const size_t length, const dfu_bool eeprom ); static int32_t atmel_select_flash( dfu_device_t *device ); static int32_t atmel_select_user( dfu_device_t *device ); static int32_t atmel_select_fuses( dfu_device_t *device ); static int32_t atmel_select_page( dfu_device_t *device, const uint16_t mem_page ); static int32_t __atmel_read_page( dfu_device_t *device, const uint32_t start, const uint32_t end, uint8_t* buffer, const dfu_bool eeprom ); /* returns 0 - 255 on success, < 0 otherwise */ static int32_t atmel_read_command( dfu_device_t *device, const uint8_t data0, const uint8_t data1 ) { if( NULL == device ) { DEBUG( "invalid arguments.\n" ); return -1; } if( GRP_AVR32 & device->type ) { //We need to talk to configuration memory. It comes //in two varieties in this chip. data0 is the command to //select it //Data1 is the byte of that group we want uint8_t command[4] = { 0x06, 0x03, 0x00, data0 }; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } int32_t result; uint8_t buffer[1]; result = __atmel_read_page( device, data1, data1+1, buffer, false ); if( 1 != result ) { return -5; } return (0xff & buffer[0]); } else { uint8_t command[3] = { 0x05, 0x00, 0x00 }; uint8_t data[1] = { 0x00 }; dfu_status_t status; command[1] = data0; command[2] = data1; TRACE( "%s( %p, 0x%02x, 0x%02x )\n", __FUNCTION__, device, data0, data1 ); if( 3 != dfu_download(device, 3, command) ) { DEBUG( "dfu_download failed\n" ); return -1; } if( 0 != dfu_get_status(device, &status) ) { DEBUG( "dfu_get_status failed\n" ); return -2; } if( DFU_STATUS_OK != status.bStatus ) { DEBUG( "status(%s) was not OK.\n", dfu_status_to_string(status.bStatus) ); return -3; } if( 1 != dfu_upload(device, 1, data) ) { DEBUG( "dfu_upload failed\n" ); return -4; } return (0xff & data[0]); } } int32_t atmel_read_fuses( dfu_device_t *device, atmel_avr32_fuses_t *info ) { if( NULL == device ) { DEBUG( "invalid arguments.\n" ); return -1; } if( GRP_AVR & device->type ) { DEBUG( "target does not support fuse operation.\n" ); fprintf( stderr, "target does not support fuse operation.\n" ); return -1; } if( 0 != atmel_select_fuses(device) ) { return -3; } int32_t result; uint8_t buffer[32]; int i; result = __atmel_read_page( device, 0, 32, buffer, false ); if( 32 != result ) { return -5; } info->lock = 0; for(i = 0; i < 16; i++) { info->lock = info->lock | (buffer[i] << i); } info->epfl = buffer[16]; info->bootprot = (buffer[19] << 2) | (buffer[18] << 1) | (buffer[17] << 0); info->bodlevel = 0; for(i = 20; i < 26; i++) { info->bodlevel = info->bodlevel | (buffer[i] << (i-20)); } info->bodhyst = buffer[26]; info->boden = (buffer[28] << 1) | (buffer[27] << 0); info->isp_bod_en = buffer[29]; info->isp_io_cond_en = buffer[30]; info->isp_force = buffer[31]; return 0; } /* * This reads in all of the configuration and Manufacturer Information * into the atmel_device_info data structure for easier use later. * * device - the usb_dev_handle to communicate with * info - the data structure to populate * * returns 0 if successful, < 0 if not */ int32_t atmel_read_config( dfu_device_t *device, atmel_device_info_t *info ) { typedef struct { uint8_t data0; uint8_t data1; uint8_t device_map; size_t offset; } atmel_read_config_t; /* These commands are documented in Appendix A of the * "AT89C5131A USB Bootloader Datasheet" or * "AT90usb128x/AT90usb64x USB DFU Bootloader Datasheet" */ static const atmel_read_config_t data[] = { { 0x00, 0x00, (ADC_8051 | ADC_AVR), offsetof(atmel_device_info_t, bootloaderVersion) }, { 0x04, 0x00, (ADC_AVR32), offsetof(atmel_device_info_t, bootloaderVersion) }, { 0x00, 0x01, (ADC_8051 | ADC_AVR), offsetof(atmel_device_info_t, bootID1) }, { 0x04, 0x01, (ADC_AVR32), offsetof(atmel_device_info_t, bootID1) }, { 0x00, 0x02, (ADC_8051 | ADC_AVR), offsetof(atmel_device_info_t, bootID2) }, { 0x04, 0x02, (ADC_AVR32), offsetof(atmel_device_info_t, bootID2) }, { 0x01, 0x30, (ADC_8051 | ADC_AVR), offsetof(atmel_device_info_t, manufacturerCode) }, { 0x05, 0x00, (ADC_AVR32), offsetof(atmel_device_info_t, manufacturerCode) }, { 0x01, 0x31, (ADC_8051 | ADC_AVR), offsetof(atmel_device_info_t, familyCode) }, { 0x05, 0x01, (ADC_AVR32), offsetof(atmel_device_info_t, familyCode) }, { 0x01, 0x60, (ADC_8051 | ADC_AVR), offsetof(atmel_device_info_t, productName) }, { 0x05, 0x02, (ADC_AVR32), offsetof(atmel_device_info_t, productName) }, { 0x01, 0x61, (ADC_8051 | ADC_AVR), offsetof(atmel_device_info_t, productRevision) }, { 0x05, 0x03, (ADC_AVR32), offsetof(atmel_device_info_t, productRevision) }, { 0x01, 0x00, ADC_8051, offsetof(atmel_device_info_t, bsb) }, { 0x01, 0x01, ADC_8051, offsetof(atmel_device_info_t, sbv) }, { 0x01, 0x05, ADC_8051, offsetof(atmel_device_info_t, ssb) }, { 0x01, 0x06, ADC_8051, offsetof(atmel_device_info_t, eb) }, { 0x02, 0x00, ADC_8051, offsetof(atmel_device_info_t, hsb) } }; int32_t result; int32_t retVal = 0; int32_t i = 0; TRACE( "%s( %p, %p )\n", __FUNCTION__, device, info ); if( NULL == device ) { DEBUG( "invalid arguments.\n" ); return -1; } for( i = 0; i < sizeof(data)/sizeof(atmel_read_config_t); i++ ) { atmel_read_config_t *row = (atmel_read_config_t*) &data[i]; if( row->device_map & device->type ) { int16_t *ptr = row->offset + (void *) info; result = atmel_read_command( device, row->data0, row->data1 ); if( result < 0 ) { retVal = result; } *ptr = result; } } return retVal; } /* * * device - the usb_dev_handle to communicate with * mode - the mode to use when erasing flash * ATMEL_ERASE_BLOCK_0 * ATMEL_ERASE_BLOCK_1 * ATMEL_ERASE_BLOCK_2 * ATMEL_ERASE_BLOCK_3 * ATMEL_ERASE_ALL * * returns status DFU_STATUS_OK if ok, anything else on error */ int32_t atmel_erase_flash( dfu_device_t *device, const uint8_t mode ) { uint8_t command[3] = { 0x04, 0x00, 0x00 }; dfu_status_t status; int32_t i; TRACE( "%s( %p, %d )\n", __FUNCTION__, device, mode ); switch( mode ) { case ATMEL_ERASE_BLOCK_0: command[2] = 0x00; break; case ATMEL_ERASE_BLOCK_1: command[2] = 0x20; break; case ATMEL_ERASE_BLOCK_2: command[2] = 0x40; break; case ATMEL_ERASE_BLOCK_3: command[2] = 0x80; break; case ATMEL_ERASE_ALL: command[2] = 0xff; break; default: return -1; } if( 3 != dfu_download(device, 3, command) ) { DEBUG( "dfu_download failed\n" ); return -2; } /* It looks like it can take a while to erase the chip. * We will try for 10 seconds before giving up. */ for( i = 0; i < 10; i++ ) { if( 0 == dfu_get_status(device, &status) ) { return status.bStatus; } } return -3; } int32_t atmel_set_fuse( dfu_device_t *device, const uint8_t property, const uint32_t value ) { int32_t result; int16_t buffer[16]; int32_t address; int8_t numbytes; int8_t i; if( NULL == device ) { DEBUG( "invalid arguments.\n" ); return -1; } if( GRP_AVR & device->type ) { DEBUG( "target does not support fuse operation.\n" ); fprintf( stderr, "target does not support fuse operation.\n" ); return -1; } if( 0 != atmel_select_fuses(device) ) { return -3; } switch( property ) { case set_lock: for( i = 0; i < 16; i++ ) { buffer[i] = value & (0x0001 << i); } numbytes = 16; address = 0; break; case set_epfl: buffer[0] = value & 0x0001; numbytes = 1; address = 16; break; case set_bootprot: buffer[0] = value & 0x0001; buffer[1] = value & 0x0002; buffer[2] = value & 0x0004; numbytes = 3; address = 17; break; case set_bodlevel: #ifdef SUPPORT_SET_BOD_FUSES /* Enable at your own risk - this has not been tested & * may brick your device. */ for(i = 20;i < 26; i++){ buffer[i] = value & (0x0001 << (i-20)); } numbytes = 6; address = 20; break; #else DEBUG( "Setting BODLEVEL can break your chip. Operation not performed\n" ); DEBUG( "Rebuild with the SUPPORT_SET_BOD_FUSES #define enabled if you really want to do this.\n" ); fprintf( stderr, "Setting BODLEVEL can break your chip. Operation not performed.\n" ); return -1; #endif case set_bodhyst: #ifdef SUPPORT_SET_BOD_FUSES /* Enable at your own risk - this has not been tested & * may brick your device. */ buffer[0] = value & 0x0001; numbytes = 1; address = 26; break; #else DEBUG("Setting BODHYST can break your chip. Operation not performed\n"); DEBUG( "Rebuild with the SUPPORT_SET_BOD_FUSES #define enabled if you really want to do this.\n" ); fprintf( stderr, "Setting BODHYST can break your chip. Operation not performed.\n"); return -1; #endif case set_boden: #ifdef SUPPORT_SET_BOD_FUSES /* Enable at your own risk - this has not been tested & * may brick your device. */ buffer[0] = value & 0x0001; buffer[1] = value & 0x0002; numbytes = 2; address = 27; break; #else DEBUG( "Setting BODEN can break your chip. Operation not performed\n" ); DEBUG( "Rebuild with the SUPPORT_SET_BOD_FUSES #define enabled if you really want to do this.\n" ); fprintf( stderr, "Setting BODEN can break your chip. Operation not performed.\n" ); return -1; #endif case set_isp_bod_en: #ifdef SUPPORT_SET_BOD_FUSES /* Enable at your own risk - this has not been tested & * may brick your device. */ buffer[0] = value & 0x0001; numbytes = 1; address = 29; break; #else DEBUG( "Setting ISP_BOD_EN can break your chip. Operation not performed\n" ); DEBUG( "Rebuild with the SUPPORT_SET_BOD_FUSES #define enabled if you really want to do this.\n" ); fprintf( stderr, "Setting ISP_BOD_EN can break your chip. Operation not performed.\n" ); return -1; #endif case set_isp_io_cond_en: buffer[0] = value & 0x0001; numbytes = 1; address = 30; break; case set_isp_force: buffer[0] = value & 0x0001; numbytes = 1; address = 31; break; default: DEBUG( "Fuse bits unrecognized\n" ); fprintf( stderr, "Fuse bits unrecognized.\n" ); return -2; break; } result = atmel_flash_block( device, buffer, address, numbytes, false ); if(result < 0) { return -6; } return 0; } int32_t atmel_set_config( dfu_device_t *device, const uint8_t property, const uint8_t value ) { uint8_t command[4] = { 0x04, 0x01, 0x00, 0x00 }; dfu_status_t status; TRACE( "%s( %p, %d, 0x%02x )\n", __FUNCTION__, device, property, value ); switch( property ) { case ATMEL_SET_CONFIG_BSB: break; case ATMEL_SET_CONFIG_SBV: command[2] = 0x01; break; case ATMEL_SET_CONFIG_SSB: command[2] = 0x05; break; case ATMEL_SET_CONFIG_EB: command[2] = 0x06; break; case ATMEL_SET_CONFIG_HSB: command[1] = 0x02; break; default: return -1; } command[3] = value; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed\n" ); return -2; } if( 0 != dfu_get_status(device, &status) ) { DEBUG( "dfu_get_status failed\n" ); return -3; } if( DFU_STATUS_ERROR_WRITE == status.bStatus ) { fprintf( stderr, "Device is write protected.\n" ); } return status.bStatus; } static int32_t __atmel_read_page( dfu_device_t *device, const uint32_t start, const uint32_t end, uint8_t* buffer, const dfu_bool eeprom ) { uint8_t command[6] = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint32_t current_start; size_t size; uint32_t mini_page; int32_t result; TRACE( "%s( %p, %u, %u, %p, %s )\n", __FUNCTION__, device, start, end, buffer, ((true == eeprom) ? "true" : "false") ); // AVR/8051 requires 0x02 here to read eeprom, AVR32/XMEGA requires 0x00. if( true == eeprom && (GRP_AVR & device->type) ) { command[1] = 0x02; } current_start = start; size = end - current_start; for( mini_page = 0; 0 < size; mini_page++ ) { if( ATMEL_MAX_TRANSFER_SIZE < size ) { size = ATMEL_MAX_TRANSFER_SIZE; } command[2] = 0xff & (current_start >> 8); command[3] = 0xff & current_start; command[4] = 0xff & ((current_start + size - 1)>> 8); command[5] = 0xff & (current_start + size - 1); if( 6 != dfu_download(device, 6, command) ) { DEBUG( "dfu_download failed\n" ); return -1; } result = dfu_upload( device, size, buffer ); if( result < 0) { dfu_status_t status; DEBUG( "result: %d\n", result ); if( 0 == dfu_get_status(device, &status) ) { if( DFU_STATUS_ERROR_FILE == status.bStatus ) { fprintf( stderr, "The device is read protected.\n" ); } else { fprintf( stderr, "Unknown error. Try enabling debug.\n" ); } } else { fprintf( stderr, "Device is unresponsive.\n" ); } return result; } buffer += size; current_start += size; if( current_start < end ) { size = end - current_start; } else { size = 0; } } return (end - start); } /* Just to be safe, let's limit the transfer size */ int32_t atmel_read_flash( dfu_device_t *device, const uint32_t start, const uint32_t end, uint8_t* buffer, const size_t buffer_len, const dfu_bool eeprom, const dfu_bool user ) { uint16_t page = 0; uint32_t current_start; size_t size; TRACE( "%s( %p, 0x%08x, 0x%08x, %p, %u, %s )\n", __FUNCTION__, device, start, end, buffer, buffer_len, ((true == eeprom) ? "true" : "false") ); if( (NULL == buffer) || (start >= end) || (NULL == device) ) { DEBUG( "invalid arguments.\n" ); return -1; } if( (end - start) > buffer_len ) { DEBUG( "buffer isn't large enough - bytes needed: %d : %d.\n", (end - start), buffer_len ); return -2; } /* For the AVR32/XMEGA chips, select the flash space. */ if( GRP_AVR32 & device->type ) { if( user == true ) { if( 0 != atmel_select_user(device) ) { return -3; } } else { if( 0 != atmel_select_flash(device) ) { return -3; } } } current_start = start; if( end > 0x10000 ) { size = 0x10000 - start; } else { size = end; } for( page = 0; 0 < size; page++ ) { int32_t result; if( size > 0x10000 ) { size = 0x10000; } if( user == false ) { if( 0 != atmel_select_page(device, page) ) { return -4; } } result = __atmel_read_page( device, current_start, (current_start + size), buffer, eeprom ); if( size != result ) { return -5; } /* Move the buffer forward. */ buffer += size; current_start += size; if( current_start < end ) { size = end - current_start; } else { size = 0; } } return (end - start); } static int32_t __atmel_blank_check_internal( dfu_device_t *device, const uint32_t start, const uint32_t end ) { uint8_t command[6] = { 0x03, 0x01, 0x00, 0x00, 0x00, 0x00 }; TRACE( "%s( %p, 0x%08x, 0x%08x )\n", __FUNCTION__, device, start, end ); command[2] = 0xff & (start >> 8); command[3] = 0xff & start; command[4] = 0xff & (end >> 8); command[5] = 0xff & end; if( 6 != dfu_download(device, 6, command) ) { DEBUG( "dfu_download failed.\n" ); return -2; } return 0; } int32_t atmel_blank_check( dfu_device_t *device, const uint32_t start, const uint32_t end ) { int32_t rv; uint16_t page; uint32_t current_start; size_t size; TRACE( "%s( %p, 0x%08x, 0x%08x )\n", __FUNCTION__, device, start, end ); if( (start >= end) || (NULL == device) ) { DEBUG( "invalid arguments.\n" ); return -1; } rv = -3; /* Handle small memory (< 64k) devices without a page selection. */ if( end < UINT16_MAX ) { rv = __atmel_blank_check_internal( device, start, end ); goto done; } /* Select FLASH memory */ if( GRP_AVR32 & device->type ) { if( 0 != atmel_select_flash(device) ) { return -2; } } current_start = start; size = end - current_start; for( page = 0; 0 < size; page++ ) { if( UINT16_MAX < size ) { size = UINT16_MAX; } /* Select the page of memory */ if( 0 != atmel_select_page(device, page) ) { return -2; } rv = __atmel_blank_check_internal( device, 0, size ); if( 0 != rv ) { /* We ran into a problem. */ return rv; } /* Add 1 because we checked an inclusive number of bytes. */ current_start += size + 1; /* because we are subtracting the number of bytes compared, the * next starting position is 1 after the end, which causes all * sorts of problems if size_t is unsigned. */ if( current_start < end ) { size = end - current_start; } else { size = 0; } } done: if( 0 == rv ) { int32_t i; /* It looks like it can take a while to erase the chip. * We will try for 10 seconds before giving up. */ for( i = 0; i < 20; i++ ) { dfu_status_t status; if( 0 == dfu_get_status(device, &status) ) { return status.bStatus; } } } DEBUG( "erase chip failed.\n" ); return -3; } /* Reset the processor. * This is done internally by forcing a watchdog reset. * Depending on fuse settings this may go straight back into the bootloader. */ int32_t atmel_reset( dfu_device_t *device ) { uint8_t command[3] = { 0x04, 0x03, 0x00 }; TRACE( "%s( %p )\n", __FUNCTION__, device ); if( 3 != dfu_download(device, 3, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } if( 0 != dfu_download(device, 0, NULL) ) { DEBUG( "dfu_download failed.\n" ); return -2; } return 0; } /* Start the app by jumping to the start of the app area. * This does not do a true device reset. */ int32_t atmel_start_app( dfu_device_t *device ) { uint8_t command[5] = { 0x04, 0x03, 0x01, 0x00, 0x00 }; TRACE( "%s( %p )\n", __FUNCTION__, device ); if( 5 != dfu_download(device, 5, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } if( 0 != dfu_download(device, 0, NULL) ) { DEBUG( "dfu_download failed.\n" ); return -2; } return 0; } static int32_t atmel_select_flash( dfu_device_t *device ) { TRACE( "%s( %p )\n", __FUNCTION__, device ); if( (NULL != device) && (GRP_AVR32 & device->type) ) { uint8_t command[4] = { 0x06, 0x03, 0x00, 0x00 }; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } DEBUG( "flash selected\n" ); } return 0; } static int32_t atmel_select_fuses( dfu_device_t *device ) { TRACE( "%s( %p )\n", __FUNCTION__, device ); if( (NULL != device) && (GRP_AVR32 & device->type) ) { uint8_t command[4] = { 0x06, 0x03, 0x00, 0x03 }; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } DEBUG( "fuses selected\n" ); } return 0; } static int32_t atmel_select_user( dfu_device_t *device ) { TRACE( "%s( %p )\n", __FUNCTION__, device ); if( (NULL != device) && (GRP_AVR32 & device->type) ) { uint8_t command[4] = { 0x06, 0x03, 0x00, 0x06 }; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } DEBUG( "flash selected\n" ); } return 0; } static int32_t atmel_select_page( dfu_device_t *device, const uint16_t mem_page ) { TRACE( "%s( %p, %u )\n", __FUNCTION__, device, mem_page ); if( NULL != device ) { if( GRP_AVR32 & device->type ) { uint8_t command[5] = { 0x06, 0x03, 0x01, 0x00, 0x00 }; command[3] = 0xff & (mem_page >> 8); command[4] = 0xff & mem_page; if( 5 != dfu_download(device, 5, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } } else if( ADC_AVR == device->type ) { // AVR but not 8051 uint8_t command[4] = { 0x06, 0x03, 0x00, 0x00 }; command[3] = (char) mem_page; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -1; } } } return 0; } static void atmel_flash_prepair_buffer( int16_t *buffer, const size_t size, const size_t page_size ) { int16_t *page; TRACE( "%s( %p, %u, %u )\n", __FUNCTION__, buffer, size, page_size ); for( page = buffer; &page[page_size] < &buffer[size]; page = &page[page_size] ) { int32_t i; for( i = 0; i < page_size; i++ ) { if( (0 <= page[i]) && (page[i] <= UINT8_MAX) ) { /* We found a valid value. */ break; } } if( page_size != i ) { /* There was valid data in the block & we need to make * sure there is no unassigned data. */ for( i = 0; i < page_size; i++ ) { if( (page[i] < 0) || (UINT8_MAX < page[i]) ) { /* Invalid memory value. */ page[i] = 0; } } } } } int32_t atmel_user( dfu_device_t *device, int16_t *buffer, const uint32_t end ) { int32_t result = 0; TRACE( "%s( %p, %p, %u)\n", __FUNCTION__, device, buffer,end); if( (NULL == buffer) || (end <= 0) ) { DEBUG( "invalid arguments.\n" ); return -1; } /* Select USER page */ uint8_t command[4] = { 0x06, 0x03, 0x00, 0x06 }; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -2; } //The user block is one flash page, so we'll just do it all in a block. result = atmel_flash_block( device, buffer, 0, end, 0 ); if( result < 0 ) { DEBUG( "error flashing the block: %d\n", result ); return -4; } return 0; } int32_t atmel_secure( dfu_device_t *device ) { int32_t result = 0; int16_t buffer[1]; TRACE( "%s( %p )\n", __FUNCTION__, device ); /* Select SECURITY page */ uint8_t command[4] = { 0x06, 0x03, 0x00, 0x02 }; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -2; } // The security block is a single byte, so we'll just do it all in a block. buffer[0] = 0x01; // Non-zero to set security fuse. result = atmel_flash_block( device, buffer, 0, 1, false ); if( result < 0 ) { DEBUG( "error flashing security fuse: %d\n", result ); return -4; } return 0; } int32_t atmel_getsecure( dfu_device_t *device ) { int32_t result = 0; uint8_t buffer[1]; TRACE( "%s( %p )\n", __FUNCTION__, device ); dfu_clear_status( device ); /* Select SECURITY page */ uint8_t command[4] = { 0x06, 0x03, 0x00, 0x02 }; result = dfu_download(device, 4, command); if( 4 != result ) { if( -EIO == result ) { /* This also happens on most access attempts * when the security bit is set. It may be a bug * in the bootloader itself. */ return ATMEL_SECURE_MAYBE; } else { DEBUG( "dfu_download failed.\n" ); return -1; } } // The security block is a single byte, so we'll just do it all in a block. result = __atmel_read_page( device, 0, 1, buffer, false ); if( 1 != result ) { return -2; } return( (0 == buffer[0]) ? ATMEL_SECURE_OFF : ATMEL_SECURE_ON ); } int32_t atmel_flash( dfu_device_t *device, int16_t *buffer, const uint32_t start, const uint32_t end, const size_t page_size, const dfu_bool eeprom ) { uint32_t first = 0; int32_t sent = 0; uint8_t mem_page = 0; int32_t result = 0; size_t size = end - start; TRACE( "%s( %p, %p, %u, %u, %u, %s )\n", __FUNCTION__, device, buffer, start, end, page_size, ((true == eeprom) ? "true" : "false") ); if( (NULL == device) || (NULL == buffer) || ((end - start) <= 0) ) { DEBUG( "invalid arguments.\n" ); return -1; } if( ADC_8051 != device->type ) { if( GRP_AVR32 & device->type ) { /* Select FLASH memory */ uint8_t command[4] = { 0x06, 0x03, 0x00, 0x00 }; if( 4 != dfu_download(device, 4, command) ) { DEBUG( "dfu_download failed.\n" ); return -2; } } /* Select Page 0 */ result = atmel_select_page( device, mem_page ); if( result < 0 ) { DEBUG( "error selecting the page: %d\n", result ); return -3; } } else { atmel_flash_prepair_buffer( &buffer[start], size, page_size ); } first = start; while( 1 ) { uint32_t last = 0; int32_t length; /* Find the next valid character to start sending from */ for( ; first < end; first++ ) { if( (0 <= buffer[first]) && (buffer[first] <= UINT8_MAX) ) { /* We found a valid value. */ break; } } /* We didn't find anything to flash. */ if( first == end ) { break; } /* Find the last character in this valid block to send. */ for( last = first; last < end; last++ ) { if( (buffer[last] < 0) || (UINT8_MAX < buffer[last]) ) { break; } } recheck_page: /* Make sure any writes align with the memory page boudary. */ if( (0x10000 * (1 + mem_page)) <= last ) { if( first < (0x10000 * (1 + mem_page)) ) { last = 0x10000 * (1 + mem_page); } else { int32_t result; mem_page++; result = atmel_select_page( device, mem_page ); if( result < 0 ) { DEBUG( "error selecting the page: %d\n", result ); return -3; } goto recheck_page; } } length = last - first; DEBUG( "valid block length: %d, (%d - %d)\n", length, first, last ); while( 0 < length ) { int32_t result; if( ATMEL_MAX_TRANSFER_SIZE < length ) { length = ATMEL_MAX_TRANSFER_SIZE; } result = atmel_flash_block( device, &(buffer[first]), (UINT16_MAX & first), length, eeprom ); if( result < 0 ) { DEBUG( "error flashing the block: %d\n", result ); return -4; } first += result; sent += result; DEBUG( "Next first: %d\n", first ); length = last - first; DEBUG( "valid block length: %d\n", length ); } DEBUG( "sent: %d, first: %u last: %u\n", sent, first, last ); } if( mem_page > 0 ) { int32_t result = atmel_select_page( device, 0 ); if( result < 0) { DEBUG( "error selecting the page: %d\n", result ); return -5; } } return sent; } static void atmel_flash_populate_footer( uint8_t *message, uint8_t *footer, const uint16_t vendorId, const uint16_t productId, const uint16_t bcdFirmware ) { int32_t crc; TRACE( "%s( %p, %p, %u, %u, %u )\n", __FUNCTION__, message, footer, vendorId, productId, bcdFirmware ); if( (NULL == message) || (NULL == footer) ) { return; } /* TODO: Calculate the message CRC */ crc = 0; /* CRC 4 bytes */ footer[0] = 0xff & (crc >> 24); footer[1] = 0xff & (crc >> 16); footer[2] = 0xff & (crc >> 8); footer[3] = 0xff & crc; /* Length of DFU suffix - always 16. */ footer[4] = 16; /* ucdfuSignature - fixed 'DFU'. */ footer[5] = 'D'; footer[6] = 'F'; footer[7] = 'U'; /* BCD DFU specification number (1.1)*/ footer[8] = 0x01; footer[9] = 0x10; /* Vendor ID or 0xFFFF */ footer[10] = 0xff & (vendorId >> 8); footer[11] = 0xff & vendorId; /* Product ID or 0xFFFF */ footer[12] = 0xff & (productId >> 8); footer[13] = 0xff & productId; /* BCD Firmware release number or 0xFFFF */ footer[14] = 0xff & (bcdFirmware >> 8); footer[15] = 0xff & bcdFirmware; } static void atmel_flash_populate_header( uint8_t *header, const uint32_t start_address, const size_t length, const dfu_bool eeprom ) { uint16_t end; TRACE( "%s( %p, %u, %u, %s )\n", __FUNCTION__, header, start_address, length, ((true == eeprom) ? "true" : "false") ); if( NULL == header ) { return; } /* If we send 1 byte @ 0x0000, the end address will also be 0x0000 */ end = start_address + (length - 1); /* Command Identifier */ header[0] = 0x01; /* ld_prog_start */ /* data[0] */ header[1] = ((true == eeprom) ? 0x01 : 0x00); /* start_address */ header[2] = 0xff & (start_address >> 8); header[3] = 0xff & start_address; /* end_address */ header[4] = 0xff & (end >> 8); header[5] = 0xff & end; } static int32_t atmel_flash_block( dfu_device_t *device, int16_t *buffer, const uint32_t base_address, const size_t length, const dfu_bool eeprom ) { uint8_t message[ATMEL_MAX_FLASH_BUFFER_SIZE]; uint8_t *header; uint8_t *data; uint8_t *footer; size_t message_length; int32_t result; dfu_status_t status; int32_t i; size_t control_block_size; /* USB control block size */ size_t alignment; TRACE( "%s( %p, %p, %u, %u, %s )\n", __FUNCTION__, device, buffer, base_address, length, ((true == eeprom) ? "true" : "false") ); if( (NULL == device) || (NULL == buffer) || (ATMEL_MAX_TRANSFER_SIZE < length) ) { DEBUG( "invalid arguments.\n" ); return -1; } /* 0 out the message. */ memset( message, 0, ATMEL_MAX_FLASH_BUFFER_SIZE ); if( GRP_AVR32 & device->type ) { control_block_size = ATMEL_AVR32_CONTROL_BLOCK_SIZE; alignment = base_address % ATMEL_AVR32_CONTROL_BLOCK_SIZE; } else { control_block_size = ATMEL_CONTROL_BLOCK_SIZE; alignment = 0; } header = &message[0]; data = &message[control_block_size + alignment]; footer = &data[length]; atmel_flash_populate_header( header, base_address, length, eeprom ); DEBUG( "%d bytes to MCU %06x\n", length, base_address ); /* Copy the data */ for( i = 0; i < length; i++ ) { data[i] = (uint8_t) buffer[i]; } atmel_flash_populate_footer( message, footer, 0xffff, 0xffff, 0xffff ); message_length = ((size_t) (footer - header)) + ATMEL_FOOTER_SIZE; DEBUG( "message length: %d\n", message_length ); result = dfu_download( device, message_length, message ); if( message_length != result ) { if( -EPIPE == result ) { /* The control pipe stalled - this is an error * caused by the device saying "you can't do that" * which means the device is write protected. */ fprintf( stderr, "Device is write protected.\n" ); dfu_clear_status( device ); } else { DEBUG( "dfu_download failed. %d\n", result ); } return -2; } /* check status */ if( 0 != dfu_get_status(device, &status) ) { DEBUG( "dfu_get_status failed.\n" ); return -3; } if( DFU_STATUS_OK != status.bStatus ) { DEBUG( "status(%s) was not OK.\n", dfu_status_to_string(status.bStatus) ); return -4; } return (int32_t) length; } void atmel_print_device_info( FILE *stream, atmel_device_info_t *info ) { fprintf( stream, "%18s: 0x%04x - %d\n", "Bootloader Version", info->bootloaderVersion, info->bootloaderVersion ); fprintf( stream, "%18s: 0x%04x - %d\n", "Device boot ID 1", info->bootID1, info->bootID1 ); fprintf( stream, "%18s: 0x%04x - %d\n", "Device boot ID 2", info->bootID2, info->bootID2 ); if( /* device is 8051 based */ 0 ) { fprintf( stream, "%18s: 0x%04x - %d\n", "Device BSB", info->bsb, info->bsb ); fprintf( stream, "%18s: 0x%04x - %d\n", "Device SBV", info->sbv, info->sbv ); fprintf( stream, "%18s: 0x%04x - %d\n", "Device SSB", info->ssb, info->ssb ); fprintf( stream, "%18s: 0x%04x - %d\n", "Device EB", info->eb, info->eb ); } fprintf( stream, "%18s: 0x%04x - %d\n", "Manufacturer Code", info->manufacturerCode, info->manufacturerCode ); fprintf( stream, "%18s: 0x%04x - %d\n", "Family Code", info->familyCode, info->familyCode ); fprintf( stream, "%18s: 0x%04x - %d\n", "Product Name", info->productName, info->productName ); fprintf( stream, "%18s: 0x%04x - %d\n", "Product Revision", info->productRevision, info->productRevision ); fprintf( stream, "%18s: 0x%04x - %d\n", "HWB", info->hsb, info->hsb ); } dfu-programmer-0.6.1/src/atmel.h0000644000076400010400000001070212100070120013403 00000000000000/* * dfu-programmer * * $Id: atmel.h 141 2013-01-23 23:20:48Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __ATMEL_H__ #define __ATMEL_H__ #include #include #include "dfu-bool.h" #include "dfu-device.h" #define ATMEL_ERASE_BLOCK_0 0 #define ATMEL_ERASE_BLOCK_1 1 #define ATMEL_ERASE_BLOCK_2 2 #define ATMEL_ERASE_BLOCK_3 3 #define ATMEL_ERASE_ALL 4 #define ATMEL_SET_CONFIG_BSB 0 #define ATMEL_SET_CONFIG_SBV 1 #define ATMEL_SET_CONFIG_SSB 2 #define ATMEL_SET_CONFIG_EB 3 #define ATMEL_SET_CONFIG_HSB 4 #define ATMEL_SECURE_OFF 0 // Security bit is cleared #define ATMEL_SECURE_ON 1 // Security bit is set #define ATMEL_SECURE_MAYBE 2 // Call to check security bit failed /* All values are valid if in the range of 0-255, invalid otherwise */ typedef struct { int16_t bootloaderVersion; // Bootloader Version int16_t bootID1; // Device boot ID 1 int16_t bootID2; // Device boot ID 2 int16_t bsb; // Boot Status Byte int16_t sbv; // Software Boot Vector int16_t ssb; // Software Security Byte int16_t eb; // Extra Byte int16_t manufacturerCode; // Manufacturer Code int16_t familyCode; // Family Code int16_t productName; // Product Name int16_t productRevision; // Product Revision int16_t hsb; // Hardware Security Byte } atmel_device_info_t; typedef struct { int32_t lock; // Locked region int32_t epfl; // External Privileged fetch lock int32_t bootprot; // Bootloader protected area int32_t bodlevel; // Brown-out detector trigger level int32_t bodhyst; // BOD hysteresis enable int32_t boden; // BOD enable state int32_t isp_bod_en; // Tells the ISP to enable BOD int32_t isp_io_cond_en; // ISP uses User page to launch bootloader int32_t isp_force; // Start the ISP no matter what } atmel_avr32_fuses_t; int32_t atmel_read_config( dfu_device_t *device, atmel_device_info_t *info ); int32_t atmel_read_fuses( dfu_device_t *device, atmel_avr32_fuses_t * info ); int32_t atmel_erase_flash( dfu_device_t *device, const uint8_t mode ); int32_t atmel_set_fuse( dfu_device_t *device, const uint8_t property, const uint32_t value ); int32_t atmel_set_config( dfu_device_t *device, const uint8_t property, const uint8_t value ); int32_t atmel_read_flash( dfu_device_t *device, const uint32_t start, const uint32_t end, uint8_t* buffer, const size_t buffer_len, const dfu_bool eeprom, const dfu_bool user ); int32_t atmel_blank_check( dfu_device_t *device, const uint32_t start, const uint32_t end ); int32_t atmel_reset( dfu_device_t *device ); int32_t atmel_secure( dfu_device_t *device ); int32_t atmel_getsecure( dfu_device_t *device ); int32_t atmel_flash( dfu_device_t *device, int16_t *buffer, const uint32_t start, const uint32_t end, const size_t flash_page_size, const dfu_bool eeprom ); int32_t atmel_user( dfu_device_t *device, int16_t *buffer, const uint32_t end ); int32_t atmel_start_app( dfu_device_t *device ); void atmel_print_device_info( FILE *stream, atmel_device_info_t *info ); #endif dfu-programmer-0.6.1/src/commands.c0000644000076400010400000006237512127263606014140 00000000000000/* * dfu-programmer * * $Id: commands.c 154 2013-04-04 11:44:06Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include "dfu-bool.h" #include "config.h" #include "commands.h" #include "arguments.h" #include "intel_hex.h" #include "atmel.h" #include "util.h" #define COMMAND_DEBUG_THRESHOLD 40 #define DEBUG(...) dfu_debug( __FILE__, __FUNCTION__, __LINE__, \ COMMAND_DEBUG_THRESHOLD, __VA_ARGS__ ) static int security_bit_state; static void security_check( dfu_device_t *device ) { if( ADC_AVR32 == device->type ) { // Get security bit state for AVR32. security_bit_state = atmel_getsecure( device ); DEBUG( "Security bit check returned %d.\n", security_bit_state ); } else { // Security bit not present or not testable. security_bit_state = ATMEL_SECURE_OFF; } } static void security_message() { if( security_bit_state > ATMEL_SECURE_OFF ) { fprintf( stderr, "The security bit %s set.\n" "Erase the device to clear temporarily.\n", (ATMEL_SECURE_ON == security_bit_state) ? "is" : "may be" ); } } static int32_t execute_erase( dfu_device_t *device, struct programmer_arguments *args ) { int32_t result = 0; DEBUG( "erase %d bytes\n", (args->flash_address_top - args->flash_address_bottom) ); result = atmel_erase_flash( device, ATMEL_ERASE_ALL ); if( 0 != result ) { return result; } return atmel_blank_check( device, args->flash_address_bottom, args->flash_address_top ); } static int32_t execute_setsecure( dfu_device_t *device, struct programmer_arguments *args ) { int32_t result; if( ADC_AVR32 != args->device_type ) { DEBUG( "target doesn't support security bit set.\n" ); fprintf( stderr, "target doesn't support security bit set.\n" ); return -1; } result = atmel_secure( device ); if( result < 0 ) { DEBUG( "Error while setting security bit. (%d)\n", result ); fprintf( stderr, "Error while setting security bit.\n" ); return -1; } return 0; } static int32_t serialize_memory_image(int16_t *hex_data, struct programmer_arguments *args ) { if ( NULL != args->com_flash_data.serial_data ) { int16_t *serial_data = args->com_flash_data.serial_data; uint32_t length = args->com_flash_data.serial_length; uint32_t offset = args->com_flash_data.serial_offset; uint32_t i; /* The Atmel flash page starts at address 0x80000000, we need to ignore that bit */ offset &= 0x7fffffff; if ((offset + length) > args->memory_address_top) { fprintf(stderr,"The serial data falls outside of the memory region.\n"); return -1; } for (i=0; ieeprom_memory_size ) { fprintf( stderr, "This device has no eeprom.\n" ); return -1; } buffer = (uint8_t *) malloc( args->eeprom_memory_size ); if( NULL == buffer ) { fprintf( stderr, "Request for %lu bytes of memory failed.\n", (unsigned long) args->eeprom_memory_size ); goto error; } memset( buffer, 0, args->eeprom_memory_size ); hex_data = intel_hex_to_buffer( args->com_flash_data.file, args->eeprom_memory_size, &usage ); if( NULL == hex_data ) { DEBUG( "Something went wrong with creating the memory image.\n" ); fprintf( stderr, "Something went wrong with creating the memory image.\n" ); goto error; } if (0 != serialize_memory_image(hex_data,args)) goto error; result = atmel_flash( device, hex_data, 0, args->eeprom_memory_size, args->eeprom_page_size, true ); if( result < 0 ) { DEBUG( "Error while programming eeprom. (%d)\n", result ); fprintf( stderr, "Error while programming eeprom.\n" ); goto error; } if( 0 == args->com_flash_data.suppress_validation ) { if( 0 == args->quiet ) { fprintf( stderr, "Validating...\n" ); } result = atmel_read_flash( device, 0, args->eeprom_memory_size, buffer, args->eeprom_memory_size, true, false ); if( args->eeprom_memory_size != result ) { DEBUG( "Error while reading back eeprom.\n" ); fprintf( stderr, "Error while reading back eeprom.\n" ); goto error; } for( i = 0; i < result; i++ ) { if( (0 <= hex_data[i]) && (hex_data[i] < UINT8_MAX) ) { /* Memory should have been programmed in this location. */ if( ((uint8_t) hex_data[i]) != buffer[i] ) { DEBUG( "Image did not validate at location: %d (%02x != %02x)\n", i, (0xff & hex_data[i]), (0xff & buffer[i]) ); fprintf( stderr, "Eeprom did not validate.\n" ); goto error; } } } } if( 0 == args->quiet ) { fprintf( stderr, "%d bytes used (%.02f%%)\n", usage, ((float)(usage*100)/(float)(args->eeprom_memory_size)) ); } retval = 0; error: if( NULL != buffer ) { free( buffer ); buffer = NULL; } if( NULL != hex_data ) { free( hex_data ); hex_data = NULL; } return retval; } static int32_t execute_flash_user_page( dfu_device_t *device, struct programmer_arguments *args ) { int32_t result; int32_t i; int32_t retval; int32_t usage; uint8_t *buffer = NULL; int16_t *hex_data = NULL; retval = -1; buffer = (uint8_t *) malloc( args->flash_page_size ); if( NULL == buffer ) { fprintf( stderr, "Request for %lu bytes of memory failed.\n", (unsigned long) args->flash_page_size ); goto error; } memset( buffer, 0, args->flash_page_size ); hex_data = intel_hex_to_buffer( args->com_flash_data.file, args->flash_page_size, &usage ); if( NULL == hex_data ) { DEBUG( "Something went wrong with creating the memory image.\n" ); fprintf( stderr, "Something went wrong with creating the memory image.\n" ); goto error; } if (0 != serialize_memory_image(hex_data,args)) goto error; result = atmel_user( device, hex_data, args->flash_page_size ); if( result < 0 ) { DEBUG( "Error while flashing user page. (%d)\n", result ); fprintf( stderr, "Error while flashing user page.\n" ); goto error; } if( 0 == args->com_flash_data.suppress_validation ) { if( 0 == args->quiet ) { fprintf( stderr, "Validating...\n" ); } result = atmel_read_flash( device, 0, args->flash_page_size, buffer, args->flash_page_size, false, true ); if( args->flash_page_size != result ) { DEBUG( "Error while reading back user flash.\n" ); fprintf( stderr, "Error while reading back user flash.\n" ); goto error; } for( i = 0; i < result; i++ ) { if( (0 <= hex_data[i]) && (hex_data[i] < UINT8_MAX) ) { /* Memory should have been programmed in this location. */ if( ((uint8_t) hex_data[i]) != buffer[i] ) { DEBUG( "Image did not validate at location: %d (%02x != %02x)\n", i, (0xff & hex_data[i]), (0xff & buffer[i]) ); fprintf( stderr, "User flash did not validate. Did you erase first?\n" ); goto error; } } } } if( 0 == args->quiet ) { fprintf( stderr, "%d bytes used (%.02f%%)\n", usage, ((float)(usage*100)/(float)(args->flash_page_size)) ); } retval = 0; error: if( NULL != buffer ) { free( buffer ); buffer = NULL; } if( NULL != hex_data ) { free( hex_data ); hex_data = NULL; } return retval; } static int32_t execute_flash_normal( dfu_device_t *device, struct programmer_arguments *args ) { int16_t *hex_data = NULL; int32_t usage = 0; int32_t retval = -1; int32_t result = 0; uint8_t *buffer = NULL; uint32_t i,j; uint32_t memory_size; uint32_t adjusted_flash_top_address; /* Why +1? Because the flash_address_top location is inclusive, as * apposed to most times when sizes are specified by length, etc. * and they are exclusive. */ adjusted_flash_top_address = args->flash_address_top + 1; memory_size = adjusted_flash_top_address - args->flash_address_bottom; buffer = (uint8_t *) malloc( memory_size ); if( NULL == buffer ) { fprintf( stderr, "Request for %d bytes of memory failed.\n", memory_size ); goto error; } memset( buffer, 0, memory_size ); hex_data = intel_hex_to_buffer( args->com_flash_data.file, args->memory_address_top + 1, &usage ); if( NULL == hex_data ) { DEBUG( "Something went wrong with creating the memory image.\n" ); fprintf( stderr, "Something went wrong with creating the memory image.\n" ); goto error; } if (0 != serialize_memory_image(hex_data,args)) goto error; for( i = args->bootloader_bottom; i <= args->bootloader_top; i++) { if( -1 != hex_data[i] ) { if( true == args->suppressbootloader ) { //If we're ignoring the bootloader, don't write to it hex_data[i] = -1; } else { fprintf( stderr, "Bootloader and code overlap.\n" ); fprintf( stderr, "Use --suppress-bootloader-mem to ignore\n" ); goto error; } } } DEBUG( "write %d/%d bytes\n", usage, memory_size ); result = atmel_flash( device, hex_data, args->flash_address_bottom, adjusted_flash_top_address, args->flash_page_size, false ); if( result < 0 ) { DEBUG( "Error while flashing. (%d)\n", result ); fprintf( stderr, "Error while flashing.\n" ); goto error; } if( 0 == args->com_flash_data.suppress_validation ) { if( 0 == args->quiet ) { fprintf( stderr, "Validating...\n" ); } result = atmel_read_flash( device, args->flash_address_bottom, adjusted_flash_top_address, buffer, memory_size, false, false ); if( memory_size != result ) { DEBUG( "Error while reading back flash.\n" ); fprintf( stderr, "Error while reading back flash.\n" ); goto error; } for( i = 0, j = args->flash_address_bottom; i < result; i++, j++ ) { if( (0 <= hex_data[j]) && (hex_data[j] < UINT8_MAX) ) { /* Memory should have been programmed in this location. */ if( ((uint8_t) hex_data[j]) != buffer[i] ) { DEBUG( "Image did not validate at location: %d (%02x != %02x)\n", i, (0xff & hex_data[j]), (0xff & buffer[i]) ); fprintf( stderr, "Flash did not validate. Did you erase first?\n" ); goto error; } } } } if( 0 == args->quiet ) { fprintf( stderr, "%d bytes used (%.02f%%)\n", usage, ((float)(usage*100)/(float) (adjusted_flash_top_address - args->flash_address_bottom)) ); } retval = 0; error: if( NULL != buffer ) { free( buffer ); buffer = NULL; } if( NULL != hex_data ) { free( hex_data ); hex_data = NULL; } return retval; return 0; } static int32_t execute_getfuse( dfu_device_t *device, struct programmer_arguments *args ) { atmel_avr32_fuses_t info; char *message = NULL; int32_t value = 0; int32_t status; /* Check AVR32 security bit in order to provide a better error message. */ security_check( device ); status = atmel_read_fuses( device, &info ); if( 0 != status ) { DEBUG( "Error reading %s config information.\n", args->device_type_string ); fprintf( stderr, "Error reading %s config information.\n", args->device_type_string ); security_message(); return status; } switch( args->com_getfuse_data.name ) { case get_lock: value = info.lock; message = "Locked regions"; break; case get_epfl: value = info.epfl; message = "External Privileged Fetch Lock"; break; case get_bootprot: value = info.bootprot; message = "Bootloader protected area"; break; case get_bodlevel: value = info.bodlevel; message = "Brown-out detector trigger level"; break; case get_bodhyst: value = info.bodhyst; message = "BOD Hysteresis enable"; break; case get_boden: value = info.boden; message = "BOD Enable"; break; case get_isp_bod_en: value = info.isp_bod_en; message = "ISP BOD enable"; break; case get_isp_io_cond_en: value = info.isp_io_cond_en; message = "ISP IO condition enable"; break; case get_isp_force: value = info.isp_force; message = "ISP Force"; break; } fprintf( stdout, "%s%s0x%02x (%d)\n", ((0 == args->quiet) ? message : ""), ((0 == args->quiet) ? ": " : ""), value, value ); return 0; } static int32_t execute_get( dfu_device_t *device, struct programmer_arguments *args ) { atmel_device_info_t info; char *message = NULL; int16_t value = 0; int32_t status; int32_t controller_error = 0; /* Check AVR32 security bit in order to provide a better error message. */ security_check( device ); status = atmel_read_config( device, &info ); if( 0 != status ) { DEBUG( "Error reading %s config information.\n", args->device_type_string ); fprintf( stderr, "Error reading %s config information.\n", args->device_type_string ); security_message(); return status; } switch( args->com_get_data.name ) { case get_bootloader: value = info.bootloaderVersion; message = "Bootloader Version"; break; case get_ID1: value = info.bootID1; message = "Device boot ID 1"; break; case get_ID2: value = info.bootID2; message = "Device boot ID 2"; break; case get_BSB: value = info.bsb; message = "Boot Status Byte"; if( ADC_8051 != args->device_type ) { controller_error = 1; } break; case get_SBV: value = info.sbv; message = "Software Boot Vector"; if( ADC_8051 != args->device_type ) { controller_error = 1; } break; case get_SSB: value = info.ssb; message = "Software Security Byte"; if( ADC_8051 != args->device_type ) { controller_error = 1; } break; case get_EB: value = info.eb; message = "Extra Byte"; if( ADC_8051 != args->device_type ) { controller_error = 1; } break; case get_manufacturer: value = info.manufacturerCode; message = "Manufacturer Code"; break; case get_family: value = info.familyCode; message = "Family Code"; break; case get_product_name: value = info.productName; message = "Product Name"; break; case get_product_rev: value = info.productRevision; message = "Product Revision"; break; case get_HSB: value = info.hsb; message = "Hardware Security Byte"; if( ADC_8051 != args->device_type ) { controller_error = 1; } break; } if( 0 != controller_error ) { DEBUG( "%s requires 8051 based controller\n", message ); fprintf( stderr, "%s requires 8051 based controller\n", message ); return -1; } if( value < 0 ) { fprintf( stderr, "The requested device info is unavailable.\n" ); return -2; } fprintf( stdout, "%s%s0x%02x (%d)\n", ((0 == args->quiet) ? message : ""), ((0 == args->quiet) ? ": " : ""), value, value ); return 0; } static int32_t execute_dump_normal( dfu_device_t *device, struct programmer_arguments *args ) { int32_t i = 0; uint8_t *buffer = NULL; size_t memory_size; size_t adjusted_flash_top_address; /* Why +1? Because the flash_address_top location is inclusive, as * apposed to most times when sizes are specified by length, etc. * and they are exclusive. */ adjusted_flash_top_address = args->flash_address_top + 1; memory_size = adjusted_flash_top_address - args->flash_address_bottom; buffer = (uint8_t *) malloc( memory_size ); if( NULL == buffer ) { fprintf( stderr, "Request for %lu bytes of memory failed.\n", (unsigned long) memory_size ); goto error; } /* Check AVR32 security bit in order to provide a better error message. */ security_check( device ); DEBUG( "dump %d bytes\n", memory_size ); if( memory_size != atmel_read_flash(device, args->flash_address_bottom, adjusted_flash_top_address, buffer, memory_size, false, false) ) { fprintf( stderr, "Failed to read %lu bytes from device.\n", (unsigned long) memory_size ); security_message(); return -1; } if( false == args->bootloader_at_highmem ) { for( i = 0; i <= args->bootloader_top; i++ ) { fprintf( stdout, "%c", 0xff ); } } for( i = 0; i < memory_size; i++ ) { fprintf( stdout, "%c", buffer[i] ); } fflush( stdout ); error: if( NULL != buffer ) { free( buffer ); buffer = NULL; } return 0; } static int32_t execute_dump_eeprom( dfu_device_t *device, struct programmer_arguments *args ) { int32_t i = 0; uint8_t *buffer = NULL; size_t memory_size; if( 0 == args->eeprom_memory_size ) { fprintf( stderr, "This device has no eeprom.\n" ); return -1; } memory_size = args->eeprom_memory_size; buffer = (uint8_t *) malloc( args->eeprom_memory_size ); if( NULL == buffer ) { fprintf( stderr, "Request for %lu bytes of memory failed.\n", (unsigned long) memory_size ); goto error; } /* Check AVR32 security bit in order to provide a better error message. */ security_check( device ); DEBUG( "dump %d bytes\n", memory_size ); if( memory_size != atmel_read_flash(device, 0, args->eeprom_memory_size, buffer, memory_size, true, false) ) { fprintf( stderr, "Failed to read %lu bytes from device.\n", (unsigned long) memory_size ); security_message(); return -1; } for( i = 0; i < memory_size; i++ ) { fprintf( stdout, "%c", buffer[i] ); } fflush( stdout ); error: if( NULL != buffer ) { free( buffer ); buffer = NULL; } return 0; } static int32_t execute_dump_user_page( dfu_device_t *device, struct programmer_arguments *args ) { int32_t i = 0; uint8_t *buffer = NULL; size_t page_size = args->flash_page_size; buffer = (uint8_t *) malloc( page_size ); if( NULL == buffer ) { fprintf( stderr, "Request for %lu bytes of memory failed.\n", (unsigned long) page_size ); goto error; } /* Check AVR32 security bit in order to provide a better error message. */ security_check( device ); DEBUG( "dump %d bytes\n", page_size ); if( page_size != atmel_read_flash(device, 0, page_size, buffer, page_size, false, true) ) { fprintf( stderr, "Failed to read %lu bytes from device.\n", (unsigned long) page_size ); security_message(); return -1; } for( i = 0; i < page_size; i++ ) { fprintf( stdout, "%c", buffer[i] ); } fflush( stdout ); error: if( NULL != buffer ) { free( buffer ); buffer = NULL; } return 0; } static int32_t execute_setfuse( dfu_device_t *device, struct programmer_arguments *args ) { int32_t value = args->com_setfuse_data.value; int32_t name = args->com_setfuse_data.name; if( GRP_AVR & args->device_type ) { DEBUG( "target doesn't support fuse set operation.\n" ); fprintf( stderr, "target doesn't support fuse set operation.\n" ); return -1; } /* Check AVR32 security bit in order to provide a better error message. */ security_check( device ); if( 0 != atmel_set_fuse(device, name, value) ) { DEBUG( "Fuse set failed.\n" ); fprintf( stderr, "Fuse set failed.\n" ); security_message(); return -1; } return 0; } static int32_t execute_configure( dfu_device_t *device, struct programmer_arguments *args ) { int32_t value = args->com_configure_data.value; int32_t name = args->com_configure_data.name; if( ADC_8051 != args->device_type ) { DEBUG( "target doesn't support configure operation.\n" ); fprintf( stderr, "target doesn't support configure operation.\n" ); return -1; } if( (0xff & value) != value ) { DEBUG( "Value to configure must be in range 0-255.\n" ); fprintf( stderr, "Value to configure must be in range 0-255.\n" ); return -1; } if( 0 != atmel_set_config(device, name, value) ) { DEBUG( "Configuration set failed.\n" ); fprintf( stderr, "Configuration set failed.\n" ); return -1; } return 0; } int32_t execute_command( dfu_device_t *device, struct programmer_arguments *args ) { device->type = args->device_type; switch( args->command ) { case com_erase: return execute_erase( device, args ); case com_flash: return execute_flash_normal( device, args ); case com_eflash: return execute_flash_eeprom( device, args ); case com_user: return execute_flash_user_page( device, args ); case com_reset: return atmel_reset( device ); case com_start_app: return atmel_start_app( device ); case com_get: return execute_get( device, args ); case com_getfuse: return execute_getfuse( device, args ); case com_dump: return execute_dump_normal( device, args ); case com_edump: return execute_dump_eeprom( device, args ); case com_udump: return execute_dump_user_page( device, args ); case com_configure: return execute_configure( device, args ); case com_setfuse: return execute_setfuse( device, args ); case com_setsecure: return execute_setsecure( device, args ); default: fprintf( stderr, "Not supported at this time.\n" ); } return -1; } dfu-programmer-0.6.1/src/commands.h0000644000076400010400000000201112066122517014117 00000000000000/* * dfu-programmer * * $Id: commands.h 125 2012-12-24 18:56:14Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __COMMANDS_H__ #define __COMMANDS_H__ #include #include "arguments.h" #include "dfu-device.h" int32_t execute_command( dfu_device_t *device, struct programmer_arguments *args ); #endif dfu-programmer-0.6.1/src/dfu-bool.h0000644000076400010400000000015712065120624014032 00000000000000#ifndef __DFU_BOOL_H__ #define __DFU_BOOL_H__ typedef enum { false = 0, true = 1 } dfu_bool; #endif dfu-programmer-0.6.1/src/dfu-device.h0000644000076400010400000000146012076267511014345 00000000000000#ifndef __DFU_DEVICE_H__ #define __DFU_DEVICE_H__ #if HAVE_CONFIG_H # include #endif #include #ifdef HAVE_LIBUSB_1_0 #include #else #include #endif // Atmel device classes are now defined with one bit per class. // This simplifies checking in functions which handle more than one class. #define ADC_8051 (1<<0) #define ADC_AVR (1<<1) #define ADC_AVR32 (1<<2) #define ADC_XMEGA (1<<3) // Most commands fall into one of 2 groups. #define GRP_AVR32 (ADC_AVR32 | ADC_XMEGA) #define GRP_AVR (ADC_AVR | ADC_8051) typedef unsigned atmel_device_class_t; typedef struct { #ifdef HAVE_LIBUSB_1_0 struct libusb_device_handle *handle; #else struct usb_dev_handle *handle; #endif int32_t interface; atmel_device_class_t type; } dfu_device_t; #endif dfu-programmer-0.6.1/src/dfu.c0000644000076400010400000007570312111520156013101 00000000000000/* * dfu-programmer * * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #if HAVE_CONFIG_H # include #endif #include #include #include #include #include #ifdef HAVE_LIBUSB_1_0 #include #else #include #endif #include #include "dfu.h" #include "util.h" #include "dfu-bool.h" /* DFU commands */ #define DFU_DETACH 0 #define DFU_DNLOAD 1 #define DFU_UPLOAD 2 #define DFU_GETSTATUS 3 #define DFU_CLRSTATUS 4 #define DFU_GETSTATE 5 #define DFU_ABORT 6 #define USB_CLASS_APP_SPECIFIC 0xfe #define DFU_SUBCLASS 0x01 /* Wait for 20 seconds before a timeout since erasing/flashing can take some time. * The longest erase cycle is for the AT32UC3A0512-TA automotive part, * which needs a timeout of at least 19 seconds to erase the whole flash. */ #define DFU_TIMEOUT 20000 /* Time (in ms) for the device to wait for the usb reset after being told to detach * before the giving up going into dfu mode. */ #define DFU_DETACH_TIMEOUT 1000 #define DFU_DEBUG_THRESHOLD 100 #define DFU_TRACE_THRESHOLD 200 #define DFU_MESSAGE_DEBUG_THRESHOLD 300 #define DEBUG(...) dfu_debug( __FILE__, __FUNCTION__, __LINE__, \ DFU_DEBUG_THRESHOLD, __VA_ARGS__ ) #define TRACE(...) dfu_debug( __FILE__, __FUNCTION__, __LINE__, \ DFU_TRACE_THRESHOLD, __VA_ARGS__ ) #define MSG_DEBUG(...) dfu_debug( __FILE__, __FUNCTION__, __LINE__, \ DFU_MESSAGE_DEBUG_THRESHOLD, __VA_ARGS__ ) static uint16_t transaction = 0; #ifdef HAVE_LIBUSB_1_0 static int32_t dfu_find_interface( struct libusb_device *device, const dfu_bool honor_interfaceclass, const uint8_t bNumConfigurations); #else static int32_t dfu_find_interface( const struct usb_device *device, const dfu_bool honor_interfaceclass ); #endif static int32_t dfu_make_idle( dfu_device_t *device, const dfu_bool initial_abort ); static int32_t dfu_transfer_out( dfu_device_t *device, uint8_t request, const int32_t value, uint8_t* data, const size_t length ); static int32_t dfu_transfer_in( dfu_device_t *device, uint8_t request, const int32_t value, uint8_t* data, const size_t length ); static void dfu_msg_response_output( const char *function, const int32_t result ); /* Allocate an N-byte block of memory from the heap. * If N is zero, allocate a 1-byte block. */ void* rpl_malloc( size_t n ) { if( 0 == n ) { n = 1; } return malloc( n ); } /* * DFU_DETACH Request (DFU Spec 1.0, Section 5.1) * * device - the dfu device to commmunicate with * timeout - the timeout in ms the USB device should wait for a pending * USB reset before giving up and terminating the operation * * returns 0 or < 0 on error */ int32_t dfu_detach( dfu_device_t *device, const int32_t timeout ) { int32_t result; TRACE( "%s( %p, %d )\n", __FUNCTION__, device, timeout ); if( (NULL == device) || (NULL == device->handle) || (timeout < 0) ) { DEBUG( "Invalid parameter\n" ); return -1; } result = dfu_transfer_out( device, DFU_DETACH, timeout, NULL, 0 ); dfu_msg_response_output( __FUNCTION__, result ); return result; } /* * DFU_DNLOAD Request (DFU Spec 1.0, Section 6.1.1) * * device - the dfu device to commmunicate with * length - the total number of bytes to transfer to the USB * device - must be less than wTransferSize * data - the data to transfer * * returns the number of bytes written or < 0 on error */ int32_t dfu_download( dfu_device_t *device, const size_t length, uint8_t* data ) { int32_t result; TRACE( "%s( %p, %u, %p )\n", __FUNCTION__, device, length, data ); /* Sanity checks */ if( (NULL == device) || (NULL == device->handle) ) { DEBUG( "Invalid parameter\n" ); return -1; } if( (0 != length) && (NULL == data) ) { DEBUG( "data was NULL, but length != 0\n" ); return -2; } if( (0 == length) && (NULL != data) ) { DEBUG( "data was not NULL, but length == 0\n" ); return -3; } { size_t i; for( i = 0; i < length; i++ ) { MSG_DEBUG( "Message: m[%u] = 0x%02x\n", i, data[i] ); } } result = dfu_transfer_out( device, DFU_DNLOAD, transaction++, data, length ); dfu_msg_response_output( __FUNCTION__, result ); return result; } /* * DFU_UPLOAD Request (DFU Spec 1.0, Section 6.2) * * device - the dfu device to commmunicate with * length - the maximum number of bytes to receive from the USB * device - must be less than wTransferSize * data - the buffer to put the received data in * * returns the number of bytes received or < 0 on error */ int32_t dfu_upload( dfu_device_t *device, const size_t length, uint8_t* data ) { int32_t result; TRACE( "%s( %p, %u, %p )\n", __FUNCTION__, device, length, data ); /* Sanity checks */ if( (NULL == device) || (NULL == device->handle) ) { DEBUG( "Invalid parameter\n" ); return -1; } if( (0 == length) || (NULL == data) ) { DEBUG( "data was NULL, or length is 0\n" ); return -2; } result = dfu_transfer_in( device, DFU_UPLOAD, transaction++, data, length ); dfu_msg_response_output( __FUNCTION__, result ); return result; } /* * DFU_GETSTATUS Request (DFU Spec 1.0, Section 6.1.2) * * device - the dfu device to commmunicate with * status - the data structure to be populated with the results * * return the 0 if successful or < 0 on an error */ int32_t dfu_get_status( dfu_device_t *device, dfu_status_t *status ) { uint8_t buffer[6]; int32_t result; TRACE( "%s( %p, %p )\n", __FUNCTION__, device, status ); if( (NULL == device) || (NULL == device->handle) ) { DEBUG( "Invalid parameter\n" ); return -1; } /* Initialize the status data structure */ status->bStatus = DFU_STATUS_ERROR_UNKNOWN; status->bwPollTimeout = 0; status->bState = STATE_DFU_ERROR; status->iString = 0; result = dfu_transfer_in( device, DFU_GETSTATUS, 0, buffer, sizeof(buffer) ); dfu_msg_response_output( __FUNCTION__, result ); if( 6 == result ) { status->bStatus = buffer[0]; status->bwPollTimeout = ((0xff & buffer[3]) << 16) | ((0xff & buffer[2]) << 8) | (0xff & buffer[1]); status->bState = buffer[4]; status->iString = buffer[5]; DEBUG( "==============================\n" ); DEBUG( "status->bStatus: %s (0x%02x)\n", dfu_status_to_string(status->bStatus), status->bStatus ); DEBUG( "status->bwPollTimeout: 0x%04x\n", status->bwPollTimeout ); DEBUG( "status->bState: %s (0x%02x)\n", dfu_state_to_string(status->bState), status->bState ); DEBUG( "status->iString: 0x%02x\n", status->iString ); DEBUG( "------------------------------\n" ); } else { if( 0 < result ) { /* There was an error, we didn't get the entire message. */ DEBUG( "result: %d\n", result ); return -2; } } return 0; } /* * DFU_CLRSTATUS Request (DFU Spec 1.0, Section 6.1.3) * * device - the dfu device to commmunicate with * * return 0 or < 0 on an error */ int32_t dfu_clear_status( dfu_device_t *device ) { int32_t result; TRACE( "%s( %p )\n", __FUNCTION__, device ); if( (NULL == device) || (NULL == device->handle) ) { DEBUG( "Invalid parameter\n" ); return -1; } result = dfu_transfer_out( device, DFU_CLRSTATUS, 0, NULL, 0 ); dfu_msg_response_output( __FUNCTION__, result ); return result; } /* * DFU_GETSTATE Request (DFU Spec 1.0, Section 6.1.5) * * device - the dfu device to commmunicate with * * returns the state or < 0 on error */ int32_t dfu_get_state( dfu_device_t *device ) { int32_t result; uint8_t buffer[1]; TRACE( "%s( %p )\n", __FUNCTION__, device ); if( (NULL == device) || (NULL == device->handle) ) { DEBUG( "Invalid parameter\n" ); return -1; } result = dfu_transfer_in( device, DFU_GETSTATE, 0, buffer, sizeof(buffer) ); dfu_msg_response_output( __FUNCTION__, result ); /* Return the error if there is one. */ if( result < 1 ) { return result; } /* Return the state. */ return buffer[0]; } /* * DFU_ABORT Request (DFU Spec 1.0, Section 6.1.4) * * device - the dfu device to commmunicate with * * returns 0 or < 0 on an error */ int32_t dfu_abort( dfu_device_t *device ) { int32_t result; TRACE( "%s( %p )\n", __FUNCTION__, device ); if( (NULL == device) || (NULL == device->handle) ) { DEBUG( "Invalid parameter\n" ); return -1; } result = dfu_transfer_out( device, DFU_ABORT, 0, NULL, 0 ); dfu_msg_response_output( __FUNCTION__, result ); return result; } /* * dfu_device_init is designed to find one of the usb devices which match * the vendor and product parameters passed in. * * vendor - the vender number of the device to look for * product - the product number of the device to look for * [out] device - the dfu device to commmunicate with * * return a pointer to the usb_device if found, or NULL otherwise */ #ifdef HAVE_LIBUSB_1_0 struct libusb_device *dfu_device_init( const uint32_t vendor, const uint32_t product, const uint32_t bus_number, const uint32_t device_address, dfu_device_t *dfu_device, const dfu_bool initial_abort, const dfu_bool honor_interfaceclass ) { libusb_device **list; size_t i,devicecount; extern libusb_context *usbcontext; int32_t retries = 4; TRACE( "%s( %u, %u, %p, %s, %s )\n", __FUNCTION__, vendor, product, dfu_device, ((true == initial_abort) ? "true" : "false"), ((true == honor_interfaceclass) ? "true" : "false") ); DEBUG( "%s(%08x, %08x)\n",__FUNCTION__, vendor, product ); retry: devicecount = libusb_get_device_list( usbcontext, &list ); for( i = 0; i < devicecount; i++ ) { libusb_device *device = list[i]; struct libusb_device_descriptor descriptor; if( libusb_get_device_descriptor(device, &descriptor) ) { DEBUG( "Failed in libusb_get_device_descriptor\n" ); break; } DEBUG( "%2d: 0x%04x, 0x%04x\n", (int) i, descriptor.idVendor, descriptor.idProduct ); if( (vendor == descriptor.idVendor) && (product == descriptor.idProduct) && ((bus_number == 0) || ((libusb_get_bus_number(device) == bus_number) && (libusb_get_device_address(device) == device_address))) ) { int32_t tmp; DEBUG( "found device at USB:%d,%d\n", libusb_get_bus_number(device), libusb_get_device_address(device) ); /* We found a device that looks like it matches... * let's try to find the DFU interface, open the device * and claim it. */ tmp = dfu_find_interface( device, honor_interfaceclass, descriptor.bNumConfigurations ); if( 0 <= tmp ) { /* The interface is valid. */ dfu_device->interface = tmp; if( 0 == libusb_open(device, &dfu_device->handle) ) { DEBUG( "opened interface %d...\n", tmp ); if( 0 == libusb_set_configuration(dfu_device->handle, 1) ) { DEBUG( "set configuration %d...\n", 1 ); if( 0 == libusb_claim_interface(dfu_device->handle, dfu_device->interface) ) { DEBUG( "claimed interface %d...\n", dfu_device->interface ); switch( dfu_make_idle(dfu_device, initial_abort) ) { case 0: libusb_free_device_list( list, 1 ); return device; case 1: retries--; libusb_free_device_list( list, 1 ); goto retry; } DEBUG( "Failed to put the device in dfuIDLE mode.\n" ); libusb_release_interface( dfu_device->handle, dfu_device->interface ); retries = 4; } else { DEBUG( "Failed to claim the DFU interface.\n" ); } } else { DEBUG( "Failed to set configuration.\n" ); } libusb_close(dfu_device->handle); } } } } libusb_free_device_list( list, 1 ); dfu_device->handle = NULL; dfu_device->interface = 0; return NULL; } #else struct usb_device *dfu_device_init( const uint32_t vendor, const uint32_t product, const uint32_t bus_number, const uint32_t device_address, dfu_device_t *dfu_device, const dfu_bool initial_abort, const dfu_bool honor_interfaceclass ) { struct usb_bus *usb_bus; struct usb_device *device; int32_t retries = 4; TRACE( "%s( %u, %u, %p, %s, %s )\n", __FUNCTION__, vendor, product, dfu_device, ((true == initial_abort) ? "true" : "false"), ((true == honor_interfaceclass) ? "true" : "false") ); retry: if( 0 < retries ) { usb_find_busses(); usb_find_devices(); /* Walk the tree and find our device. */ for( usb_bus = usb_get_busses(); NULL != usb_bus; usb_bus = usb_bus->next ) { for( device = usb_bus->devices; NULL != device; device = device->next) { if( (vendor == device->descriptor.idVendor) && (product == device->descriptor.idProduct) && ((bus_number == 0) || (device->devnum == device_address && (usb_bus->location >> 24) == bus_number))) { int32_t tmp; DEBUG( "found device at USB:%d,%d\n", device->devnum, (usb_bus->location >> 24) ); /* We found a device that looks like it matches... * let's try to find the DFU interface, open the device * and claim it. */ tmp = dfu_find_interface( device, honor_interfaceclass ); if( 0 <= tmp ) { /* The interface is valid. */ dfu_device->interface = tmp; dfu_device->handle = usb_open( device ); if( NULL != dfu_device->handle ) { if( 0 == usb_set_configuration(dfu_device->handle, 1) ) { if( 0 == usb_claim_interface(dfu_device->handle, dfu_device->interface) ) { switch( dfu_make_idle(dfu_device, initial_abort) ) { case 0: return device; case 1: retries--; goto retry; } DEBUG( "Failed to put the device in dfuIDLE mode.\n" ); usb_release_interface( dfu_device->handle, dfu_device->interface ); usb_close( dfu_device->handle ); retries = 4; } else { DEBUG( "Failed to claim the DFU interface.\n" ); usb_close( dfu_device->handle ); } } else { DEBUG( "Failed to set configuration.\n"); usb_close( dfu_device->handle ); } } else { DEBUG( "Failed to open device.\n" ); } } else { DEBUG( "Failed to find the DFU interface.\n" ); } } } } } dfu_device->handle = NULL; dfu_device->interface = 0; return NULL; } #endif /* * Used to convert the DFU state to a string. * * state - the state to convert * * returns the state name or "unknown state" */ char* dfu_state_to_string( const int32_t state ) { char *message = "unknown state"; switch( state ) { case STATE_APP_IDLE: message = "appIDLE"; break; case STATE_APP_DETACH: message = "appDETACH"; break; case STATE_DFU_IDLE: message = "dfuIDLE"; break; case STATE_DFU_DOWNLOAD_SYNC: message = "dfuDNLOAD-SYNC"; break; case STATE_DFU_DOWNLOAD_BUSY: message = "dfuDNBUSY"; break; case STATE_DFU_DOWNLOAD_IDLE: message = "dfuDNLOAD-IDLE"; break; case STATE_DFU_MANIFEST_SYNC: message = "dfuMANIFEST-SYNC"; break; case STATE_DFU_MANIFEST: message = "dfuMANIFEST"; break; case STATE_DFU_MANIFEST_WAIT_RESET: message = "dfuMANIFEST-WAIT-RESET"; break; case STATE_DFU_UPLOAD_IDLE: message = "dfuUPLOAD-IDLE"; break; case STATE_DFU_ERROR: message = "dfuERROR"; break; } return message; } /* * Used to convert the DFU status to a string. * * status - the status to convert * * returns the status name or "unknown status" */ char* dfu_status_to_string( const int32_t status ) { char *message = "unknown status"; switch( status ) { case DFU_STATUS_OK: message = "OK"; break; case DFU_STATUS_ERROR_TARGET: message = "errTARGET"; break; case DFU_STATUS_ERROR_FILE: message = "errFILE"; break; case DFU_STATUS_ERROR_WRITE: message = "errWRITE"; break; case DFU_STATUS_ERROR_ERASE: message = "errERASE"; break; case DFU_STATUS_ERROR_CHECK_ERASED: message = "errCHECK_ERASED"; break; case DFU_STATUS_ERROR_PROG: message = "errPROG"; break; case DFU_STATUS_ERROR_VERIFY: message = "errVERIFY"; break; case DFU_STATUS_ERROR_ADDRESS: message = "errADDRESS"; break; case DFU_STATUS_ERROR_NOTDONE: message = "errNOTDONE"; break; case DFU_STATUS_ERROR_FIRMWARE: message = "errFIRMWARE"; break; case DFU_STATUS_ERROR_VENDOR: message = "errVENDOR"; break; case DFU_STATUS_ERROR_USBR: message = "errUSBR"; break; case DFU_STATUS_ERROR_POR: message = "errPOR"; break; case DFU_STATUS_ERROR_UNKNOWN: message = "errUNKNOWN"; break; case DFU_STATUS_ERROR_STALLEDPKT: message = "errSTALLEDPKT"; break; } return message; } /* * Used to find the dfu interface for a device if there is one. * * device - the device to search * honor_interfaceclass - if the actual interface class information * should be checked, or ignored (bug in device DFU code) * * returns the interface number if found, < 0 otherwise */ #ifdef HAVE_LIBUSB_1_0 static int32_t dfu_find_interface( struct libusb_device *device, const dfu_bool honor_interfaceclass, const uint8_t bNumConfigurations) { int32_t c,i,s; TRACE( "%s()\n", __FUNCTION__ ); /* Loop through all of the configurations */ for( c = 0; c < bNumConfigurations; c++ ) { struct libusb_config_descriptor *config; if( libusb_get_config_descriptor(device, c, &config) ) { DEBUG( "can't get_config_descriptor: %d\n", c ); return -1; } DEBUG( "config %d: maxpower=%d*2 mA\n", c, config->MaxPower ); /* Loop through all of the interfaces */ for( i = 0; i < config->bNumInterfaces; i++ ) { struct libusb_interface interface; interface = config->interface[i]; DEBUG( "interface %d\n", i ); /* Loop through all of the settings */ for( s = 0; s < interface.num_altsetting; s++ ) { struct libusb_interface_descriptor setting; setting = interface.altsetting[s]; DEBUG( "setting %d: class:%d, subclass %d, protocol:%d\n", s, setting.bInterfaceClass, setting.bInterfaceSubClass, setting.bInterfaceProtocol ); if( honor_interfaceclass ) { /* Check if the interface is a DFU interface */ if( (USB_CLASS_APP_SPECIFIC == setting.bInterfaceClass) && (DFU_SUBCLASS == setting.bInterfaceSubClass) ) { DEBUG( "Found DFU Interface: %d\n", setting.bInterfaceNumber ); return setting.bInterfaceNumber; } } else { /* If there is a bug in the DFU firmware, return the first * found interface. */ DEBUG( "Found DFU Interface: %d\n", setting.bInterfaceNumber ); return setting.bInterfaceNumber; } } } libusb_free_config_descriptor( config ); } return -1; } #else static int32_t dfu_find_interface( const struct usb_device *device, const dfu_bool honor_interfaceclass ) { int32_t c, i; struct usb_config_descriptor *config; struct usb_interface_descriptor *interface; /* Loop through all of the configurations */ for( c = 0; c < device->descriptor.bNumConfigurations; c++ ) { config = &(device->config[c]); /* Loop through all of the interfaces */ for( i = 0; i < config->interface->num_altsetting; i++) { interface = &(config->interface->altsetting[i]); if( true == honor_interfaceclass ) { /* Check if the interface is a DFU interface */ if( (USB_CLASS_APP_SPECIFIC == interface->bInterfaceClass) && (DFU_SUBCLASS == interface->bInterfaceSubClass) ) { DEBUG( "Found DFU Inteface: %d\n", interface->bInterfaceNumber ); return interface->bInterfaceNumber; } } else { /* If there is a bug in the DFU firmware, return the first * found interface. */ DEBUG( "Found DFU Inteface: %d\n", interface->bInterfaceNumber ); return interface->bInterfaceNumber; } } } return -1; } #endif /* * Gets the device into the dfuIDLE state if possible. * * device - the dfu device to commmunicate with * * returns 0 on success, 1 if device was reset, error otherwise */ static int32_t dfu_make_idle( dfu_device_t *device, const dfu_bool initial_abort ) { dfu_status_t status; int32_t retries = 4; if( true == initial_abort ) { dfu_abort( device ); } while( 0 < retries ) { if( 0 != dfu_get_status(device, &status) ) { dfu_clear_status( device ); continue; } DEBUG( "State: %s (%d)\n", dfu_state_to_string(status.bState), status.bState ); switch( status.bState ) { case STATE_DFU_IDLE: if( DFU_STATUS_OK == status.bStatus ) { return 0; } /* We need the device to have the DFU_STATUS_OK status. */ dfu_clear_status( device ); break; case STATE_DFU_DOWNLOAD_SYNC: /* abort -> idle */ case STATE_DFU_DOWNLOAD_IDLE: /* abort -> idle */ case STATE_DFU_MANIFEST_SYNC: /* abort -> idle */ case STATE_DFU_UPLOAD_IDLE: /* abort -> idle */ case STATE_DFU_DOWNLOAD_BUSY: /* abort -> error */ case STATE_DFU_MANIFEST: /* abort -> error */ dfu_abort( device ); break; case STATE_DFU_ERROR: dfu_clear_status( device ); break; case STATE_APP_IDLE: dfu_detach( device, DFU_DETACH_TIMEOUT ); break; case STATE_APP_DETACH: case STATE_DFU_MANIFEST_WAIT_RESET: DEBUG( "Resetting the device\n" ); #ifdef HAVE_LIBUSB_1_0 libusb_reset_device( device->handle ); #else usb_reset( device->handle ); #endif return 1; } retries--; } DEBUG( "Not able to transition the device into the dfuIDLE state.\n" ); return -2; } static int32_t dfu_transfer_out( dfu_device_t *device, uint8_t request, const int32_t value, uint8_t* data, const size_t length ) { #ifdef HAVE_LIBUSB_1_0 return libusb_control_transfer( device->handle, /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, /* bRequest */ request, /* wValue */ value, /* wIndex */ device->interface, /* Data */ data, /* wLength */ length, DFU_TIMEOUT ); #else return usb_control_msg( device->handle, /* bmRequestType */ USB_ENDPOINT_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, /* bRequest */ request, /* wValue */ value, /* wIndex */ device->interface, /* Data */ (char*) data, /* wLength */ length, DFU_TIMEOUT ); #endif } static int32_t dfu_transfer_in( dfu_device_t *device, uint8_t request, const int32_t value, uint8_t* data, const size_t length ) { #ifdef HAVE_LIBUSB_1_0 return libusb_control_transfer( device->handle, /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, /* bRequest */ request, /* wValue */ value, /* wIndex */ device->interface, /* Data */ data, /* wLength */ length, DFU_TIMEOUT ); #else return usb_control_msg( device->handle, /* bmRequestType */ USB_ENDPOINT_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, /* bRequest */ request, /* wValue */ value, /* wIndex */ device->interface, /* Data */ (char*) data, /* wLength */ length, DFU_TIMEOUT ); #endif } /* * Used to output the response from our USB request in a human reable * form. * * function - the calling function to output on behalf of * result - the result to interpret */ static void dfu_msg_response_output( const char *function, const int32_t result ) { char *msg = NULL; if( 0 <= result ) { msg = "No error."; } else { switch( result ) { case -ENOENT: msg = "-ENOENT: URB was canceled by unlink_urb"; break; #ifdef EINPROGRESS case -EINPROGRESS: msg = "-EINPROGRESS: URB still pending, no results yet " "(actually no error until now)"; break; #endif #ifdef EPROTO case -EPROTO: msg = "-EPROTO: a) Bitstuff error or b) Unknown USB error"; break; #endif case -EILSEQ: msg = "-EILSEQ: CRC mismatch"; break; case -EPIPE: msg = "-EPIPE: a) Babble detect or b) Endpoint stalled"; break; #ifdef ETIMEDOUT case -ETIMEDOUT: msg = "-ETIMEDOUT: Transfer timed out, NAK"; break; #endif case -ENODEV: msg = "-ENODEV: Device was removed"; break; case -EIO: msg = "-EIO: USB I/O error"; break; #ifdef EREMOTEIO case -EREMOTEIO: msg = "-EREMOTEIO: Short packet detected"; break; #endif case -EXDEV: msg = "-EXDEV: ISO transfer only partially completed look at " "individual frame status for details"; break; case -EINVAL: msg = "-EINVAL: ISO madness, if this happens: Log off and go home"; break; default: msg = "Unknown error"; break; } DEBUG( "%s 0x%08x (%d)\n", msg, result, result ); } } dfu-programmer-0.6.1/src/dfu.h0000644000076400010400000000704512111520156013100 00000000000000/* * dfu-programmer * * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __DFU_H__ #define __DFU_H__ #if HAVE_CONFIG_H # include #endif #ifdef HAVE_LIBUSB_1_0 #include #else #include #endif #include #include #include "dfu-bool.h" #include "dfu-device.h" /* DFU states */ #define STATE_APP_IDLE 0x00 #define STATE_APP_DETACH 0x01 #define STATE_DFU_IDLE 0x02 #define STATE_DFU_DOWNLOAD_SYNC 0x03 #define STATE_DFU_DOWNLOAD_BUSY 0x04 #define STATE_DFU_DOWNLOAD_IDLE 0x05 #define STATE_DFU_MANIFEST_SYNC 0x06 #define STATE_DFU_MANIFEST 0x07 #define STATE_DFU_MANIFEST_WAIT_RESET 0x08 #define STATE_DFU_UPLOAD_IDLE 0x09 #define STATE_DFU_ERROR 0x0a /* DFU status */ #define DFU_STATUS_OK 0x00 #define DFU_STATUS_ERROR_TARGET 0x01 #define DFU_STATUS_ERROR_FILE 0x02 #define DFU_STATUS_ERROR_WRITE 0x03 #define DFU_STATUS_ERROR_ERASE 0x04 #define DFU_STATUS_ERROR_CHECK_ERASED 0x05 #define DFU_STATUS_ERROR_PROG 0x06 #define DFU_STATUS_ERROR_VERIFY 0x07 #define DFU_STATUS_ERROR_ADDRESS 0x08 #define DFU_STATUS_ERROR_NOTDONE 0x09 #define DFU_STATUS_ERROR_FIRMWARE 0x0a #define DFU_STATUS_ERROR_VENDOR 0x0b #define DFU_STATUS_ERROR_USBR 0x0c #define DFU_STATUS_ERROR_POR 0x0d #define DFU_STATUS_ERROR_UNKNOWN 0x0e #define DFU_STATUS_ERROR_STALLEDPKT 0x0f /* This is based off of DFU_GETSTATUS * * 1 unsigned byte bStatus * 3 unsigned byte bwPollTimeout * 1 unsigned byte bState * 1 unsigned byte iString */ typedef struct { uint8_t bStatus; uint32_t bwPollTimeout; uint8_t bState; uint8_t iString; } dfu_status_t; int32_t dfu_detach( dfu_device_t *device, const int32_t timeout ); int32_t dfu_download( dfu_device_t *device, const size_t length, uint8_t* data ); int32_t dfu_upload( dfu_device_t *device, const size_t length, uint8_t* data ); int32_t dfu_get_status( dfu_device_t *device, dfu_status_t *status ); int32_t dfu_clear_status( dfu_device_t *device ); int32_t dfu_get_state( dfu_device_t *device ); int32_t dfu_abort( dfu_device_t *device ); #ifdef HAVE_LIBUSB_1_0 struct libusb_device #else struct usb_device #endif *dfu_device_init( const uint32_t vendor, const uint32_t product, const uint32_t bus, const uint32_t dev_addr, dfu_device_t *device, const dfu_bool initial_abort, const dfu_bool honor_interfaceclass ); char* dfu_status_to_string( const int32_t status ); char* dfu_state_to_string( const int32_t state ); #endif dfu-programmer-0.6.1/src/intel_hex.c0000644000076400010400000002067112066122517014304 00000000000000/* * dfu-programmer * * intel_hex.c * * This reads in a .hex file (Intel format), creates an array representing * memory, populates the array with the data from the .hex file, and * returns the array. * * This implementation is based completely on San Bergmans description * of this file format, last updated on 23 August, 2005. * * http://www.sbprojects.com * In the "Knowledge Base" section. * * $Id: intel_hex.c 125 2012-12-24 18:56:14Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #define _GNU_SOURCE #include #include #include #include #include "intel_hex.h" struct intel_record { unsigned int count; unsigned int type; unsigned int checksum; unsigned int address; char data[256]; }; /* * This walks over the record and ensures that the checksum is * correct for the record. * * returns 0 if checksum validates, anything else on error */ static int intel_validate_checksum( struct intel_record *record ) { int i = 0; int checksum = 0; checksum = record->count + record->type + record->checksum + (record->address >> 8) + (0xff & record->address); for( i = 0; i < record->count; i++ ) { checksum += record->data[i]; } return (0xff & checksum); } static int intel_validate_line( struct intel_record *record ) { /* Validate the checksum */ if( 0 != intel_validate_checksum(record) ) { return -1; } /* Validate the type */ switch( record->type ) { /* Intel 1 format, for up to 64K length (types 0, 1) */ case 0: /* data record */ /* Nothing to do. */ break; case 1: /* EOF record */ if( 0 != record->count ) return -2; break; /* Intel 2 format, when 20 bit addresses are needed (types 2, 3, 4) */ case 2: /* extended address record */ if( (0 != record->address) || (2 != record->count) || (record->data[1] != (0xf8 & record->data[1])) ) { return -3; } break; case 3: /* start address record */ /* just ignore these records (could verify addr == 0) */ return -8; case 4: /* extended linear address record */ if( (0 != record->address) || (2 != record->count) ) return -4; break; case 5: /* start linear address record */ if( (0 != record->address) || (4 != record->count) ) { return -6; } break; default: fprintf( stderr, "Unsupported type. %d\n", record->type ); /* Type 5 and other types are unsupported. */ return -5; } return 0; } static void intel_process_address( struct intel_record *record ) { switch( record->type ) { case 2: /* 0x1238 -> 0x00012380 */ record->address = ((0xff & record->data[0]) << 8); record->address |= (0xff & record->data[1]); record->address *= 16; break; case 4: /* 0x1234 -> 0x12340000 */ record->address = ((0xff & record->data[0]) << 8); record->address |= (0xff & record->data[1]); record->address <<= 16; break; case 5: /* 0x12345678 -> 0x12345678 */ record->address = ((0xff & record->data[0]) << 24) | ((0xff & record->data[1]) << 16) | ((0xff & record->data[2]) << 8) | (0xff & record->data[3]); break; } } static int intel_read_data( FILE *fp, struct intel_record *record ) { int i; int c; int status; char buffer[10]; int addr_upper = 0; int addr_lower = 0; /* read in the ':bbaaaarr' * bb - byte count * aaaa - the address in memory * rr - record type */ if( NULL == fgets(buffer, 10, fp) ) return -1; status = sscanf( buffer, ":%02x%02x%02x%02x", &(record->count), &addr_upper, &addr_lower, &(record->type) ); if( 4 != status ) return -2; record->address = addr_upper << 8 | addr_lower; /* Read the data */ for( i = 0; i < record->count; i++ ) { int data = 0; if( NULL == fgets(buffer, 3, fp) ) return -3; if( 1 != sscanf(buffer, "%02x", &data) ) return -4; record->data[i] = 0xff & data; } /* Read the checksum */ if( NULL == fgets(buffer, 3, fp) ) return -5; if( 1 != sscanf(buffer, "%02x", &(record->checksum)) ) return -6; /* Chomp the [\r]\n */ c = fgetc( fp ); if( '\r' == c ) { c = fgetc( fp ); } if( '\n' != c ) { return -7; } return 0; } static int intel_parse_line( FILE *fp, struct intel_record *record ) { if( 0 != intel_read_data(fp, record) ) return -1; switch( intel_validate_line(record) ) { case 0: /* data, extended address, etc */ intel_process_address( record ); break; case -8: /* start address (ignore) */ break; default: return -1; } return 0; } int16_t *intel_hex_to_buffer( char *filename, int max_size, int *usage ) { int16_t *memory = NULL; FILE *fp = NULL; int failure = 1; struct intel_record record; unsigned int address = 0; unsigned int address_offset = 0; int i = 0; if( (NULL == filename) || (0 >= max_size) ) { fprintf( stderr, "Invalid filename or max_size.\n" ); goto error; } if( 0 == strcmp("STDIN",filename) ) { fp = stdin; } else { fp = fopen( filename, "r" ); if( NULL == fp ) { fprintf( stderr, "Error opening the file.\n" ); goto error; } } memory = (int16_t *) malloc( max_size * sizeof(int16_t) ); if( NULL == memory ) { fprintf( stderr, "Error getting the needed memory.\n" ); goto error; } for( i = 0; i < max_size; i++ ) { memory[i] = -1; } *usage = 0; do { if( 0 != intel_parse_line(fp, &record) ) { fprintf( stderr, "Error parsing the line.\n" ); goto error; } switch( record.type ) { case 0: address = address_offset + record.address; for( i = 0; i < record.count; i++ ) { if( address >= max_size ) { fprintf( stderr, "Address error.\n" ); goto error; } memory[address++] = 0xff & record.data[i]; (*usage)++; } break; case 2: case 4: case 5: /* Note: AVR32 "User Page" data will bother this algorithm because * that starts at 0x00800000 this will be out of range and cause * errors until "User Page" programming is implemented. See section * "18.4.3 User page" in the AT32UC3A datasheet for more details. */ /* Note: In AVR32 memory map, FLASH starts at 0x80000000, but the * ISP places this memory at 0. The hex file will use 0x8..., so * mask off that bit. */ address_offset = (0x7fffffff & record.address); break; } } while( (1 != record.type) ); failure = 0; error: if( NULL != fp ) { fclose( fp ); fp = NULL; } if( (NULL != memory) && (0 != failure) ) { free( memory ); memory = NULL; } return memory; } dfu-programmer-0.6.1/src/intel_hex.h0000644000076400010400000000273012066122517014305 00000000000000/* * dfu-programmer * * $Id: intel_hex.h 125 2012-12-24 18:56:14Z slarge $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __INTEL_HEX_H__ #define __INTEL_HEX_H__ #include /** * Used to read in a file in intel hex format and return a chunck of * memory containing the memory image described in the file. * * \param filename the name of the intel hex file to process * \param max_size the maximum size of the memory image in bytes * \param usage[out] the amount of the available memory image used * * \return an array of int16_t's where the values 0-255 are valid memory * values, and anything else indicates an unused memory location, * NULL on anything other than a success */ int16_t *intel_hex_to_buffer( char *filename, int max_size, int *usage ); #endif dfu-programmer-0.6.1/src/main.c0000644000076400010400000000732012111520156013235 00000000000000/* * dfu-programmer * * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #if HAVE_CONFIG_H # include #endif #include #include #ifdef HAVE_LIBUSB_1_0 #include #else #include #endif #include "config.h" #include "dfu-device.h" #include "dfu.h" #include "atmel.h" #include "arguments.h" #include "commands.h" int debug; #ifdef HAVE_LIBUSB_1_0 libusb_context *usbcontext; #endif int main( int argc, char **argv ) { static const char *progname = PACKAGE; int retval = 0; dfu_device_t dfu_device; struct programmer_arguments args; #ifdef HAVE_LIBUSB_1_0 struct libusb_device *device = NULL; #else struct usb_device *device = NULL; #endif #ifdef HAVE_LIBUSB_1_0 if (libusb_init(&usbcontext)) { fprintf( stderr, "%s: can't init libusb.\n", progname ); } #else usb_init(); #endif memset( &args, 0, sizeof(args) ); memset( &dfu_device, 0, sizeof(dfu_device) ); if( 0 != parse_arguments(&args, argc, argv) ) { retval = 1; goto error; } if( args.command == com_version ) { printf( PACKAGE_STRING "\n" ); return 0; } if( debug >= 200 ) { #ifdef HAVE_LIBUSB_1_0 libusb_set_debug(usbcontext, debug ); #else usb_set_debug( debug ); #endif } device = dfu_device_init( args.vendor_id, args.chip_id, args.bus_id, args.device_address, &dfu_device, args.initial_abort, args.honor_interfaceclass ); if( NULL == device ) { fprintf( stderr, "%s: no device present.\n", progname ); retval = 1; goto error; } if( 0 != execute_command(&dfu_device, &args) ) { /* command issued a specific diagnostic already */ retval = 1; goto error; } retval = 0; error: if( NULL != dfu_device.handle ) { int rv; #ifdef HAVE_LIBUSB_1_0 rv = libusb_release_interface( dfu_device.handle, dfu_device.interface ); #else rv = usb_release_interface( dfu_device.handle, dfu_device.interface ); #endif /* The RESET command sometimes causes the usb_release_interface command to fail. It is not obvious why this happens but it may be a glitch due to the hardware reset in the attached device. In any event, since reset causes a USB detach this should not matter, so there is no point in raising an alarm. */ if( 0 != rv && com_reset != args.command ) { fprintf( stderr, "%s: failed to release interface %d.\n", progname, dfu_device.interface ); retval = 1; } } if( NULL != dfu_device.handle ) { #ifdef HAVE_LIBUSB_1_0 libusb_close(dfu_device.handle); #else if( 0 != usb_close(dfu_device.handle) ) { fprintf( stderr, "%s: failed to close the handle.\n", progname ); retval = 1; } #endif } #ifdef HAVE_LIBUSB_1_0 libusb_exit(usbcontext); #endif return retval; } dfu-programmer-0.6.1/src/Makefile.am0000644000076400010400000000041712066122517014211 00000000000000AM_CFLAGS = -Wall bin_PROGRAMS = dfu-programmer dfu_programmer_SOURCES = main.c arguments.c arguments.h atmel.c atmel.h \ commands.c commands.h dfu.c dfu.h dfu-bool.h \ dfu-device.h intel_hex.c intel_hex.h util.c util.h dfu-programmer-0.6.1/src/Makefile.in0000644000076400010400000003477212127275520014236 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = dfu-programmer$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_dfu_programmer_OBJECTS = main.$(OBJEXT) arguments.$(OBJEXT) \ atmel.$(OBJEXT) commands.$(OBJEXT) dfu.$(OBJEXT) \ intel_hex.$(OBJEXT) util.$(OBJEXT) dfu_programmer_OBJECTS = $(am_dfu_programmer_OBJECTS) dfu_programmer_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/m4/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(dfu_programmer_SOURCES) DIST_SOURCES = $(dfu_programmer_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = -Wall dfu_programmer_SOURCES = main.c arguments.c arguments.h atmel.c atmel.h \ commands.c commands.h dfu.c dfu.h dfu-bool.h \ dfu-device.h intel_hex.c intel_hex.h util.c util.h all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) dfu-programmer$(EXEEXT): $(dfu_programmer_OBJECTS) $(dfu_programmer_DEPENDENCIES) @rm -f dfu-programmer$(EXEEXT) $(LINK) $(dfu_programmer_OBJECTS) $(dfu_programmer_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arguments.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atmel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intel_hex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: dfu-programmer-0.6.1/src/util.c0000644000076400010400000000231212065120624013266 00000000000000/* * dfu-programmer * * $Id: atmel.c 25 2006-06-25 00:01:37Z schmidtw $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include "util.h" extern int debug; void dfu_debug( const char *file, const char *function, const int line, const int level, const char *format, ... ) { if( level < debug ) { va_list va_arg; va_start( va_arg, format ); fprintf( stderr, "%s:%d: ", file, line ); vfprintf( stderr, format, va_arg ); va_end( va_arg ); } } dfu-programmer-0.6.1/src/util.h0000644000076400010400000000174712065120624013306 00000000000000/* * dfu-programmer * * $Id: atmel.h 21 2006-06-20 06:28:04Z schmidtw $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __UTIL_H__ #define __UTIL_H__ #include void dfu_debug( const char *file, const char *function, const int line, const int level, const char *format, ... ); #endif