diff --git a/avrdude/ChangeLog b/avrdude/ChangeLog
index 6beeae5e..3938d87f 100644
--- a/avrdude/ChangeLog
+++ b/avrdude/ChangeLog
@@ -1,3 +1,10 @@
+2012-02-03  Rene Liebscher <R.Liebscher@gmx.de>
+
+	patch #7687: Autogenerating programmers and parts lists for docs
+	(generating the programmers lists)
+	* doc/avrdude.texi: Add include of generated table of programmers
+	* doc/Makefile.am: Add generating of table of programmers in programmers.texi
+
 2012-02-03  Rene Liebscher <R.Liebscher@gmx.de>
 
 	bug #34768 Proposition: Change the name of the AVR32 devices
diff --git a/avrdude/doc/Makefile.am b/avrdude/doc/Makefile.am
index 8481b213..dc25c4a2 100644
--- a/avrdude/doc/Makefile.am
+++ b/avrdude/doc/Makefile.am
@@ -22,6 +22,7 @@
 #
 
 CLEANFILES = \
+	programmers.texi \
 	parts.texi \
 	programmer_types.texi \
 	version.texi \
@@ -33,7 +34,7 @@ all-local: info html ps pdf
 
 html: avrdude-html/avrdude.html
 
-avrdude-html/avrdude.html: $(srcdir)/$(info_TEXINFOS) $(srcdir)/parts.texi $(srcdir)/programmer_types.texi
+avrdude-html/avrdude.html: $(srcdir)/$(info_TEXINFOS) $(srcdir)/programmers.texi $(srcdir)/parts.texi $(srcdir)/programmer_types.texi
 	texi2html -split_node $(srcdir)/$(info_TEXINFOS)
 	if [ -e ./avrdude.html -o -e ./avrdude_1.html ]; then \
 	 mkdir -p avrdude-html ; \
