diff --git a/.gitignore b/.gitignore index c1a74c9..9faa5d6 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,3 @@ /avrdude-7.*/ /avrdude-7.*.tar.gz /avrdude-7.*-filtered.tar.xz -/avrdude-8.0/ -/avrdude-8.0.tar.gz diff --git a/GNUmakefile b/GNUmakefile index 912296c..58bd637 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,31 +1,35 @@ name = avrdude -version = 8.0 +version = 7.3 RELEASES = -RELEASES += f42 -RELEASES += f41 RELEASES += f40 RELEASES += f39 +RELEASES += f38 RELEASES += el9 RELEASES += el8 MOCK_OPTS = # MOCK_OPTS += --without docs +filter-tarball = filter-tarball + .PHONY: all all: $(name)-rpm.stamp git grep -Ei '([F]IXME|[T]ODO|[X]XX)' ||: -$(name)-rpm.stamp: $(name)-$(version).tar.gz $(name).spec $(name).udev README.fedora $(wildcard $(name)-*.patch) - set -ex; \ - fedpkg local; \ - for rel in $(RELEASES); do \ - fedpkg --release "$$rel" mockbuild; \ - done +$(name)-rpm.stamp: $(name)-$(version)-filtered.tar.xz $(name).spec $(name).udev README.fedora $(wildcard $(name)-*.patch) + set -ex; fedpkg local; for rel in $(RELEASES); do fedpkg --release "$$rel" mockbuild; done date > $@ +$(name)-$(version)-filtered.tar.xz: $(name)-$(version).tar.gz $(filter-tarball) file-licensing + black --line-length 80 $(filter-tarball) + flake8 $(filter-tarball) + mypy $(filter-tarball) + rm -f $(name)-$(version)-filtered.tar.xz + python3 $(filter-tarball) $< + sha512sum --tag $@ > sources + $(name)-$(version).tar.gz: curl -L -o $@ https://github.com/avrdudes/$(name)/archive/refs/tags/v$(version).tar.gz - sha512sum --tag $@ > sources # End of file. diff --git a/avrdude-7.2-fedora-relocate-avrdude-conf.patch b/avrdude-7.2-fedora-relocate-avrdude-conf.patch new file mode 100644 index 0000000..28b0eff --- /dev/null +++ b/avrdude-7.2-fedora-relocate-avrdude-conf.patch @@ -0,0 +1,65 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9ab5a832..104fcc5d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -48,7 +48,7 @@ include(FetchContent) + include(FindPackageMessage) + include(GNUInstallDirs) + +-set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}") ++set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${CMAKE_PROJECT_NAME}") + set(AVRDUDE_FULL_VERSION ${CMAKE_PROJECT_VERSION}) + + # ===================================== +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index c10a77eb..1afdf495 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -313,7 +313,9 @@ install(TARGETS libavrdude + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION include COMPONENT dev + ) +-install(FILES "${CMAKE_CURRENT_BINARY_DIR}/avrdude.conf" TYPE SYSCONF) ++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/avrdude.conf" ++ DESTINATION "${CONFIG_DIR}" ++) + install(FILES "avrdude.1" + DESTINATION "${CMAKE_INSTALL_MANDIR}/man1" + ) +diff --git a/src/avrdude.1 b/src/avrdude.1 +index 2399f3d4..61962fb4 100644 +--- a/src/avrdude.1 ++++ b/src/avrdude.1 +@@ -423,7 +423,7 @@ contains all programmer and part definitions that + .Nm avrdude + knows about. + See the config file, located at +-.Pa ${PREFIX}/etc/avrdude.conf , ++.Pa /etc/avrdude/avrdude.conf , + which contains a description of the format. + .Pp + If +@@ -1823,7 +1823,7 @@ On all other systems, the file is first looked up in + .Pa ../etc/ , + relative to the path of the executable, then in the same directory as + the executable itself, and finally in the system default location +-.Pa ${PREFIX}/etc/avrdude.conf . ++.Pa /etc/avrdude/avrdude.conf . + .It Pa ${XDG_CONFIG_HOME}/avrdude/avrdude.rc + Local programmer and parts configuration file (per-user overrides); it follows the same syntax as + .Pa avrdude.conf ; +diff --git a/src/doc/avrdude.texi b/src/doc/avrdude.texi +index ecbcd58d..43730d3f 100644 +--- a/src/doc/avrdude.texi ++++ b/src/doc/avrdude.texi +@@ -540,8 +540,8 @@ two locations: + + @end enumerate + +-If not found there, the lookup procedure becomes platform dependent. On FreeBSD +-and Linux, AVRDUDE looks at @code{/usr/local/etc/avrdude.conf}. See Appendix A ++If not found there, the lookup procedure becomes platform dependent. On ++Fedora Linux, AVRDUDE looks at @code{/etc/avrdude/avrdude.conf}. See Appendix A + for the method of searching on Windows. + + If @var{config-file} is written as @var{+filename} diff --git a/avrdude.spec b/avrdude.spec index 58d5948..0ebe25b 100644 --- a/avrdude.spec +++ b/avrdude.spec @@ -1,39 +1,46 @@ -%global udev_rules_old 70-avrdude-devices.rules -%global udev_rules_gen 71-avrdude-devices.rules +%global udev_rules 70-avrdude_usbprog.rules # Allow skipping doc builds for faster mockbuilds without the # literally hundreds of extra packages required for building docs. %bcond_without docs Name: avrdude -Version: 8.0 -Release: 8%{?dist} +Version: 7.3 +Release: 1%{?dist} Summary: Software for programming Atmel AVR Microcontroller License: GPL-2.0-or-later AND GPL-3.0-only AND (WTFPL OR MIT) URL: https://github.com/avrdudes/avrdude -# Upstream avrdude have no 4big endian support planned. -# https://bugzilla.redhat.com/show_bug.cgi?id=2308947 -# https://github.com/avrdudes/avrdude/issues/1917 -ExcludeArch: s390x +# Upstream release tarballs are just git repo dumps, which includes +# pdf doc files which we cannot redistribute. +# Source0: https://github.com/avrdudes/%%{name}/archive/refs/tags/v%%{version}.tar.gz#/%%{name}-%%{version}.tar.gz -Source0: https://github.com/avrdudes/%{name}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz +# So we need to filter out the files we *can* distribute, before we +# can "fedpkg new-sources" the tarball. "make" should do about this: +# curl -L -o %%{name}-%%{version}.tar.gz https://github.com/avrdudes/%%{name}/archive/refs/tags/v%%{version}.tar.gz +# python3 filter-tarball %%{name}-%%{version}.tar.gz +# That results in rpmlint "avrdude.spec: W: invalid-url Source0: …" +Source0: %{name}-%{version}-filtered.tar.xz +Source10: filter-tarball +Source11: file-licensing # Debian have a more comprehensive list of programmer devices in their # avrdude.dev file. We do cannot use this unchanged, though, as we do # not want to grant blanket access to all ttyUSB and ttyACM devices. # Source1: https://salsa.debian.org/debian/avrdude/-/raw/master/debian/avrdude.udev +# FIXME: Create udev rules from the device list in avrdude.conf Source1: avrdude.udev # Remarks on the Fedora package for the users Source2: README.fedora -# Quick fix elf2tag man page -Source5: elf2tag.1 - # Stop granting blanket access to all /dev/tty{ACM,USB}* devices -Patch: avrdude-udev-no-blanket-access.patch +Patch1: avrdude-udev-no-blanket-access.patch + +# Move avrdude.conf from upstream location /usr/etc/ to /etc/avrdude/ +# FIXME: Eventually move avrdude.conf to /usr/share/avrdude/ +Patch: avrdude-7.2-fedora-relocate-avrdude-conf.patch BuildRequires: cmake BuildRequires: gcc @@ -41,12 +48,10 @@ BuildRequires: flex BuildRequires: bison BuildRequires: elfutils-libelf-devel BuildRequires: hidapi-devel -%if ((0%{?fedora} >= 1) || (0%{?rhel} >= 8)) -BuildRequires: libgpiod-devel -%endif -%if ((0%{?fedora} >= 1) || (0%{?rhel} >= 9)) -BuildRequires: libserialport-devel -%endif +# Optional: Still build problems with gpiod in avrdude-7.3 +# BuildRequires: libgpiod-devel +# Optional: libserialport +# BuildRequires: libserialport-devel # EL does not have libhid-devel %if 0%{?fedora} >= 28 BuildRequires: libhid-devel @@ -54,6 +59,7 @@ BuildRequires: libhid-devel BuildRequires: readline-devel BuildRequires: ncurses-devel BuildRequires: libftdi-devel +BuildRequires: pkgconfig(libusb) BuildRequires: pkgconfig(libusb-1.0) %if %{with docs} BuildRequires: texi2html @@ -85,7 +91,6 @@ if test -d atmel-docs; then echo "Directory 'atmel-docs' still exists, aborting." exit 2 fi -sed -i 's|^find_package(SWIG|\# find_package(SWIG|' CMakeLists.txt %build @@ -104,42 +109,24 @@ sed -i 's|^find_package(SWIG|\# find_package(SWIG|' CMakeLists.txt -D FETCHCONTENT_QUIET:BOOL=OFF \ -D BUILD_SHARED_LIBS:BOOL=NO \ -D USE_STATIC_LIBS:BOOL=YES - -if test -d _deps; then - echo "cmake appears to have fetched some dependency despite our precautions:" - ls -l _deps - exit 2 -fi - %cmake_build -# generate set of udev rules from avrdude.conf -%{__cmake_builddir}/src/avrdude -C %{__cmake_builddir}/src/avrdude.conf -c '*/u' \ - | sed -n '/ACTION!=/,$p' \ - | sed 's|, MODE="0660"||' \ - > genset.rules -test -s genset.rules - %install %cmake_install - -rm -f $RPM_BUILD_ROOT%{_infodir}/dir - -rm -f $RPM_BUILD_ROOT%{_includedir}/libavrdude-avrintel.h rm -f $RPM_BUILD_ROOT%{_includedir}/libavrdude.h +rm -f $RPM_BUILD_ROOT%{_infodir}/dir rm -f $RPM_BUILD_ROOT%{_libdir}/libavrdude.a - -install -d -m 755 $RPM_BUILD_ROOT%{_udevrulesdir} -install -p -m 644 avrdude.udev $RPM_BUILD_ROOT%{_udevrulesdir}/%{udev_rules_old} -install -p -m 644 genset.rules $RPM_BUILD_ROOT%{_udevrulesdir}/%{udev_rules_gen} - -install -d -m 755 $RPM_BUILD_ROOT%{_pkgdocdir} +rm -f $RPM_BUILD_ROOT%{_libdir}/libavrdude.so +rm -f $RPM_BUILD_ROOT%{_libdir}/libavrdude.so.1 +rm -f $RPM_BUILD_ROOT%{_libdir}/libavrdude.so.1.0.0 +rm -f $RPM_BUILD_ROOT%{_pkgdocdir}/avrdude.dvi +rm -f $RPM_BUILD_ROOT%{_pkgdocdir}/avrdude.ps +install -d -m 755 $RPM_BUILD_ROOT%{_udevrulesdir} +install -p -m 644 avrdude.udev $RPM_BUILD_ROOT%{_udevrulesdir}/%{udev_rules} +install -d -m 755 $RPM_BUILD_ROOT%{_pkgdocdir} install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_pkgdocdir}/README.fedora -install -p -m 644 -t $RPM_BUILD_ROOT%{_pkgdocdir} AUTHORS NEWS README.md - -install -d -m 755 $RPM_BUILD_ROOT%{_mandir}/man1 -install -p -m 644 %{SOURCE5} $RPM_BUILD_ROOT%{_mandir}/man1/elf2tag.1 +install -p -m 644 -t $RPM_BUILD_ROOT%{_pkgdocdir} AUTHORS NEWS README.md %check @@ -156,55 +143,17 @@ install -p -m 644 %{SOURCE5} $RPM_BUILD_ROOT%{_mandir}/man1/elf2tag.1 %doc %{_pkgdocdir}/avrdude-html/ %doc %{_pkgdocdir}/avrdude.pdf %endif -%config(noreplace) %{_sysconfdir}/avrdude.conf -%{_udevrulesdir}/%{udev_rules_old} -%{_udevrulesdir}/%{udev_rules_gen} -%{_bindir}/avrdude -%{_bindir}/elf2tag -%{_mandir}/man1/avrdude.1* -%{_mandir}/man1/elf2tag.1* +%dir %{_sysconfdir}/%{name} +%config(noreplace) %{_sysconfdir}/%{name}/avrdude.conf +%{_udevrulesdir}/%{udev_rules} +%{_bindir}/%{name} +%{_mandir}/man1/%{name}.1* %if %{with docs} -%{_infodir}/avrdude.info* +%{_infodir}/%{name}.info* %endif %changelog -* Fri Jan 16 2026 Fedora Release Engineering - 8.0-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild - -* Wed Jul 23 2025 Fedora Release Engineering - 8.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Thu Jan 16 2025 Fedora Release Engineering - 8.0-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Sun Sep 1 2024 Hans Ulrich Niedermann - 8.0-5 -- ExcludeArch: s390x (#2308947) -- Add elf2tag.1 man page - -* Fri Aug 30 2024 Hans Ulrich Niedermann - 8.0-4 -- Actually ship static copy of udev rules as s390x workaround - -* Fri Aug 30 2024 Hans Ulrich Niedermann - 8.0-3 -- Ship static copy of udev rules as s390x workaround - -* Thu Aug 29 2024 Hans Ulrich Niedermann - 8.0-2 -- Rebuilt for forgotten new-sources - -* Sun Aug 25 2024 Hans Ulrich Niedermann - 8.0-1 -- Update to avrdude-8.0 release (#2307778) -- Enable libserialport support -- Build without old pre-1.0 libusb -- Build with libgpiod -- Move config file from /etc/avrdude/avrdude.conf to /etc/avrdude.conf -- Continue not shipping libavrdude library due to unstable API/ABI -- Do not build/ship libavrdude SWIG bindings (unstable API/ABI) -- Do not build/ship avrdude GUI based on the SWIG bindings -- Add new set of autogenerated udev rules - -* Wed Jul 17 2024 Fedora Release Engineering - 7.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - * Wed Feb 7 2024 Hans Ulrich Niedermann - 7.3-1 - Update to avrdude-7.3 release - Enable linuxgpio (without libgpiod, though) diff --git a/elf2tag.1 b/elf2tag.1 deleted file mode 100644 index 765c364..0000000 --- a/elf2tag.1 +++ /dev/null @@ -1,63 +0,0 @@ -'\" t -.\" Title: elf2tag -.\" Author: [see the "AUTHOR(S)" section] -.\" Generator: Asciidoctor 2.0.20 -.\" Date: 2024-09-01 -.\" Manual: elf2tag Manual -.\" Source: avrdude -.\" Language: English -.\" -.TH "ELF2TAG" "1" "2024-09-01" "avrdude" "elf2tag Manual" -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.ss \n[.ss] 0 -.nh -.ad l -.de URL -\fI\\$2\fP <\\$1>\\$3 -.. -.als MTO URL -.if \n[.g] \{\ -. mso www.tmac -. am URL -. ad l -. . -. am MTO -. ad l -. . -. LINKSTYLE blue R < > -.\} -.SH "NAME" -elf2tag \- output a tagfile for the avrdude disasm command -.SH "SYNOPSIS" -.sp -\fBelf2tag\fP -.sp -\fBelf2tag\fP [\fB\-h\fP | \fB\-\-help\fP] -.SH "DESCRIPTION" -.sp -\fIelf2tag\fP generates a tagfile for use with the \fIavrdude disasm\fP command. -.SH "OPTIONS" -.sp -\fB\-h\fP \fB\-\-help\fP -.RS 4 -Prints the help message and exits. -.RE -.SH "EXAMPLES" -.sp -.if n .RS 4 -.nf -.fam C -$ elf2tag file.elf > file.tag -$ avrdude \-t ... -avrdude> ... -avrdude> disasm \-t=file.tag ... -.fam -.fi -.if n .RE -.SH "AUTHORS" -.sp -\fIelf2tag\fP was written by Johannes Bauer with small modifications by Stefan Rueger. -.SH "SEE ALSO" -.sp -\fBavrdude(1)\fP, \fBavr\-nm\fP, \fBavr\-objdump(1)\fP \ No newline at end of file diff --git a/file-licensing b/file-licensing new file mode 100644 index 0000000..bff8b57 --- /dev/null +++ b/file-licensing @@ -0,0 +1,610 @@ +# File format: +# * Empty lines are ignored. +# * Lines starting with a # are ignored. +# * Lines not containing a TAB character are ignored. +# +# Each valid line contains +# * SPDX license expression or one of our special markers: +# * "x" for a file to be removed from the tarball +# * "-" for unclear, but keep the file in the tarball +# * the filename for the SPDX license expression applies +# * an optional human readable remark +# separated by TAB characters. +# +# Some resources helping maintaining this file: +# * licensecheck(1) +# * the SPDX specs + +# Written for the git commit hash a336e47a6e1fe069c45096edaeda1b4841ad7ce5. + +# License inside file file name +# ------------------------------------------------------------------------ +- .editorconfig +- .gitattributes +- .github/workflows/arduino_packing.yml +GPL-2.0-or-later .github/workflows/build.yml +GPL-2.0-or-later .github/workflows/deploy.yml +- .gitignore +- AUTHORS +GPL-2.0-or-later CMakeLists.txt +- CMakeSettings.json +- COPYING +- INSTALL +- NEWS +- README.md +x atmel-docs/AVR109.pdf +x atmel-docs/AVR910.pdf +x atmel-docs/AVRISPmkII-AVR069.pdf +x atmel-docs/EDBG/common/browserDetect.js +x atmel-docs/EDBG/common/css/960.css +x atmel-docs/EDBG/common/css/docbook.css +x atmel-docs/EDBG/common/css/fluid_grid.css +x atmel-docs/EDBG/common/css/index.css +x atmel-docs/EDBG/common/css/positioning.css +x atmel-docs/EDBG/common/css/print.css +x atmel-docs/EDBG/common/css/reset.css +x atmel-docs/EDBG/common/css/text.css +x atmel-docs/EDBG/common/fonts/DroidSansMono.eot +x atmel-docs/EDBG/common/fonts/DroidSansMono.ttf +x atmel-docs/EDBG/common/images/Book_Closed.png +x atmel-docs/EDBG/common/images/Book_Open.png +x atmel-docs/EDBG/common/images/Document_Text.png +x atmel-docs/EDBG/common/images/Library.png +x atmel-docs/EDBG/common/images/external_link.gif +x atmel-docs/EDBG/common/images/loading.gif +x atmel-docs/EDBG/common/images/logo.png +x atmel-docs/EDBG/common/images/minus.png +x atmel-docs/EDBG/common/images/next-arrow.png +x atmel-docs/EDBG/common/images/plus.png +x atmel-docs/EDBG/common/images/previous-arrow.png +x atmel-docs/EDBG/common/images/search-icon.png +x atmel-docs/EDBG/common/images/sidebar.png +x atmel-docs/EDBG/common/images/starsSmall.png +x atmel-docs/EDBG/common/images/toc-icon.png +x atmel-docs/EDBG/common/images/ui-icons_217bc0_256x240.png +x atmel-docs/EDBG/common/jquery/jquery-1.7.2.min.js +x atmel-docs/EDBG/common/jquery/jquery.cookie.js +x atmel-docs/EDBG/common/jquery/jquery.ui.all.js +x atmel-docs/EDBG/common/jquery/layout/jquery.layout.js +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-anim_basic_16x16.gif +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_flat_55_fbec88_40x100.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_85_dfeffc_1x400.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_glass_95_fef1ec_1x400.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_217bc0_256x240.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_2e83ff_256x240.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_469bdd_256x240.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_6da8d5_256x240.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_cd0a0a_256x240.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_d8e7f3_256x240.png +x atmel-docs/EDBG/common/jquery/theme-redmond/images/ui-icons_f9bd01_256x240.png +x atmel-docs/EDBG/common/jquery/theme-redmond/jquery-ui-1.8.2.custom.css +x atmel-docs/EDBG/common/jquery/treeview/images/file.gif +x atmel-docs/EDBG/common/jquery/treeview/images/folder-closed.gif +x atmel-docs/EDBG/common/jquery/treeview/images/folder.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-black-line.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-black.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-default-line.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-default.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam-line.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-famfamfam.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray-line.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-gray.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-red-line.gif +x atmel-docs/EDBG/common/jquery/treeview/images/treeview-red.gif +x atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.css +x atmel-docs/EDBG/common/jquery/treeview/jquery.treeview.min.js +x atmel-docs/EDBG/common/main.js +x atmel-docs/EDBG/common/splitterInit.js +x atmel-docs/EDBG/protocoldocs/ch01s01.html +x atmel-docs/EDBG/protocoldocs/ch01s02.html +x atmel-docs/EDBG/protocoldocs/ch02s01.html +x atmel-docs/EDBG/protocoldocs/ch02s02.html +x atmel-docs/EDBG/protocoldocs/ch02s02s01.html +x atmel-docs/EDBG/protocoldocs/ch02s02s02.html +x atmel-docs/EDBG/protocoldocs/ch02s02s02s01.html +x atmel-docs/EDBG/protocoldocs/ch02s02s02s02.html +x atmel-docs/EDBG/protocoldocs/ch02s02s03.html +x atmel-docs/EDBG/protocoldocs/ch02s02s03s01.html +x atmel-docs/EDBG/protocoldocs/ch02s02s03s02.html +x atmel-docs/EDBG/protocoldocs/ch02s02s03s03.html +x atmel-docs/EDBG/protocoldocs/ch02s02s03s04.html +x atmel-docs/EDBG/protocoldocs/ch02s03s01.html +x atmel-docs/EDBG/protocoldocs/ch02s03s02.html +x atmel-docs/EDBG/protocoldocs/ch02s03s03.html +x atmel-docs/EDBG/protocoldocs/ch02s03s04.html +x atmel-docs/EDBG/protocoldocs/ch02s03s05.html +x atmel-docs/EDBG/protocoldocs/ch02s03s06.html +x atmel-docs/EDBG/protocoldocs/ch02s03s07.html +x atmel-docs/EDBG/protocoldocs/ch02s03s08.html +x atmel-docs/EDBG/protocoldocs/ch02s03s09.html +x atmel-docs/EDBG/protocoldocs/ch02s04.html +x atmel-docs/EDBG/protocoldocs/ch02s04s01.html +x atmel-docs/EDBG/protocoldocs/ch02s04s02.html +x atmel-docs/EDBG/protocoldocs/ch02s04s03.html +x atmel-docs/EDBG/protocoldocs/ch03s01.html +x atmel-docs/EDBG/protocoldocs/ch03s01s01.html +x atmel-docs/EDBG/protocoldocs/ch03s01s01.html~ +x atmel-docs/EDBG/protocoldocs/ch03s01s02.html +x atmel-docs/EDBG/protocoldocs/ch03s01s03.html +x atmel-docs/EDBG/protocoldocs/ch03s01s03s01.html +x atmel-docs/EDBG/protocoldocs/ch03s02.html +x atmel-docs/EDBG/protocoldocs/ch03s02s01.html +x atmel-docs/EDBG/protocoldocs/ch03s02s02.html +x atmel-docs/EDBG/protocoldocs/ch03s02s03.html +x atmel-docs/EDBG/protocoldocs/ch03s02s04.html +x atmel-docs/EDBG/protocoldocs/ch04s01.html +x atmel-docs/EDBG/protocoldocs/ch04s02.html +x atmel-docs/EDBG/protocoldocs/ch04s03.html +x atmel-docs/EDBG/protocoldocs/ch04s04.html +x atmel-docs/EDBG/protocoldocs/ch04s04s01.html +x atmel-docs/EDBG/protocoldocs/ch04s04s03.html +x atmel-docs/EDBG/protocoldocs/ch04s04s04.html +x atmel-docs/EDBG/protocoldocs/ch04s04s05.html +x atmel-docs/EDBG/protocoldocs/ch04s05.html +x atmel-docs/EDBG/protocoldocs/ch04s05s01.html +x atmel-docs/EDBG/protocoldocs/ch04s05s03.html +x atmel-docs/EDBG/protocoldocs/ch04s05s04.html +x atmel-docs/EDBG/protocoldocs/ch04s05s06.html +x atmel-docs/EDBG/protocoldocs/ch04s05s06s02.html +x atmel-docs/EDBG/protocoldocs/ch04s05s06s03.html +x atmel-docs/EDBG/protocoldocs/ch04s05s06s04.html +x atmel-docs/EDBG/protocoldocs/ch04s05s06s05.html +x atmel-docs/EDBG/protocoldocs/ch04s05s07.html +x atmel-docs/EDBG/protocoldocs/ch04s05s07s01.html +x atmel-docs/EDBG/protocoldocs/ch04s05s07s02.html +x atmel-docs/EDBG/protocoldocs/ch04s05s07s03.html +x atmel-docs/EDBG/protocoldocs/ch04s05s07s04.html +x atmel-docs/EDBG/protocoldocs/ch04s05s08.html +x atmel-docs/EDBG/protocoldocs/ch04s05s08s01.html +x atmel-docs/EDBG/protocoldocs/ch04s05s08s02.html +x atmel-docs/EDBG/protocoldocs/ch04s05s08s03.html +x atmel-docs/EDBG/protocoldocs/ch04s05s09.html +x atmel-docs/EDBG/protocoldocs/ch04s05s10.html +x atmel-docs/EDBG/protocoldocs/ch05s01.html +x atmel-docs/EDBG/protocoldocs/ch05s01s01.html +x atmel-docs/EDBG/protocoldocs/ch05s01s02.html +x atmel-docs/EDBG/protocoldocs/ch05s01s03.html +x atmel-docs/EDBG/protocoldocs/ch05s01s04.html +x atmel-docs/EDBG/protocoldocs/ch05s01s05.html +x atmel-docs/EDBG/protocoldocs/ch05s01s06.html +x atmel-docs/EDBG/protocoldocs/ch05s01s07.html +x atmel-docs/EDBG/protocoldocs/ch05s01s08.html +x atmel-docs/EDBG/protocoldocs/ch05s01s09.html +x atmel-docs/EDBG/protocoldocs/ch05s01s10.html +x atmel-docs/EDBG/protocoldocs/ch05s01s11.html +x atmel-docs/EDBG/protocoldocs/ch05s01s12.html +x atmel-docs/EDBG/protocoldocs/ch05s01s13.html +x atmel-docs/EDBG/protocoldocs/ch05s01s14.html +x atmel-docs/EDBG/protocoldocs/ch05s01s15.html +x atmel-docs/EDBG/protocoldocs/ch05s02.html +x atmel-docs/EDBG/protocoldocs/ch05s02s01.html +x atmel-docs/EDBG/protocoldocs/ch05s02s02.html +x atmel-docs/EDBG/protocoldocs/ch05s02s03.html +x atmel-docs/EDBG/protocoldocs/ch05s02s04.html +x atmel-docs/EDBG/protocoldocs/ch05s02s05.html +x atmel-docs/EDBG/protocoldocs/ch05s02s06.html +x atmel-docs/EDBG/protocoldocs/ch05s03.html +x atmel-docs/EDBG/protocoldocs/ch05s03s01.html +x atmel-docs/EDBG/protocoldocs/ch05s03s02.html +x atmel-docs/EDBG/protocoldocs/ch05s03s03.html +x atmel-docs/EDBG/protocoldocs/ch05s04.html +x atmel-docs/EDBG/protocoldocs/ch06s01.html +x atmel-docs/EDBG/protocoldocs/ch06s01s01.html +x atmel-docs/EDBG/protocoldocs/ch06s01s02.html +x atmel-docs/EDBG/protocoldocs/ch06s01s03.html +x atmel-docs/EDBG/protocoldocs/ch06s01s04.html +x atmel-docs/EDBG/protocoldocs/ch06s01s05.html +x atmel-docs/EDBG/protocoldocs/ch06s01s06.html +x atmel-docs/EDBG/protocoldocs/ch06s01s07.html +x atmel-docs/EDBG/protocoldocs/ch06s01s08.html +x atmel-docs/EDBG/protocoldocs/ch06s01s09.html +x atmel-docs/EDBG/protocoldocs/ch06s01s10.html +x atmel-docs/EDBG/protocoldocs/ch06s01s11.html +x atmel-docs/EDBG/protocoldocs/ch06s01s12.html +x atmel-docs/EDBG/protocoldocs/ch06s01s13.html +x atmel-docs/EDBG/protocoldocs/ch06s01s14.html +x atmel-docs/EDBG/protocoldocs/ch06s01s15.html +x atmel-docs/EDBG/protocoldocs/ch06s01s16.html +x atmel-docs/EDBG/protocoldocs/ch06s01s17.html +x atmel-docs/EDBG/protocoldocs/ch06s01s18.html +x atmel-docs/EDBG/protocoldocs/ch06s01s19.html +x atmel-docs/EDBG/protocoldocs/ch06s01s20.html +x atmel-docs/EDBG/protocoldocs/ch06s01s21.html +x atmel-docs/EDBG/protocoldocs/ch06s01s22.html +x atmel-docs/EDBG/protocoldocs/ch06s01s23.html +x atmel-docs/EDBG/protocoldocs/ch06s01s24.html +x atmel-docs/EDBG/protocoldocs/ch06s01s25.html +x atmel-docs/EDBG/protocoldocs/ch06s01s26.html +x atmel-docs/EDBG/protocoldocs/ch06s01s27.html +x atmel-docs/EDBG/protocoldocs/ch06s01s28.html +x atmel-docs/EDBG/protocoldocs/ch06s01s29.html +x atmel-docs/EDBG/protocoldocs/ch06s02.html +x atmel-docs/EDBG/protocoldocs/ch06s02s01.html +x atmel-docs/EDBG/protocoldocs/ch06s02s02.html +x atmel-docs/EDBG/protocoldocs/ch06s02s03.html +x atmel-docs/EDBG/protocoldocs/ch06s02s04.html +x atmel-docs/EDBG/protocoldocs/ch06s02s05.html +x atmel-docs/EDBG/protocoldocs/ch06s03.html +x atmel-docs/EDBG/protocoldocs/ch06s03s01.html +x atmel-docs/EDBG/protocoldocs/ch06s03s02.html +x atmel-docs/EDBG/protocoldocs/ch06s04s01.html +x atmel-docs/EDBG/protocoldocs/ch06s04s02.html +x atmel-docs/EDBG/protocoldocs/ch06s04s03.html +x atmel-docs/EDBG/protocoldocs/ch06s05.html +x atmel-docs/EDBG/protocoldocs/ch06s05s01.html +x atmel-docs/EDBG/protocoldocs/ch06s05s02.html +x atmel-docs/EDBG/protocoldocs/ch06s05s03.html +x atmel-docs/EDBG/protocoldocs/ch06s05s04.html +x atmel-docs/EDBG/protocoldocs/ch06s05s05.html +x atmel-docs/EDBG/protocoldocs/ch06s06.html +x atmel-docs/EDBG/protocoldocs/ch07s01.html +x atmel-docs/EDBG/protocoldocs/ch07s01s01.html +x atmel-docs/EDBG/protocoldocs/ch07s01s02.html +x atmel-docs/EDBG/protocoldocs/ch07s01s03.html +x atmel-docs/EDBG/protocoldocs/ch07s01s04.html +x atmel-docs/EDBG/protocoldocs/ch07s01s05.html +x atmel-docs/EDBG/protocoldocs/ch07s01s06.html +x atmel-docs/EDBG/protocoldocs/ch07s01s07.html +x atmel-docs/EDBG/protocoldocs/ch07s01s08.html +x atmel-docs/EDBG/protocoldocs/ch07s01s09.html +x atmel-docs/EDBG/protocoldocs/ch07s01s10.html +x atmel-docs/EDBG/protocoldocs/ch07s01s11.html +x atmel-docs/EDBG/protocoldocs/ch07s01s12.html +x atmel-docs/EDBG/protocoldocs/ch07s01s13.html +x atmel-docs/EDBG/protocoldocs/ch07s01s14.html +x atmel-docs/EDBG/protocoldocs/ch07s01s15.html +x atmel-docs/EDBG/protocoldocs/ch07s01s16.html +x atmel-docs/EDBG/protocoldocs/ch07s01s17.html +x atmel-docs/EDBG/protocoldocs/ch07s02.html +x atmel-docs/EDBG/protocoldocs/ch07s03.html +x atmel-docs/EDBG/protocoldocs/ch08s01.html +x atmel-docs/EDBG/protocoldocs/ch08s01s01.html +x atmel-docs/EDBG/protocoldocs/ch08s01s02.html +x atmel-docs/EDBG/protocoldocs/ch08s01s03.html +x atmel-docs/EDBG/protocoldocs/ch08s01s04.html +x atmel-docs/EDBG/protocoldocs/ch08s01s05.html +x atmel-docs/EDBG/protocoldocs/ch08s01s06.html +x atmel-docs/EDBG/protocoldocs/ch08s02.html +x atmel-docs/EDBG/protocoldocs/ch08s03.html +x atmel-docs/EDBG/protocoldocs/document.revisions.html +x atmel-docs/EDBG/protocoldocs/index.html +x atmel-docs/EDBG/protocoldocs/pr01.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.Introduction.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.avr32protocol.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.avr8protocol.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.avrispprotocol.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.avrprotocol.Overview.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.cmsis_dap.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.edbg_ctrl_protocol.html +x atmel-docs/EDBG/protocoldocs/protocoldocs.tpiprotocol.html +x atmel-docs/EDBG/protocoldocs/search/htmlFileInfoList.js +x atmel-docs/EDBG/protocoldocs/search/index-1.js +x atmel-docs/EDBG/protocoldocs/search/index-2.js +x atmel-docs/EDBG/protocoldocs/search/index-3.js +x atmel-docs/EDBG/protocoldocs/search/l10n.js +x atmel-docs/EDBG/protocoldocs/search/nwSearchFnt.js +x atmel-docs/EDBG/protocoldocs/search/stemmers/en_stemmer.js +x atmel-docs/EDBG/protocoldocs/section_avr32_memtypes.html +x atmel-docs/EDBG/protocoldocs/section_avr32_setget_params.html +x atmel-docs/EDBG/protocoldocs/section_avr8_memtypes.html +x atmel-docs/EDBG/protocoldocs/section_avr8_query_contexts.html +x atmel-docs/EDBG/protocoldocs/section_avr8_setget_params.html +x atmel-docs/EDBG/protocoldocs/section_edbg_ctrl_setget_params.html +x atmel-docs/EDBG/protocoldocs/section_edbg_query_contexts.html +x atmel-docs/EDBG/protocoldocs/section_housekeeping_start_session.html +x atmel-docs/EDBG/protocoldocs/section_i5v_3yz_rl.html +x atmel-docs/EDBG/protocoldocs/section_jdx_m11_sl.html +x atmel-docs/EDBG/protocoldocs/section_qhb_x1c_sl.html +x atmel-docs/EDBG/protocoldocs/section_serial_trace.html +x atmel-docs/EDBG/protocoldocs/section_t1f_hb1_sl.html +x atmel-docs/JTAGICE-AVR060.pdf +x atmel-docs/JTAGICEmkII-AVR067.pdf +x atmel-docs/STK500-AVR061.pdf +x atmel-docs/STK500v2-AVR068.pdf +- build.sh +GPL-2.0-or-later src/CMakeLists.txt +- src/GNUmakefile.in +GPL-2.0-or-later src/Makefile.am +GPL-2.0-or-later src/arduino.c +GPL-2.0-or-later src/arduino.h +GPL-2.0-or-later src/avr.c +GPL-2.0-or-later src/avr910.c +GPL-2.0-or-later src/avr910.h +GPL-2.0-or-later src/avrcache.c +- src/avrdude.1 +- src/avrdude.conf.in +GPL-2.0-or-later src/avrdude.h +- src/avrdude.spec.in +GPL-2.0-or-later src/avrftdi.c +GPL-2.0-or-later src/avrftdi.h +- src/avrftdi_private.h +- src/avrftdi_tpi.c +- src/avrftdi_tpi.h +GPL-3.0-only src/avrintel.c (NOTE: autogen mkavrintel.pl) +GPL-3.0-only src/avrintel.h (NOTE: see above) +GPL-2.0-or-later src/avrpart.c +GPL-2.0-or-later src/bitbang.c +GPL-2.0-or-later src/bitbang.h +- src/build-helpers/package-version +- src/build-helpers/package-version.mk +- src/bootstrap +GPL-2.0-or-later src/buspirate.c +GPL-2.0-or-later src/buspirate.h +GPL-2.0-or-later src/butterfly.c +GPL-2.0-or-later src/butterfly.h +GPL-2.0-or-later src/ch341a.c +GPL-2.0-or-later src/ch341a.h +GPL-2.0-or-later src/cmake_config.h.in +GPL-2.0-or-later src/config.c +GPL-2.0-or-later src/config.h +GPL-2.0-or-later src/config_gram.y +GPL-2.0-or-later src/configure.ac +GPL-2.0-or-later src/configure.cmake +GPL-2.0-or-later src/confwin.c +- src/crc16.c +- src/crc16.h +GPL-2.0-or-later src/developer_opts.c +GPL-2.0-or-later src/developer_opts.h +GPL-2.0-or-later src/developer_opts_private.h +GPL-2.0-or-later src/dfu.c +GPL-2.0-or-later src/dfu.h +- src/doc/.gitignore +GPL-2.0-or-later src/doc/CMakeLists.txt +GPL-2.0-or-later src/doc/Makefile.am +- src/doc/avrdude.css +- src/doc/avrdude.texi +GPL-2.0-or-later src/doc/parts.cmake +- src/doc/parts_comments.txt +GPL-2.0-or-later src/doc/programmer_types.cmake +GPL-2.0-or-later src/doc/programmers.cmake +GPL-2.0-or-later src/dryrun.c +GPL-2.0-or-later src/dryrun.h +GPL-2.0-or-later src/dryrun_private.h +GPL-2.0-or-later src/fileio.c +GPL-2.0-or-later src/flip1.c +GPL-2.0-or-later src/flip1.h +GPL-2.0-or-later src/flip2.c +GPL-2.0-or-later src/flip2.h +GPL-2.0-or-later src/freebsd_ppi.h +GPL-2.0-or-later src/ft245r.c +- src/ft245r.h +GPL-2.0-or-later src/jtag3.c +GPL-2.0-or-later src/jtag3.h +GPL-2.0-or-later src/jtag3_private.h +GPL-2.0-or-later src/jtagmkI.c +GPL-2.0-or-later src/jtagmkI.h +GPL-2.0-or-later src/jtagmkII.c +GPL-2.0-or-later src/jtagmkII.h +GPL-2.0-or-later src/jtagmkII_private.h +GPL-2.0-or-later src/jtagmkI_private.h +GPL-2.0-or-later src/leds.c +GPL-2.0-or-later src/lexer.l +GPL-2.0-or-later src/libavrdude.h +GPL-2.0-or-later src/linux_ppdev.h +GPL-2.0-or-later src/linuxgpio.c +GPL-2.0-or-later src/linuxgpio.h +GPL-2.0-or-later src/linuxspi.c +GPL-2.0-or-later src/linuxspi.h +GPL-2.0-or-later src/lists.c +GPL-2.0-or-later src/main.c +GPL-2.0-or-later src/micronucleus.c +GPL-2.0-or-later src/micronucleus.h +BSD-2-Clause AND ISC src/msvc/getopt.c +PD src/msvc/getopt.h +PD src/msvc/gettimeofday.c +GPL-2.0-or-later src/msvc/msvc_compat.h +GPL-2.0-or-later src/msvc/readline.cpp +GPL-2.0-or-later src/msvc/readline/history.h +GPL-2.0-or-later src/msvc/readline/readline.h +GPL-2.0-or-later src/msvc/sys/time.h +GPL-2.0-or-later src/msvc/unistd.h +GPL-2.0-or-later src/msvc/usleep.cpp +GPL-2.0-or-later src/par.c +GPL-2.0-or-later src/par.h +GPL-2.0-or-later src/pgm.c +GPL-2.0-or-later src/pgm_type.c +GPL-2.0-or-later src/pickit2.c +GPL-2.0-or-later src/pickit2.h +GPL-2.0-or-later src/pindefs.c +GPL-2.0-or-later src/ppi.c +GPL-2.0-or-later src/ppi.h +GPL-2.0-or-later src/ppiwin.c +GPL-2.0-or-later src/ser_avrdoper.c +GPL-2.0-or-later src/ser_posix.c +GPL-2.0-or-later src/ser_win32.c +GPL-2.0-or-later src/serbb.h +GPL-2.0-or-later src/serbb_posix.c +GPL-2.0-or-later src/serbb_win32.c +GPL-2.0-or-later src/serialadapter.c +GPL-2.0-or-later src/serialupdi.c +GPL-2.0-or-later src/serialupdi.h +GPL-2.0-or-later src/solaris_ecpp.h +GPL-2.0-or-later src/stk500.c +GPL-2.0-or-later src/stk500.h +- src/stk500_private.h (#defines only) +GPL-2.0-or-later src/stk500generic.c +GPL-2.0-or-later src/stk500generic.h +GPL-2.0-or-later src/stk500v2.c +GPL-2.0-or-later src/stk500v2.h +- src/stk500v2_private.h (#defines and struct only) +GPL-2.0-or-later src/strutil.c +GPL-2.0-or-later src/teensy.c +GPL-2.0-or-later src/teensy.h +GPL-2.0-or-later src/term.c +GPL-2.0-or-later src/tpi.h +GPL-2.0-or-later src/update.c +GPL-2.0-or-later src/updi_constants.h +GPL-2.0-or-later src/updi_link.c +GPL-2.0-or-later src/updi_link.h +GPL-2.0-or-later src/updi_nvm.c +GPL-2.0-or-later src/updi_nvm.h +GPL-2.0-or-later src/updi_nvm_v0.c +GPL-2.0-or-later src/updi_nvm_v0.h +GPL-2.0-or-later src/updi_nvm_v2.c +GPL-2.0-or-later src/updi_nvm_v2.h +GPL-2.0-or-later src/updi_nvm_v3.c +GPL-2.0-or-later src/updi_nvm_v3.h +GPL-2.0-or-later src/updi_nvm_v4.c +GPL-2.0-or-later src/updi_nvm_v4.h +GPL-2.0-or-later src/updi_nvm_v5.c +GPL-2.0-or-later src/updi_nvm_v5.h +GPL-2.0-or-later src/updi_readwrite.c +GPL-2.0-or-later src/updi_readwrite.h +GPL-2.0-or-later src/updi_state.c +GPL-2.0-or-later src/updi_state.h +GPL-2.0-or-later src/urclock.c +GPL-2.0-or-later src/urclock.h +GPL-2.0-or-later src/urclock_hash.h +GPL-2.0-or-later src/urclock_private.h +GPL-2.0-or-later src/usb_hidapi.c +GPL-2.0-or-later src/usb_libusb.c +GPL-2.0-or-later src/usbasp.c +GPL-2.0-or-later src/usbasp.h +GPL-2.0-or-later src/usbdevs.h +GPL-2.0-or-later src/usbtiny.c +GPL-2.0-or-later src/usbtiny.h +WTFPLv2 OR MIT src/whereami.c +WTFPLv2 OR MIT src/whereami.h +GPL-2.0-or-later src/windows.rc.in +GPL-2.0-or-later src/wiring.c +GPL-2.0-or-later src/wiring.h +GPL-2.0-or-later src/xbee.c +GPL-2.0-or-later src/xbee.h +- supporting-docs/avrprog.pdf +GPL-2.0-or-later tools/atdf-to-avrdude.xslt +GPL-3.0-only tools/bootloader-hash +Beerware tools/build-mingw32.sh +GPL-2.0-or-later tools/get-dw-params.xsl +GPL-2.0-or-later tools/get-hv-params.xsl +GPL-2.0-or-later tools/get-stk600-cards.xsl +GPL-2.0-or-later tools/get-stk600-devices.xsl +GPL-3.0-only tools/test-avrdude +- tools/test_files/0xff_128B.hex +- tools/test_files/0xff_256B.hex +- tools/test_files/0xff_32B.hex +- tools/test_files/0xff_512B.hex +- tools/test_files/0xff_64B.hex +- tools/test_files/0xff_768B.hex +- tools/test_files/blink-mega2560+lext-test.hex +- tools/test_files/cola-vending-machine.raw +- tools/test_files/expected-flash-m2560.raw +- tools/test_files/generate_test_hex.sh +- tools/test_files/holes_eeprom_0xff_1024B.hex +- tools/test_files/holes_eeprom_0xff_128B.hex +- tools/test_files/holes_eeprom_0xff_2048B.hex +- tools/test_files/holes_eeprom_0xff_256B.hex +- tools/test_files/holes_eeprom_0xff_4096B.hex +- tools/test_files/holes_eeprom_0xff_512B.hex +- tools/test_files/holes_eeprom_0xff_64B.hex +- tools/test_files/holes_eeprom_0xff_8192B.hex +- tools/test_files/holes_flash_0xff_10240B.hex +- tools/test_files/holes_flash_0xff_1024B.hex +- tools/test_files/holes_flash_0xff_131072B.hex +- tools/test_files/holes_flash_0xff_139264B.hex +- tools/test_files/holes_flash_0xff_16384B.hex +- tools/test_files/holes_flash_0xff_204800B.hex +- tools/test_files/holes_flash_0xff_20480B.hex +- tools/test_files/holes_flash_0xff_2048B.hex +- tools/test_files/holes_flash_0xff_262144B.hex +- tools/test_files/holes_flash_0xff_270336B.hex +- tools/test_files/holes_flash_0xff_32768B.hex +- tools/test_files/holes_flash_0xff_36864B.hex +- tools/test_files/holes_flash_0xff_401408B.hex +- tools/test_files/holes_flash_0xff_40960B.hex +- tools/test_files/holes_flash_0xff_4096B.hex +- tools/test_files/holes_flash_0xff_49152B.hex +- tools/test_files/holes_flash_0xff_512B.hex +- tools/test_files/holes_flash_0xff_524288B.hex +- tools/test_files/holes_flash_0xff_65536B.hex +- tools/test_files/holes_flash_0xff_69632B.hex +- tools/test_files/holes_flash_0xff_8192B.hex +- tools/test_files/holes_pack_my_box_1024B.hex +- tools/test_files/holes_pack_my_box_128B.hex +- tools/test_files/holes_pack_my_box_2048B.hex +- tools/test_files/holes_pack_my_box_256B.hex +- tools/test_files/holes_pack_my_box_4096B.hex +- tools/test_files/holes_pack_my_box_512B.hex +- tools/test_files/holes_pack_my_box_64B.hex +- tools/test_files/holes_pack_my_box_8192B.hex +- tools/test_files/holes_rjmp_loops_10240B.hex +- tools/test_files/holes_rjmp_loops_1024B.hex +- tools/test_files/holes_rjmp_loops_131072B.hex +- tools/test_files/holes_rjmp_loops_139264B.hex +- tools/test_files/holes_rjmp_loops_16384B.hex +- tools/test_files/holes_rjmp_loops_204800B.hex +- tools/test_files/holes_rjmp_loops_20480B.hex +- tools/test_files/holes_rjmp_loops_2048B.hex +- tools/test_files/holes_rjmp_loops_262144B.hex +- tools/test_files/holes_rjmp_loops_270336B.hex +- tools/test_files/holes_rjmp_loops_32768B.hex +- tools/test_files/holes_rjmp_loops_36864B.hex +- tools/test_files/holes_rjmp_loops_401408B.hex +- tools/test_files/holes_rjmp_loops_40960B.hex +- tools/test_files/holes_rjmp_loops_4096B.hex +- tools/test_files/holes_rjmp_loops_49152B.hex +- tools/test_files/holes_rjmp_loops_512B.hex +- tools/test_files/holes_rjmp_loops_524288B.hex +- tools/test_files/holes_rjmp_loops_65536B.hex +- tools/test_files/holes_rjmp_loops_69632B.hex +- tools/test_files/holes_rjmp_loops_8192B.hex +- tools/test_files/holes_the_five_boxing_wizards_1024B.hex +- tools/test_files/holes_the_five_boxing_wizards_128B.hex +- tools/test_files/holes_the_five_boxing_wizards_2048B.hex +- tools/test_files/holes_the_five_boxing_wizards_256B.hex +- tools/test_files/holes_the_five_boxing_wizards_4096B.hex +- tools/test_files/holes_the_five_boxing_wizards_512B.hex +- tools/test_files/holes_the_five_boxing_wizards_64B.hex +- tools/test_files/holes_the_five_boxing_wizards_8192B.hex +- tools/test_files/lorem_ipsum_1024B.srec +- tools/test_files/lorem_ipsum_128B.srec +- tools/test_files/lorem_ipsum_2048B.srec +- tools/test_files/lorem_ipsum_256B.srec +- tools/test_files/lorem_ipsum_4096B.srec +- tools/test_files/lorem_ipsum_512B.srec +- tools/test_files/lorem_ipsum_64B.srec +- tools/test_files/lorem_ipsum_8192B.srec +- tools/test_files/random_data_128B.bin +- tools/test_files/random_data_256B.bin +- tools/test_files/random_data_32B.bin +- tools/test_files/random_data_512B.bin +- tools/test_files/random_data_64B.bin +- tools/test_files/random_data_768B.bin +- tools/test_files/rjmp_loops_for_bootloaders_10240B.hex +- tools/test_files/rjmp_loops_for_bootloaders_1024B.hex +- tools/test_files/rjmp_loops_for_bootloaders_131072B.hex +- tools/test_files/rjmp_loops_for_bootloaders_139264B.hex +- tools/test_files/rjmp_loops_for_bootloaders_16384B.hex +- tools/test_files/rjmp_loops_for_bootloaders_204800B.hex +- tools/test_files/rjmp_loops_for_bootloaders_20480B.hex +- tools/test_files/rjmp_loops_for_bootloaders_2048B.hex +- tools/test_files/rjmp_loops_for_bootloaders_262144B.hex +- tools/test_files/rjmp_loops_for_bootloaders_270336B.hex +- tools/test_files/rjmp_loops_for_bootloaders_32768B.hex +- tools/test_files/rjmp_loops_for_bootloaders_36864B.hex +- tools/test_files/rjmp_loops_for_bootloaders_401408B.hex +- tools/test_files/rjmp_loops_for_bootloaders_40960B.hex +- tools/test_files/rjmp_loops_for_bootloaders_4096B.hex +- tools/test_files/rjmp_loops_for_bootloaders_49152B.hex +- tools/test_files/rjmp_loops_for_bootloaders_512B.hex +- tools/test_files/rjmp_loops_for_bootloaders_524288B.hex +- tools/test_files/rjmp_loops_for_bootloaders_65536B.hex +- tools/test_files/rjmp_loops_for_bootloaders_69632B.hex +- tools/test_files/rjmp_loops_for_bootloaders_8192B.hex +- tools/test_files/the_quick_brown_fox_1024B.hex +- tools/test_files/the_quick_brown_fox_128B.hex +- tools/test_files/the_quick_brown_fox_2048B.hex +- tools/test_files/the_quick_brown_fox_256B.hex +- tools/test_files/the_quick_brown_fox_4096B.hex +- tools/test_files/the_quick_brown_fox_512B.hex +- tools/test_files/the_quick_brown_fox_64B.hex +- tools/test_files/the_quick_brown_fox_8192B.hex +- tools/test_files/urboot_m2560_1s_x16m0_115k2_uart0_rxe0_txe1_led+b7_pr_ee_ce.hex + +Local Variables: +tab-width: 25 +End: diff --git a/filter-tarball b/filter-tarball new file mode 100755 index 0000000..3ed8949 --- /dev/null +++ b/filter-tarball @@ -0,0 +1,137 @@ +#!/usr/bin/python3 + +"""filter-tarball - filter tarball allowing only known good licensing. + +Usage: filter-tarball + +Read the original tarball 'foo-1.2.3.tar.gz' and write a new tarball +'foo-1.2.3-filtered.tar.xz', containing only the files listed +with a license in the 'file-licensing' file. + +Example: + filter-tarball avrdude-7.2.tar.gz + + Produces a filtered tarball version as 'avrdude-7.2-filtered.tar.gz'. + +""" + + +import io +import sys +import tarfile +from pathlib import Path +from pprint import pprint + + +def load_license_map(license_file_path: Path) -> dict[str, str]: + """Load license map from file.""" + license_map = {} + + with open(license_file_path) as licf: + for line in licf.readlines(): + assert line[-1] == "\n" + line = line[:-1] + if not line: + continue + if line[0] == "#": + continue + items = line.split("\t") + if len(items) == 1: + continue + assert len(items) in [2, 3] + lic_str = items[0] + fname = items[1] + # ignore remarks in items[2] + pprint(items) + if lic_str: + license_map[fname] = lic_str + print + + pprint(license_map) + print + return license_map + + +README_TEXT = """\ +About this filtered tarball +=========================== + +This tarball was created from the original upstream tarball for Fedora +by removing some files due to potential licensing issues. + +The original tarball is available somewhere on + + https://github.com/avrdudes/avrdude +""" + + +def run_filter( + orig_tarfile: tarfile.TarFile, + filtered_tarfile: tarfile.TarFile, + tarbase: str, + license_map: dict[str, str], +): + """Filter orig tarball to filtered tarball.""" + for finfo in orig_tarfile: + match finfo.type: + case tarfile.REGTYPE: + assert finfo.name.startswith(f"{tarbase}/") + rel_fname = finfo.name.replace(f"{tarbase}/", "", 1) + if rel_fname not in license_map: + print("[ERR!]", finfo.name, "not in license map") + sys.exit(1) + match license_map[rel_fname]: + case "x": + print("[EXCL]", finfo.name) + case _: + filtered_tarfile.addfile( + finfo, orig_tarfile.extractfile(finfo) + ) + print("[COPY]", finfo.name, license_map[rel_fname]) + case tarfile.DIRTYPE: + if finfo.name.startswith(f"{tarbase}/atmel-docs"): + print("[SKIP]", finfo.name) + else: + print(" [DIR]", finfo.name) + filtered_tarfile.addfile(finfo) + case _: + raise ValueError(f"Unhandled TarInfo type: {finfo}") + + +def add_readme_file(filtered_tarfile: tarfile.TarFile, tarbase: str): + """Add README file to tarball describing filtered tarball.""" + readme_fname = f"{tarbase}/README.filtered-tarball" + print(" [ADD]", readme_fname, "(remarks on filtered tarball)") + readme_info = tarfile.TarInfo(readme_fname) + readme_bytes = io.BytesIO(README_TEXT.encode("utf-8")) + filtered_tarfile.addfile(readme_info, readme_bytes) + + +def main(argv=None): + """Run main program.""" + if argv is None: + argv = sys.argv[1:] + assert len(argv) == 1 + orig_tarball = Path(argv[0]) + assert orig_tarball.is_file() + assert orig_tarball.match("*.tar.gz") + tarbase = orig_tarball.name[: -len(".tar.gz")] + filtered_tarball = orig_tarball.parent / f"{tarbase}-filtered.tar.xz" + assert not filtered_tarball.exists() + + license_map = load_license_map(Path(__file__).parent / "file-licensing") + + try: + with tarfile.open(orig_tarball) as orig_tarfile, tarfile.open( + filtered_tarball, "w:xz" + ) as filtered_tarfile: + run_filter(orig_tarfile, filtered_tarfile, tarbase, license_map) + add_readme_file(filtered_tarfile, tarbase) + except BaseException as err: + print("Removing incomplete tarball file:", filtered_tarball) + filtered_tarball.unlink(missing_ok=True) + raise err + + +if __name__ == "__main__": + main() diff --git a/sources b/sources index f92914d..28a200b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (avrdude-8.0.tar.gz) = c6fa365924aa8ad58a1b2f85c36ecc498c9b049b9bce455994752b8b13c06aa31ac6c8420eea4be307f42e64284c87ec08f75d6eaec640de7dc097c523d02dac +SHA512 (avrdude-7.3-filtered.tar.xz) = b75cb77ea05b82441794c6e9c0f33e921db580b6993c578e1e27c9191bb0adea7967b004c48600e40283f38d84eb3a35447ed3a13b31de2970091ee3844f9cdc