diff --git a/Makefile.am b/Makefile.am
index 4d05d37573bfdf102c7b85dd196006ae78c23b8c..2fd5e323dec6cee47bbbf25fe7dfc2aabd6be054 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -13,6 +13,14 @@ SUBDIRS = src doc
 
 EXTRA_DIST = Doxyfile
 
+docs: pdf html doxygen
+
+doxygen::
+	doxygen Doxyfile 2>&1 | perl tools/logger.pl > doxygen.log
+
+doxygen-clean:
+	rm -f -r doxygen doxygen.log
+
 MAINTAINERCLEANFILES = \
 	configure \
 	Makefile.in \
diff --git a/tools/logger.pl b/tools/logger.pl
new file mode 100644
index 0000000000000000000000000000000000000000..1ec5441ad5c964678f547ce790de0f14a47c7f83
--- /dev/null
+++ b/tools/logger.pl
@@ -0,0 +1,34 @@
+#!/usr/bin/perl
+# logger.pl: masks long meaningless output with pretty lines of dots
+#  Details: 1) reads lines from STDIN and echos them on STDOUT,
+#           2) print a '.' to STDERR every $N lines.
+#           3) print a newline after a sequence of $C dots
+
+use strict;
+use warnings;
+
+# make sure all output gets displayed immediately
+$| = 1;
+
+# TODO: add -n and -c options w/ zero checks)
+# line and column limits
+my $N = 10;
+my $C = 72;
+
+# current line and column counters
+my $n = 0;
+my $c = 0;
+
+# read all lines from STDIN
+while (<STDIN>)
+{
+	# echo line to output
+	print STDOUT $_;
+	# only display progress every Nth step
+	next unless ++$n % $N;
+	print STDERR ".";
+	# wrap at column C to provide fixed-width rows of dots
+	print STDERR "\n" unless ++$c % $C;
+}
+
+print STDERR "\n"