@@ -42,21 +43,26 @@ avrdude-html/avrdude.html: $(srcdir)/$(info_TEXINFOS) $(srcdir)/parts.texi $(src
 	 mv -f avrdude avrdude-html; \
 	fi;
 
-avrdude.info: parts.texi programmer_types.texi
-avrdude.dvi: parts.texi programmer_types.texi
-avrdude.pdf: parts.texi programmer_types.texi
+avrdude.info: programmers.texi parts.texi programmer_types.texi
+avrdude.dvi: programmers.texi parts.texi programmer_types.texi
+avrdude.pdf: programmers.texi parts.texi programmer_types.texi
 
 # if it does not exist make this first
 ../avrdude$(EXEEXT):
 	$(MAKE) -C .. avrdude$(EXEEXT)
 
+programmers.texi: ../avrdude$(EXEEXT) ../avrdude.conf Makefile
+	../avrdude$(EXEEXT) -C ../avrdude.conf -c \? 2>&1 \
+	| $(AWK) '$$2 ~ /^=$$/ {printf("@item @code{%s} @tab %s\n",$$1,gensub("[^=]+=[ \t]*","",1))}' \
+	| sed "s# *,\? *<\?\(http://[^ \t>]*\)>\?#,@*\n@url{\1}#g" \
+	>programmers.texi
+
 programmer_types.texi: ../avrdude$(EXEEXT) ../avrdude.conf Makefile
 	../avrdude$(EXEEXT) -C ../avrdude.conf -c \?type 2>&1 \
 	| $(AWK) '$$2 ~ /^=$$/ {printf("@item @code{%s} @tab %s\n",$$1,gensub("[^=]+=[ \t]*","",1))}' \
 	| sed "s#<\?\(http://[^ \t,>]*\)>\?#@url{\1}#g" \
 	>programmer_types.texi
 
-
 parts.texi: ../avrdude$(EXEEXT) ../avrdude.conf parts_comments.txt Makefile
 	../avrdude$(EXEEXT) -C ../avrdude.conf -p \? 2>&1 \
 	| $(AWK) '$$2 ~ /^=$$/ {printf("@item @code{%s} @tab %s\n",$$1,$$3)}' \
diff --git a/avrdude/doc/avrdude.texi b/avrdude/doc/avrdude.texi
index 3bfa9edb..6978b079 100644
--- a/avrdude/doc/avrdude.texi
+++ b/avrdude/doc/avrdude.texi
@@ -356,149 +356,7 @@ and change the pin definitions to match that of the unknown programmer.
 Currently, the following programmer ids are understood and supported:
 
 @multitable @columnfractions .2 .6
-@item @code{2232HIO}     @tab
-FT2232H based generic programmer
-@item @code{89isp}       @tab
-Atmel at89isp cable
-@item @code{abcmini}     @tab
-ABCmini Board, aka Dick Smith HOTCHIP
-@item @code{alf}         @tab
-Nightshade ALF-PgmAVR,@*
-@url{http://nightshade.homeip.net/}
-@item @code{arduino}
-Arduino board, protocol similar to STK500 1.x
-@item @code{atisp}       @tab
-AT-ISP V1.1 programming cable for AVR-SDK1 from,@*
-@url{http://micro-research.co.th/}
-@item @code{avr109}      @tab
-Atmel AppNote AVR109 Boot Loader
-@item @code{avr910}      @tab
-Atmel Low Cost Serial Programmer
-@item @code{avr911}      @tab
-Atmel AppNote AVR911 AVROSP (an alias for avr109)
-@item @code{avrftdi}     @tab
-FT2232D based generic programmer
-@item @code{avrisp}      @tab
-Atmel AVR ISP (an alias for stk500)
-@item @code{avrisp2}     @tab
-Atmel AVR ISP mkII in ISP mode, in PDI mode for ATxmega devices, or
-in TPI mode for ATtiny4/5/9/10
-@item @code{avrispmkII}  @tab
-Atmel AVR ISP mkII (alias for stk500v2)
-@item @code{avrispv2}    @tab
-Atmel AVR ISP, running a version 2.x firmware (an alias for stk500v2)
-@item @code{bascom}      @tab
-Bascom SAMPLE programming cable
-@item @code{blaster}     @tab
-Altera ByteBlaster
-@item @code{bsd}         @tab
-Brian Dean's Programmer,@*
-@url{http://www.bsdhome.com/avrdude/}
-@item @code{buspirate}   @tab
-The Bus Pirate
-@item @code{butterfly}   @tab
-Atmel Butterfly Development Board
-@item @code{c2n232i}     @tab
-C2N232I, reset=dtr sck=!rts mosi=!txd miso=!cts,@*
-@url{http://www.ktverkko.fi/~msmakela/8bit/c2n232/hardware/index.en.html}
-@item @code{dapa}        @tab
-Direct AVR Parallel Access cable
-@item @code{dasa}        @tab
-serial port banging, reset=rts sck=dtr mosi=txd miso=cts
-@item @code{dasa3}       @tab
-serial port banging, reset=!dtr sck=rts mosi=txd miso=cts
-@item @code{dragon_dw}   @tab
-AVR Dragon in debugWire mode
-@item @code{dragon_hvsp} @tab
-AVR Dragon in high-voltage serial programming mode
-@item @code{dragon_isp}  @tab
-AVR Dragon in ISP mode
-@item @code{dragon_jtag} @tab
-AVR Dragon in JTAG mode
-@item @code{dragon_pdi} @tab
-AVR Dragon in PDI mode
-@item @code{dragon_pp}   @tab
-AVR Dragon in (high-voltage) parallel programming mode
-@item @code{dt006}       @tab
-Dontronics DT006
-@item @code{ere-isp-avr} @tab
-ERE ISP-AVR,@*
-@url{http://www.ere.co.th/download/sch050713.pdf}
-@item @code{frank-stk200}@tab
-Frank's STK200 clone,@*
-@url{http://electropol.free.fr/spip/spip.php?article15}
-@item @code{futurlec}    @tab
-Futurlec.com programming cable
-@item @code{jtag1}       @tab
-Atmel JTAG ICE mkI, running at 115200 Bd
-@item @code{jtag1slow}   @tab
-Atmel JTAG ICE mkI, running at 19200 Bd
-@item @code{jtag2}       @tab
-Atmel JTAG ICE mkII, running at 115200 Bd
-@item @code{jtag2avr32}  @tab
-Atmel JTAG ICE mkII in AVR32 mode.
-@item @code{jtag2dw}     @tab
-Atmel JTAG ICE mkII in debugWire mode.
-@item @code{jtag2fast}   @tab
-Atmel JTAG ICE mkII, running at 115200 Bd
-@item @code{jtag2isp}    @tab
-Atmel JTAG ICE mkII in ISP mode.
-@item @code{jtag2pdi}    @tab
-Atmel JTAG ICE mkII in PDI mode.
-@item @code{jtag2slow}   @tab
-Atmel JTAG ICE mkII (default speed 19200 Bd)
-@item @code{jtagmkI}     @tab
-Atmel JTAG ICE mkI, running at 115200 Bd
-@item @code{jtagmkII}    @tab
-Atmel JTAG ICE mkII (default speed 19200 Bd)
-@item @code{jtagmkII_avr32} @tab
-Atmel JTAG ICE mkII in AVR32 mode.
-@item @code{mib510}      @tab
-Crossbow MIB510 programming board
-@item @code{pavr}        @tab
-Jason Kyle's pAVR Serial Programmer
-@item @code{picoweb}     @tab
-Picoweb Programming Cable,@*
-@url{http://www.picoweb.net/}
-@item @code{pony-stk200} @tab
-Pony Prog STK200
-@item @code{ponyser}     @tab
-design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts
-@item @code{siprog}      @tab
-Lancos SI-Prog,@*
-@url{http://www.lancos.com/siprogsch.html}
-@item @code{sp12}        @tab
-Steve Bolt's Programmer
-@item @code{stk200}      @tab
-STK200
-@item @code{stk500}      @tab
-Atmel STK500, probing for either version 1.x or 2.x firmware
-@item @code{stk500hvsp}  @tab
-Atmel STK500 in high-voltage serial programming mode(version 2.x firmware only)
-@item @code{stk500pp}    @tab
-Atmel STK500 in parallel programming mode (version 2.xfirmware only)
-@item @code{stk500v1}    @tab
-Atmel STK500, running a version 1.x firmware
-@item @code{stk500v2}    @tab
-Atmel STK500, running a version 2.x firmware
-@item @code{stk600}      @tab
-Atmel STK600 in ISP mode, in PDI mode for ATxmega devices, or
-in TPI mode for ATtiny4/5/9/10
-@item @code{stk600hvsp}  @tab
-Atmel STK600 in high-voltage serial programming mode
-@item @code{stk600pp}    @tab
-Atmel STK600 in parallel programming mode
-@item @code{usbasp}      @tab
-USBasp,@*
-@url{http://www.fischl.de/usbasp/}
-@item @code{usbtiny}     @tab
-USBtiny simple USB programmer,@*
-@url{http://www.ladyada.net/make/usbtinyisp/}
-@item @code{wiring}      @tab
-Wiring board, utilizing STK500 V2.x protocol,@*
-@url{http://wiring.org.co/}
-@item @code{xil}         @tab
-Xilinx JTAG cable
+@include programmers.texi
 @end multitable