mkreadmes is a tool I wrote in C to speed up building the README.html files for the FreeBSD Ports Collection. The latest version (1.3) is now available in ports as ports-mgmt/mkreadmes.
The program builds the README.html files orders of magnitude times faster than the standard "make readmes", typically clocking in at 30 seconds or less for a rebuild of the files for the entire ports tree. A number of command line options are provided to make this as flexible and useful a tool as possible.
Note to ports committers:
Part of mkreadmes' search optimization strategy is based on the assumption that the SUBDIR entries in a category's Makefile will always be properly sorted. When building for a category, each successful port search within that category will advance next_index to point to the next line in the index file, from which the next search within that category will begin. One unexpected happy side benefit of this approach is that mkreadmes effectively turns out to be a handy tool for detecting missorted Makefile entries!
Example (this really happened just recently; I did a send-pr afterwards re: the missorted item):
Let's say that lang/Makefile contains the following series of entries:
SUBDIR += perl5.8 SUBDIR += perl5.10 SUBDIR += perl5.12 SUBDIR += perl5.14
(the perl5.8 item is missorted, and should come after the other three entries)
The first search, for perl5.8, will succeed, incrementing next_index to point to the next index entry after perl5.8's, which, unfortunately, will not be the entry for perl5.10, but for the port that should have been after perl5.8 in the Makefile (which at the time of this writing is lang/petite-chez). So then, none of the other perl5* ports will be found in the index, as their entries actually precede perl5.8's and have already been passed over by the next_index pointer.
A case could be made for not relying on the sorting of a category's Makefile, but the performance benefit from using this method is substantial, and no real harm results if the assumption turns out to be wrong. Besides which, the Makefiles should be properly sorted, so ports committers may wish to consider using mkreadmes (after running "make index" first, of course) to verify the sorting of a category's Makefile after adding new items.
Please feel free to ask questions, make comments/suggestions.
Conrad J. Sabatier