[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
www/prep/gnumaint mkspotlight gm-util.pl gm mas...
From: |
Ineiev |
Subject: |
www/prep/gnumaint mkspotlight gm-util.pl gm mas... |
Date: |
Sat, 11 May 2019 06:44:56 -0400 (EDT) |
CVSROOT: /web/www
Module name: www
Changes by: Ineiev <ineiev> 19/05/11 06:44:54
Added files:
prep/gnumaint : mkspotlight gm-util.pl gm
massmail-1303-cveauto.txt gnumaint.README
gm-read.pl recentrel.txt Makefile
temail-4post.txt spotlight.mk temail-2dub.txt
testgood1.msg testaddrcomment.msg
temail-0query.txt gm-generate.pl
howto-spotlight.txt .cvsignore nonpackages.txt
testaddrangle.msg testjunk1.msg
howto-decommission.txt maintfileupgrade
massmail-1201-copyright.txt testaddr+real.msg
sendmaintmail massmail-0705-active.txt
gm-check.pl gnumaint contact-activity.txt
massmail-1405-stale.txt mailtoname gm-email.pl
gm-list.pl spotlight.tmpl
massmail-1305-stale.txt oldpackages.txt
tpost-need.html doc-categories.txt
massmail-1503-stale.txt howto-commission.txt
gnufsd testaddrcase.msg README
prep/gnumaint/fsd: Makefile .cvsignore gnufsd-psql
fsd-schema.texi
prep/gnumaint/rec: pkgblurbs.rec nonpackages.rec oldpackages.rec
gnupackages2txt.awk pkgblurbs2txt.awk
gnupackages.rec package-descriptor.rec
prep/gnumaint/spotlight: spotlight.m4 gnubytime.pl
prep/gnumaint/msg.0802: Makefile .cvsignore send.0802
msg0802.txt
Log message:
Copy from womb/gnumaint.
CVSWeb URLs:
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/mkspotlight?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gm-util.pl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gm?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/massmail-1303-cveauto.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gnumaint.README?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gm-read.pl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/recentrel.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/Makefile?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/temail-4post.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/spotlight.mk?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/temail-2dub.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/testgood1.msg?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/testaddrcomment.msg?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/temail-0query.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gm-generate.pl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/howto-spotlight.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/.cvsignore?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/nonpackages.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/testaddrangle.msg?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/testjunk1.msg?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/howto-decommission.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/maintfileupgrade?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/massmail-1201-copyright.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/testaddr%43real.msg?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/sendmaintmail?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/massmail-0705-active.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gm-check.pl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gnumaint?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/contact-activity.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/massmail-1405-stale.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/mailtoname?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gm-email.pl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gm-list.pl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/spotlight.tmpl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/massmail-1305-stale.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/oldpackages.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/tpost-need.html?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/doc-categories.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/massmail-1503-stale.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/howto-commission.txt?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/gnufsd?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/testaddrcase.msg?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/README?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/fsd/Makefile?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/fsd/.cvsignore?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/fsd/gnufsd-psql?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/fsd/fsd-schema.texi?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/rec/pkgblurbs.rec?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/rec/nonpackages.rec?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/rec/oldpackages.rec?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/rec/gnupackages2txt.awk?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/rec/pkgblurbs2txt.awk?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/rec/gnupackages.rec?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/rec/package-descriptor.rec?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/spotlight/spotlight.m4?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/spotlight/gnubytime.pl?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/msg.0802/Makefile?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/msg.0802/.cvsignore?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/msg.0802/send.0802?cvsroot=www&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/prep/gnumaint/msg.0802/msg0802.txt?cvsroot=www&rev=1.1
Patches:
Index: mkspotlight
===================================================================
RCS file: mkspotlight
diff -N mkspotlight
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ mkspotlight 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,168 @@
+#!/bin/bash
+# $Id: mkspotlight,v 1.1 2019/05/11 10:44:52 ineiev Exp $
+# Spotlight generation script
+#
+# Copyright (C) 2018 Mike Gerwitz
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# This script just automates parts of what Brandon Invergo conveyed to me
+# (Mike Gerwitz) via e-mail. It is glue code around the existing
+# process. It may or may not evolve over time.
+##
+
+set -euo pipefail
+
+declare -r makefile=spotlight.mk
+declare -r tmp=spotlight-tmp
+declare -r releases_out="$tmp/releases-this-month.gnu"
+
+declare -r editor="${EDITOR:-editor}"
+
+cd "$(dirname $0)"
+
+
+fail()
+{
+ local -r msg="${1?Missing failure message}"
+
+ echo "error: $msg" >&2
+ exit 1
+}
+
+
+cleanup()
+{
+ read -p 'Remove old spotlight (y/n)? '
+ test "$REPLY" == y || return 0
+
+ echo "cleaning old $tmp..."
+ rm -fv "$tmp"/*
+}
+
+
+package-exists()
+{
+ local -r pkg=${1?Missing package name}
+
+ test "$( recsel -ce "package = '$pkg'" rec/gnupackages.rec )" -gt 0
+}
+
+
+validate-pkgs()
+{
+ local line pkg
+
+ while read line; do
+ pkg=${line%%-[0-9-]*}
+
+ if ! package-exists "$pkg"; then
+ echo "# $line ($pkg not found in gnupackages.rec)"
+ continue
+ fi
+
+ echo "$line"
+ done
+}
+
+
+make-release-out()
+{
+ local -r last_date="${1?Missing last spotlight date}"
+
+ make -f "$makefile" END_DATE="$last_date"
+ test -f "$releases_out" || fail "didn't generate $releases_out!"
+
+ # comment out alpha and beta releases (which shouldn't be on ftp.gnu.org,
+ # but sometimes they are) so that they can be manually verified
+ sed -i 's/^.*\(-alpha\|-beta\)$/#&/' "$releases_out"
+
+ # prepend some useful text (from Brandon's original email); hopefully a
+ # lot of this will be automated as time goes on
+ cat - <( validate-pkgs < "$releases_out" ) > "$releases_out.tmp" <<EOF
+# From Brandon:
+# > Edit releases-this-month.gnu. Normally this entails removing
+# > multiple releases of the same package (just keep the latest one),
+# > removing language packs (Icecat), dictionaries (aspell), patchsets
+# > (gnuhealth), and adding releases that weren't uploaded to the FTP
+# > server. For that latter case, I don't methodically search for all
+# > packages; I just cross-check with the info-gnu release announcements
+# > and I double-check for the big ones: gnupg (normally announced on
+# > info-gnu) & gnutls (check the website).
+#
+# (All comments and empty lines will be removed.)
+
+EOF
+
+ # manually edit file
+ "$editor" "$releases_out.tmp"
+
+ # move into place without comments and remove temporary
+ # (*-ready is the ultimate destination)
+ sed '/^#/d;/^$/d' "$releases_out.tmp" > "$releases_out-ready"
+ rm "$releases_out.tmp" "$releases_out"
+}
+
+
+make-markdown()
+{
+ make -f "$makefile" markdown
+
+ # locate the markdown file
+ local -r md=spotlight/spotlight-"$( date +%Y-%m-%d )".md
+
+ test -f "$md" || fail 'error: missing spotlight/*.md output'
+
+ # some common replacements, to be added to over time (maybe extract into
+ # its own file for maintenance)
+ sed -i 's#software/tack#software/ncurses#;
+ s#software/gnuhealth-client#software/health#' \
+ "$md"
+
+ # manually edit final file
+ "$editor" "$md"
+
+ echo "send to address@hidden: $md"
+}
+
+
+usage()
+{
+ cat <<EOF
+Usage: $0 LAST_SPOTLIGHT_DATE
+
+Guide generation of GNU Spotlight since last date.
+LAST_SPOTLIGHT_DATE must be of the format YYYYMMDD.
+EOF
+
+ exit 64 # EX_USAGE
+}
+
+
+main()
+{
+ local -r last_date="${1?Missing end date}"
+
+ # sanity check, mostly, since we're about to issue `rm'
+ test -f "$makefile" || fail "missing $makefile"
+
+ cleanup
+ make-release-out "$last_date"
+ make-markdown
+}
+
+
+test $# -gt 0 || usage
+
+main "$@"
Index: gm-util.pl
===================================================================
RCS file: gm-util.pl
diff -N gm-util.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gm-util.pl 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,143 @@
+# $Id: gm-util.pl,v 1.1 2019/05/11 10:44:52 ineiev Exp $
+# Utilities for the gm script.
+#
+# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+
+
+# Return the email addresses for the maintainers of package PKGREF (a
+# reference to a list of maintainer hashes). Two strings are returned:
+# the named maintainers and any generic maintainer. Either may be
+# empty/undef.
+#
+sub maintainer_email_addrs {
+ my ($pkgref) = @_;
+
+ my @entries = ();
+ my $generic_entry = "";
+ my @uploaders = ();
+
+ for my $m (@{$pkgref}) {
+ my $name = $m->{"name"};
+ my $entry = $name;
+
+ $entry .= " " if $entry;
+
+ if ($m->{"best_email"}) {
+ $entry .= "<$m->{best_email}>";
+ } else {
+ warn "no email for $name?!";
+ }
+
+ if ($m->{"is_generic"} && $name ne "unmaintained") {
+ # Assume that if a name starts with a lowercase letter, it is
+ # generic. If we ever have a maintainer whose real name starts
+ # with a lowercase letter, we can invent a field to distinguish.
+ warn "two generic maintainers?! -- $entry and $generic_entry"
+ if $generic_entry;
+ $generic_entry = $entry;
+ } elsif ($m->{"is_uploader"}){
+ push (@uploaders, $entry);
+ } else {
+ push (@entries, $entry);
+ }
+ }
+
+ # Make the individuals into a comma-separated list.
+ my $entries = join (", ", @entries);
+ my $uploaders = join (", ", @uploaders);
+
+ return ($entries,$generic_entry,$uploaders);
+}
+
+
+
+# Since we need this in more than one place. These are listed in the
+# maintainers file, but shouldn't be included in the "allpackages"
+# lists, etc., since their status is murky.
+#
+sub skip_pkg_p {
+ my ($pkgname) = @_;
+ return $pkgname =~ / / # gimp www pages, flex manual
+ || $pkgname =~ /^gg-/ # groups
+ || $pkgname =~ /^(cfengine)$/ # not really ours
+ || $pkgname =~ /\.nongnu/; # specialness, see maintainers
+}
+
+
+# avoid repeating the field widths.
+#
+sub gnupkgs_msg {
+ my ($msg,%p) = @_;
+ warn "gnupkgs_msg: oops, no lineno/package elements in %p hash"
+ unless $p{"lineno"} && $p{"package"};
+ return sprintf ("$GNUPACKAGES_FILE:%4d:%-16s $msg",
+ $p{"lineno"}, $p{"package"});
+}
+
+
+# our package names don't always suit XHTML in its wisdom.
+#
+sub xhtml_id {
+ my ($pkgname) = @_;
+ (my $xhtml_id = $pkgname) =~ s/[^-_0-9a-z]//g; # identifier chars
+ $xhtml_id = "pkg_$xhtml_id"
+ if $xhtml_id !~ /^[a-z]/; # start w/letter
+ return $xhtml_id;
+}
+
+
+# return auto-generation notice to include in output files.
+#
+sub generated_by_us {
+ chomp (my $date = `date`);
+ (my $us = $0) =~ s,^\./,,;
+ return "generated by womb/gnumaint/$us $date";
+}
+
+
+# print arg on stderr.
+sub debug { warn "$_[0]\n" if $DEBUG; }
+
+
+# Log LABEL followed by hash elements, all on one line.
+#
+sub debug_hash {
+ return unless $DEBUG;
+ &warn_hash (@_);
+}
+
+sub warn_hash {
+ my ($label) = shift;
+ my (%hash) = (ref $_[0] && $_[0] =~ /.*HASH.*/) ? %{$_[0]} : @_;
+
+ my $str = "$label: {";
+ my @items = ();
+ for my $key (sort keys %hash) {
+ my $val = $hash{$key};
+ $key =~ s/\n/\\n/g;
+ $val =~ s/\n/\\n/g;
+ push (@items, "$key:$val");
+ }
+ $str .= join (",", @items);
+ $str .= "}";
+
+ warn "$str\n";
+}
+
+1;
Index: gm
===================================================================
RCS file: gm
diff -N gm
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gm 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,142 @@
+#!/usr/bin/env perl
+# $Id: gm,v 1.1 2019/05/11 10:44:52 ineiev Exp $
+# GNU maintainer-related operations.
+#
+# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+
+$DEBUG = 0;
+my $ver = '$Id: gm,v 1.1 2019/05/11 10:44:52 ineiev Exp $';
+
+# In this particular case, using require seemed better than setting up
+# modules. It's certainly simpler.
+require "gm-check.pl";
+require "gm-email.pl";
+require "gm-generate.pl";
+require "gm-list.pl";
+require "gm-read.pl";
+require "gm-util.pl";
+
+# Recommended way to deal with the foreign data files: have a cron job
+# that copies them locally and nightly; put symlinks in this directory
+# to the cron-updated files.
+
+ # fp:~karl/src/gnumaint/activity-report.txt
+$ACTIVITY_FILE = "activity-report.txt";
+ # fp:/gd/gnuorg/copyright.list
+$COPYRIGHT_LIST_FILE = "copyright.list";
+ # maintained here:
+$DOC_CATEGORIES_FILE = "doc-categories.txt";
+ # maintained here:
+$GNUPACKAGES_FILE = "rec/gnupackages.rec";
+ # http://ftp.gnu.org/gnu/texinfo/htmlxref.cnf
+$HTMLXREF_FILE = "htmlxref.cnf";
+ # fp:/gd/gnuorg/maintainers
+$MAINTAINERS_FILE = "maintainers";
+ # maintained here:
+$OLDPACKAGES_FILE = "oldpackages.txt";
+ # maintained here:
+$PKGBLURBS_FILE = "pkgblurbs.txt";
+
+# The routines using these additional files are not yet fully implemented.
+ # rsync://ftp.gnu.org/gnu/
+$FTPLISTING_FILE = "ftplisting.txt";
+ # fp:/srv/data/ftp-upload/maintainers_emails.txt
+$FTPUPLOAD_EMAIL_FILE = "ftp-upload-email.txt";
+ # (undone) list received from address@hidden:
+$COPYRIGHT_PAPERS_FILE = "copyright-papers.txt";
+ # (undone) http://savannah.gnu.org/cooperation/groups.tsv
+$SAVANNAH_FILE = "groups.tsv";
+ # maintained here (stale):
+$RECENTREL_FILE = "recentrel.txt";
+
+# (Not all of the above are fully implemented yet.)
+
+exit (&main ());
+
+sub main {
+ my $cmd = $ARGV[0];
+ my $arg1 = $ARGV[1];
+ my $arg2 = $ARGV[2];
+
+ if ($cmd =~ /^-?-?help *$/) {
+ print <<END_USAGE;
+Usage: $0 CMD ARG...
+
+Perform various GNU maintainer/package operations.
+Here are the possibilities:
+
+check fsfcopyright verify consistency: gnupackages/copyright.list
+check ftpupload verify consistency: maintainers/ftp-upload
+check maintainers verify consistency: gnupackages/maintainers
+
+generate email bypackage make messages to send out; add -h for details.
+generate maintainers bypackage make /gd/gnuorg/maintainers.bypkg file
+ (run from address@hidden cron)
+generate blurbs html make www.gnu.org/server/home-pkgblurbs.html
+generate logos html make www.gnu.org/graphics/allgnupkgs.html
+generate manual html make www.gnu.org/manual/allgnupkgs.html
+generate packages html make www.gnu.org/software/allgnupkgs.html
+
+list copyrightfsf FSF-copyrighted packages
+list copyrightfsfnot non-FSF-copyrighted packages
+
+list maintainers nophysical maintainers without phone/address info
+
+list packages activity packages sorted by activity-status
+list packages gplv3 packages with GPLv3 update pending
+list packages unanswered packages we've had no contact about
+
+The idea is that "check" actions do consistency checking,
+"generate" actions write output that's intended to be used directly, and
+"list" actions are for information and further consumption.
+
+$ver
+Correspondence to address@hidden
+END_USAGE
+ return 0;
+ }
+
+ elsif ($cmd =~ /^-?-?version *$/) {
+ print "$ver\n";
+ return 0;
+ }
+
+# Features started but not finished:
+#check activityfile verify activity-report.txt
+#list copyrightpapers copyright.list vs. paperwork
+#check ftplisting verify consistency: ftplisting.txt
+#check savannah verify consistency: gnupackages/savannah
+
+ # construct the function name from the arguments, and eval it.
+ my $fn = "${cmd}_${arg1}_${arg2}";
+ my @lines = eval "&$fn ()";
+
+ # This gives an ugly message if the eval failed, but this program is
+ # not for public consumption, so that's ok.
+ die "$0 failed: address@hidden" if $@;
+
+ # Print the resulting lines. The idea is that none of the subroutines
+ # print normal output, but only return a list of the lines to print.
+ # (The subroutines do print warnings/errors, though.)
+ print map { "$_\n" } @lines if @lines;
+
+ return 0;
+}
+
+# All the code is in the gm-*.pl files.
Index: massmail-1303-cveauto.txt
===================================================================
RCS file: massmail-1303-cveauto.txt
diff -N massmail-1303-cveauto.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ massmail-1303-cveauto.txt 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,39 @@
+From: address@hidden (GNU Project)
+To: %PACKAGE_MAINTAINERS
+Subject: %PACKAGE_NAME and Automake-related vulnerabilities
+Precedence: bulk
+
+Greetings,
+
+I'm sending you this message on behalf of GNU because as far as we know,
+you are the maintainer(s) of %PACKAGE_NAME. (If you're not maintaining
+it, please reply to let me know.)
+
+Two vulnerabilities related to Automake-generated Makefiles and the dist
+and distcheck target were discovered some time ago. It seemed to me
+that the latest release of %PACKAGE_NAME on ftp.gnu.org was still
+vulnerable to one or both. They are:
+ http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-4029
+ http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-3386
+
+(If you did make a later release that fixes these issues, don't worry
+about this email, and sorry for the noise. I could not determine
+the status with absolute certainty.)
+
+The issues were fixed in automake releases 1.12.2 and 1.11.6. So the
+simplest way to mitigate them is to regenerate the Makefiles using an
+automake that is at least that new and re-release. If you don't want to
+do that, you can also hack the Makefiles to fix the problem by hand:
+ http://lists.gnu.org/archive/html/savannah-hackers/2012-12/msg00049.html
+
+Although these vulnerabilities do not have a high probability of being
+exploited, of course we want GNU software to be safe. So it would be
+good to make a new release, even if it's just to fix these bugs. Of
+course other fixes or features are all to the good.
+
+As usual, aside from this issue, if you have any news or questions
+regarding the package, please let me know at address@hidden
+Thanks for contributing to GNU, and happy hacking.
+
+Karl Berry
+Assistant Chief GNUisance
Index: gnumaint.README
===================================================================
RCS file: gnumaint.README
diff -N gnumaint.README
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnumaint.README 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,42 @@
+Copyright 2007 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+
+gnumaint is a manager for the /gd/gnuorg/maintainers file, the
+official list of GNU packages and maintainers.
+It was written by Jose Marchesi in 2006-07.
+
+You can get listings (see ./gnumaint help list),
+send email to maintainers (./gnumaint help sendemail),
+and receive answers from the maintainers (./gnumaint help recemail).
+The ./Makefile shows sample invocations testing the various features.
+
+The file ./template-active.txt defines the mail message sent. The first
+line is the Subject: header, the rest is the body. The receive function
+looks for the specific string in the Subject:, so don't change it in one
+place without the other.
+
+Lines in the template starting with fmt: are piped through fmt before
+sending.
+
+If any questions/suggestions about the software, please email
address@hidden
+
+todo:
+- check for inconsistent case in maintainers package names.
+- send different msg to people in recentrel.txt.
+
+bugs from last send:
+fsd-by-license did not find gplv3 tar?!
+and what about slib publicdomain? should not have been mailed.
+ditto speex, which was xiph -- shouldn't have been mailed.
+then review mixed msgs to go out -- not tar, not gcc.
+unknown, unconfirmed maintainers
+sort both maintainers and gnupackages by block
+no non-email maintainers in .bypkg
+multiple email fields -> error
+on receipt, have to match any altemail not just primary
+must ignore maintainers without email, not send to empty
Index: gm-read.pl
===================================================================
RCS file: gm-read.pl
diff -N gm-read.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gm-read.pl 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,826 @@
+# $Id: gm-read.pl,v 1.1 2019/05/11 10:44:52 ineiev Exp $
+# Subroutines for gm script that read various external data file.
+#
+# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+
+
+
+# Read $COPYRIGHT_LIST_FILE. If HOW is "by-line", return hash with the
+# keys being package names and the values their line numbers in the
+# file. If "by-year", return hash with keys as the assignment years and
+# the values another hash mapping packages to names.
+#
+sub read_copyright_list {
+ my ($how) = @_;
+ my %ret;
+
+ if ($how !~ /^by-(year|line)$/) {
+ die "unknown argument $how to read_copyright_list";
+ }
+
+ open (COPYRIGHT_LIST_FILE) || die "open($COPYRIGHT_LIST_FILE) failed: $!";
+ while (<COPYRIGHT_LIST_FILE>) {
+ # Look at lines following a blank line.
+ next unless /^\s*$/;
+ $_ = <COPYRIGHT_LIST_FILE>;
+ chomp;
+
+#new # Split at tabs.
+#new my (@parts) = split (/\t+/);
+#new
+#new # If there is only one part, or more than five, something is totally
awry.
+#new if (@parts == 1 || @parts > 5) {
+#new warn "$COPYRIGHT_LIST_FILE:$.: strange line tabs: $_\n";
+#new next;
+#new
+#new # If there are only two or three parts, we hope it is a company
+#new # assignment, like
+#new # Telmark 2010-4-29
+#new # Just skip those for now.
+#new } elsif (@parts == 2) { # xx complain if a pkgname is first?
+#new warn "2 parts: @parts\n";
+#new next;
+#new
+#new # If there are three parts, we hope it is also a company assignment
+#new # with package name, like
+#new # ANY CNOC vof 2010-5-26
+#new # Just skip these, too.
+#new } elsif (@parts == 3) { # xx complain if a pkgname is first?
+#new warn "3 parts: @parts\n";
+#new next;
+#new
+#new # If there are four parts, it is a mystery.
+#new } elsif (@parts == 4) { # xx complain if a pkgname is first?
+#new warn "4 parts?: @parts\n";
+#new next;
+#new }
+#new
+#new # Five parts is the normal case of a personal assignment, like
+#new # EMACS Richard Stallman USA 1953 1986-09-29
+#new my ($pkgs,$name,$birthplace,$birthyear,$date) = @parts;
+#new warn "$pkgs by $name on $date\n";
+#new
+
+ # Drop everything after the first tab, we don't want to see all-caps
+ # company names.
+ s/\t.*//;
+
+ # Sometimes commas are used to separate package names. Just replace
+ # them with spaces as a small simplification.
+ s/,/ /g;
+
+ # Split remainder into words at whitespace.
+ my @words = split (" ");
+
+ my $year = -1;
+ my @line_pkgs = (); # if by-year
+ for my $w (@words) {
+ # the word has to start with an uppercase letter or number,
+ # and be followed only by possible constituent characters,
+ # or we're done with this line.
+ last unless $w =~ /^[A-Z0-9][A-Z0-9._-]+$/;
+
+ # and if it is only digits, never mind (1559643 Ontario Limited).
+ next if $w =~ /^\d+$/;
+
+ # and if it is only digits and -, that's a date.
+ # remember the year if we need it, and we're done with this line.
+ if ($w =~ /^\d+-[-\d]+$/) {
+ if ($how eq "by-year") {
+ $year = substr ($w, 0, 4);
+ if ($year < 1980 || $year > 2222) {
+ warn "$COPYRIGHT_LIST_FILE:$.: strange year: $year\n";
+ next;
+ }
+ }
+ last;
+ }
+
+ # keyword ANY in copyright.list is not a package name for us, etc.
+ next if $w =~ /^(ANY|MISC|TRANSLATIONS|UNUSED)$/;
+
+ # Special case assignment, not a GNU package.
+ next if $w =~ /^(READINGRECORD)$/;
+
+ $w = lc ($w);
+ $canonical_pkg_name = &canonicalize_pkg_name ($w);
+
+ # Some packages have legitimate entries in copyright.list, but are
+ # nevertheless known not to be copyright FSF. Probably would be
+ # better to maintain this information in gnupackages.txt and get it
+ # from there. Maybe someday.
+ next if $canonical_pkg_name =~ /^(# not really ours:
+ 3dldf #finstol
+ |a2ps #demaille, hatta, et al.
+ |aspell #atkinson
+ |autogen #korb
+ |bayonne #dyfet
+ |ccrtp #dyfet
+ |djgpp #delorie
+ |ed #moore "licenses"
+ |epsilon #french university
+ |gcal #esken
+ |ghostscript #aladdin
+ |gnome #gnome
+ |gnu-arch #atai
+ |gnuucp #abandoned = unrelated to current uucp
+ |gnutrition #original author
+ |gnuzilla #mozilla
+ |gsasl #josefsson
+ |gsl #gough
+ |gsrc #sampson
+ |icecat #mozilla
+ |indent #bsd et al.
+ |inetutils #bsd
+ |less #nudelman
+ |libgcrypt #koch
+ |libidn #josefsson
+ |octave #many
+ |osip #josefsson
+ |patch #lwall
+ |rcs #tichy et al.
+ |screen #weigert et al.
+ |shishi #josefsson
+ |social #new social is not the old package
+ |uucp #airs
+ |vera #not an assignment
+ )$/x;
+
+ # if by line, we can just save this package in the return hash.
+ # if by year, have to accumulate all the info on this line.
+ if ($how eq "by-year") {
+ push (@line_pkgs, $canonical_pkg_name);
+ } elsif ($how eq "by-line") {
+ $ret{$canonical_pkg_name} = $.;
+ }
+ }
+ }
+ close (COPYRIGHT_LIST_FILE) || warn "close($COPYRIGHT_LIST_FILE) failed: $!";
+
+ $ret{"gnustandards"} = 1; # no papers, but is copyright FSF
+ $ret{"libtasn1"} = 1; # split off from gnutls, so no separate papers
+ $ret{"lispintro"} = 1; # no papers, but is copyright FSF
+ $ret{"mig"} = 1; # part of hurd
+ $ret{"trans-coord"} = 1; # container
+
+ return %ret;
+
+
+ # lots of names in copyright.list don't match current package
+ # identifiers, for whatever reason.
+ #
+ sub canonicalize_pkg_name {
+ my ($w) = @_;
+
+ $w =~ s/_manual//; # manuals are not separate packages for us.
+
+ %map = (
+# "dotgnu" => "dotgnu-pnet",#decommissioned
+ "enterprise" => "gnue", # remain?
+ "glibc" => "libc", # will remain
+# "gnu-c" => "gcc",
+# "gnuchess" => "chess",
+# "gnugsl" => "gsl",
+# "gnupascal" => "pascal",
+# "gnus" => "emacs",
+# "gpc" => "pascal",
+# "graphics" => "plotutils",
+# "hashcash.el" => "emacs",
+# "info" => "texinfo",
+# "libavl" => "avl",
+# "libgcj" => "gcc",
+# "libgen.a" => "libc",
+# "libgsasl" => "gsasl",
+# "libutf8" => "libunistring",
+# "mach" => "gnumach",
+# "makeinfo" => "texinfo",
+# "malloc" => "libc",
+# "memcmp" => "libc",
+# "memcpy" => "libc",
+# "memset" => "libc",
+# "midnight" => "mc",
+# "midnight_commander" => "mc",
+# "mp" => "gmp",
+# "muse" => "emacs-muse",
+# "objc" => "gcc",
+# "obstack" => "libc",
+# "pfe" => "gforth",
+# "pnet" => "dotgnu-pnet",
+# "portable.net" => "dotgnu-pnet",
+# "ps" => "sysutils",
+# "ptx" => "coreutils",
+# "queue" => "gnu-queue",
+# "radio" => "gnuradio",
+# "readlink" => "coreutils",
+# "regcmp" => "libc",
+# "regex" => "libc",
+# "regexp" => "regex",
+# "sasl" => "gsasl",
+# "shogi" => "gnushogi",
+# "shred" => "coreutils",
+# "snprintfv" => "libc",
+# "sql.el" => "emacs",
+# "strchr" => "libc",
+# "strftime" => "libc",
+# "strtod" => "libc",
+# "superoptimizer" => "superopt",
+# "texi2html" => "texinfo",
+# "verilog-mode.el" => "emacs",
+# fixed into /subentries:
+# "gas" => "binutils",
+# "getopt" => "libc",
+# "gprof" => "binutils",
+# "glob" => "libc",
+# "gnu.regexp" => "libc",
+# "ld" => "binutils",
+# "robotussin" => "binutils",
+# "winboard" => "xboard",
+ );
+ return $map{$w} || $w;
+ }
+}
+
+
+
+# Read $COPYRIGHT_PAPERS_FILE, generated with
+# cd /srv/data/copyright-mirror && find -type f | sort
+#
+# Return hash with the keys being years and the values another hash
+# (reference): this one with keys being the package names and the values
+# yet a third hash (reference): this one just last names for keys, to
+# easily avoid muliple entries. This is the information given in the
+# filenames.
+#
+# Implementation not finished. This is trying to check consistency
+# between the papers the FSF actually has and the records of them.
+#
+sub read_copyright_papers {
+ my %ret;
+
+ open (COPYRIGHT_PAPERS_FILE) ||die "open($COPYRIGHT_PAPERS_FILE) failed: $!";
+ while (<COPYRIGHT_PAPERS_FILE>) {
+ # Examples: ./1985/Curry.grep.pdf ./1985/Robinson.emacs.1.pdf
+ chomp;
+ my (undef,$year,$file) = split ("/");
+ next if $file eq ""; # ignore top-level files
+ next if $file =~ /#/; # ignore autosave files.
+ next if $file =~ /~$/; # ignore backup files.
+
+ if ($year < 1980 || $year > 2222) {
+ warn "$COPYRIGHT_PAPERS_FILE:$.: strange year: $year\n";
+ next;
+ }
+
+ $file =~ s/\.pdf$//; # remove trailing .pdf
+
+ my ($name,$package) = split (/\./, $file);
+ if ($name eq "") {
+ warn ("$COPYRIGHT_PAPERS_FILE:$.: empty name in $_\n");
+ next;
+ }
+
+ # many filenames lack package names; try to match up last names.
+ $package = ".nameonly" if $package eq "";
+ $ret{$year}->{$package}->{$name}++;
+ }
+
+ close (COPYRIGHT_PAPERS_FILE)
+ || warn "close($COPYRIGHT_PAPERS_FILE) failed: $!";
+ return %ret;
+}
+
+
+
+# Read doc-categories.txt file for info about SHORT_CAT, and return a
+# reference to a two-element array. The first element in the array is
+# the long category name; the second element is a url to the category in
+# the Free Software Directory.
+#
+# If we ever need a third piece of information, should probably switch
+# to a hash for the values.
+#
+sub read_doc_categories {
+ my ($short_cat) = @_;
+
+ if (keys %doc_category == 0) {
+ open (DOC_CATEGORIES_FILE) || die "open($DOC_CATEGORIES_FILE) failed: $!";
+
+ while (<DOC_CATEGORIES_FILE>) {
+ next if /^\s*#/; # ignore comments
+ next if /^\s*$/; # ignore blank lines.
+ chomp;
+
+ my ($short,$fsd,$full) = split (" ", $_, 3);
+ my $ret_full = $full || $short;
+ my $ret_url = $fsd eq "-"
+ ? "" : "http://directory.fsf.org/category/$fsd/";
+ $doc_category{$short} = [ $ret_full, $ret_url ];
+
+ }
+
+ close (DOC_CATEGORIES_FILE)
+ || warn "close($DOC_CATEGORIES_FILE) failed: $!";
+ }
+
+ # now we have the hash, so look up SHORT_CAT.
+ my $ret;
+ if (exists ($doc_category{$short_cat})) {
+ $ret = $doc_category{$short_cat};
+ } else {
+ warn "$DOC_CATEGORIES_FILE: no short category name $short_cat\n";
+ $ret = ["no long name for $short_cat", "no url for $short_cat"];
+ }
+
+ return $ret;
+}
+
+
+
+# Read an rsync listing of ftp.gnu.org, with entries like this:
+#
+# drwxr-xr-x 4096 2004/01/16 12:20:08 gnu/3dldf
+# lrwxrwxrwx 5 2010/12/29 13:30:03 gnu/libc -> glibc
+#
+# Return list of directories and symlinks under gnu/.
+#
+sub read_ftplisting {
+ my @ret;
+
+ open (FTPLISTING_FILE) || die "open($FTPLISTING_FILE) failed: $!";
+ my %keys;
+ while (<FTPLISTING_FILE>) {
+ chomp;
+ next unless /^[dl].*[0-9] gnu[^+]/; # the 0-9 is the seconds
+ my $orig = $_;
+ s,^.* gnu/,,; # rm through the gnu/
+ s,[ /].*$,,; # rm all following components or symlink target
+ push (@ret, $_) unless exists $keys{$_};
+ $keys{$_} = 1;
+ warn "keeping $_ from $orig\n" if /^drw/;
+ }
+ close (FTPLISTING_FILE) || warn "close($FTPLISTING_FILE) failed: $!";
+
+ return @ret;
+}
+
+
+
+# Read the ftp-upload-email file, generated by the sysadmins.
+# Return per-package hash of info, with keys being the package names and
+# values the list of email addresses.
+#
+sub read_ftpupload_email {
+ my %ret;
+
+ open (FTPUPLOAD_EMAIL_FILE) || die "open($FTPUPLOAD_EMAIL_FILE) failed: $!";
+ while (<FTPUPLOAD_EMAIL_FILE>) {
+ chomp;
+ my ($pkg,$emails) = split (" ");
+
+ $pkg = "libc" if $pkg eq "glibc"; # name on ftp.gnu.org differs
+
+ $ret{$pkg} = $emails;
+ }
+ close (FTPUPLOAD_EMAIL_FILE) || warn "close($FTPUPLOAD_EMAIL_FILE) failed:
$!";
+
+ return %ret;
+}
+
+
+
+# Read the gnupackages.txt file, return a hash of information, where
+# the keys are package names and the values are hash references with the
+# information. If a key is given more than once (e.g., note), the
+# values are separated by |.
+#
+# A key "lineno" is synthesized with the line number of the blank line
+# following the package.
+#
+# Another key "human_label" is synthesized as a human-oriented package
+# name: the mundane_name: field if it's present, else a prettified
+# version of the package identifier.
+#
+sub read_gnupackages {
+ my %ret;
+
+ open (GNUPACKAGES_FILE) || die "open($GNUPACKAGES_FILE) failed: $!";
+
+ my %pkg;
+ while (<GNUPACKAGES_FILE>) {
+ next if /^#/; # ignore comments
+ next if /^%/; # ignore Recutils annotation
+ s/ +$//; # remove trailing spaces
+ chomp;
+
+ # at a blank line, save the info we've accumulated, if any.
+ if (/^$/) {
+ next unless keys %pkg;
+
+ if (exists $pkg{"package"}) {
+ my %copy = %pkg; # do not save a pointer to what will be overwritten
+ $copy{"lineno"} = $. - 1; # save line number
+
+ my $human_label = $pkg{"mundane_name"};
+ if (! $human_label) {
+ ($human_label = $pkg{"package"}) =~ s/^gnu/GNU/; # gnufoo -> GNUfoo
+ $human_label = ucfirst ($human_label); # bar -> Bar
+ }
+ $copy{"human_label"} = $human_label;
+
+ # save the constructed hash.
+ $ret{$pkg{"package"}} = \%copy;
+
+ } else {
+ warn "$GNUPACKAGES_FILE:$.: no package name for block ending here\n";
+ }
+ undef %pkg; # clear out for next
+ next;
+ }
+
+ # check for a line continuation
+ if (/^\+ /){
+ my $contval = substr $_, 2;
+ $key{$val} = $key{$val} . $contval;
+ next;
+ }
+
+ # key is everything before the first colon.
+ # value is everything after the first colon and whitespace.
+ my ($key,$val) = split (/:\s*/, $_, 2);
+ if ($key eq $_) {
+ warn "$GNUPACKAGES_FILE:$.: no colon in line\n";
+ }
+
+ if ($key eq "package" && $val =~ /[A-Z]/) {
+ # as a convention for simplicitly, we want to eschew uppercase in
+ # package identifiers.
+ warn "$GNUPACKAGES_FILE:$.: forcing package name to lowercase\n";
+ $val = lc ($val);
+ }
+
+ # if key already exists, use | to separate values.
+ $val = "$pkg{$key}|$val" if exists $pkg{$key};
+
+ $pkg{$key} = $val;
+ }
+
+ close (GNUPACKAGES_FILE) || warn "close($GNUPACKAGES_FILE) failed: $!";
+
+ return %ret;
+}
+
+
+# Read the pkgblurbs.txt file, return a hash of information, where the
+# keys are package names and the values are hash references with the
+# information. If a key is given more than once, an error is given.
+# A key "lineno" is synthesized with the line number of the blank line
+# following the package.
+#
+sub read_pkgblurbs {
+ my %ret;
+
+ open (PKGBLURBS_FILE) || die "open($PKGBLURBS_FILE) failed: $!";
+
+ my %pkg;
+ while (<PKGBLURBS_FILE>) {
+ next if /^#/; # Ignore comments
+ s/ +$//; # remove trailing spaces
+ chomp;
+
+ # at a blank line, save the info we've accumulated, if any.
+ if (/^$/) {
+ next unless keys %pkg;
+
+ if (exists $pkg{"package"}) {
+ my %copy = %pkg; # do not save a pointer to what will be overwritten
+ $copy{"lineno"} = $. - 1; # save line number
+ $ret{$pkg{"package"}} = \%copy;
+ } else {
+ warn "$PKGBLURBS_FILE:$.: no package name for block ending here\n";
+ }
+ undef %pkg; # clear out for next
+ next;
+ }
+ #
+ # the idea is that we have
+ # blurb: text text text
+ # + continued text continued text ...
+ #
+ # Let's look for the continuation lines first.
+ if (/^\+\s+/) {
+ if (exists $pkg{"blurb"}) {
+ # continued line, drop "+ " continuation and append.
+ s,^\+\s+,,;
+ $pkg{blurb} = "$pkg{blurb} $_";
+ } else {
+ warn "$PKGBLURBS_FILE:$.: +continuation without previous blurb:\n";
+ }
+
+ } elsif (/:/) {
+ # not a continuation line, so it should be a normal
+ # key: value line.
+ my ($key,$val) = split (/:\s*/, $_, 2);
+ # if key already exists, complain.
+ warn "found second value $val for key $key (already have $pkg{$key})\n"
+ if exists $pkg{$key};
+
+ $pkg{$key} = $val;
+
+ } else {
+ warn "$PKGBLURBS_FILE:$.: no colon or plus in line\n";
+ }
+ }
+ close (PKGBLURBS_FILE) || warn "close($PKGBLURBS_FILE) failed: $!";
+
+ return %ret;
+}
+
+
+
+# Read htmlxref.cnf file for entries relating to PKGNAME.
+# Return a hash where the keys are the manual identifiers and the values
+# are the urls.
+#
+# See the HTML Xref Configuration node in the Texinfo manual.
+# The file is maintained in the util subdirectory of the Texinfo sources.
+#
+sub read_htmlxref {
+ my ($pkgname) = @_;
+ my %ret;
+
+ open (HTMLXREF_FILE) || die "open($HTMLXREF_FILE) failed: $!";
+
+ my %variables;
+ my %ret_type; # record preferred xref type so far, for each manual
+ while (<HTMLXREF_FILE>) {
+ next if /^\s*#/; # ignore comments
+ next if /^\s*$/; # ignore blank lines.
+ chomp;
+
+ # handle variable definitions:
+ if (/^\s*(\w+)\s*=\s*(.*)\s*$/) {
+ my ($var,$val) = ($1,$2);
+ $variables{$var} = &expand_variables ($val);
+
+ # look for manual entries relating to PKGNAME:
+ } elsif (/^\s*(\S+)\s+(\w+)\s+(.*)\s*$/) {
+ my ($manual,$type,$url) = ($1,$2,$3);
+
+ # The manual name may be exactly the package name, but it may not
+ # be, yet still part of the package. To detect this, we see if
+ # the entry uses the package name as a variable in the url. (This
+ # seemed the only other way we could extract the relevant manuals,
+ # barring adding another field, which seemed redundant.) Such a
+ # variable name is always in all-uppercase, with - changed to _.
+ #
+ (my $pkgname_as_var = $pkgname) =~ tr/a-z-/A-Z_/;
+ if ($manual eq $pkgname || $url =~ /\$\{$pkgname_as_var\}/) {
+ if (! exists $ret_type{$manual}
+ || &prefer_xref_type ($type, $ret_type{$manual})) {
+ $ret{$manual} = &expand_variables ($url);
+ $ret_type{$manual} = $type;
+ }
+ }
+
+ } else {
+ warn "$HTMLXREF_FILE:$.: unexpected line: $_\n";
+ }
+ }
+
+ close (HTMLXREF_FILE) || warn "close($HTMLXREF_FILE) failed: $!";
+
+ return %ret;
+
+ # using the %variables hash, expand ${varname} constructs until none
+ # remain. If a variable isn't defined, just replace it with the empty
+ # string. Would be better to give a warning, but let's not bother.
+ sub expand_variables {
+ my ($val) = @_;
+ $val =~ s/\$\{(\w+)\}/$variables{$1}/eg # expand variables
+ until $val !~ /\$\{(\w+)\}/; # until no more
+ return $val;
+ }
+
+ # If TYPE1 is preferred to TYPE2, return 1, else 0.
+ # When a given manual is available in multiple formats, we prefer the
+ # "smallest" one (mono < chapter < section < node), since packages with
+ # multiple manuals tend to be large, and in any event, we usually have a
+ # generic url (/software/pkgname/manual/) linking to all available forms.
+ sub prefer_xref_type {
+ my ($type1,$type2) = @_;
+ my %xref_types = (
+ "node" => 10,
+ "section" => 20,
+ "chapter" => 30,
+ "mono" => 40,
+ );
+
+ if (! exists $xref_types{$type1}) {
+ warn "$HTMLXREF_FILE:$.: unexpected xref type: $type1\n";
+ }
+ if (! exists $xref_types{$type2}) {
+ warn "$HTMLXREF_FILE:$.: unexpected xref type: $type2\n";
+ }
+
+ return $xref_types{$type1} < $xref_types{$type2};
+ }
+}
+
+
+
+# Read $MAINTAINERS_FILE according to $HOW, either "by-package" or
+# "by-maintainer". We return a hash. With "by-package", the keys are
+# package names and the values are a list of maintainer hash references.
+# With "by-maintainer", the keys are maintainer (real) names and the
+# values are hash references with their information.
+# If a field occurs more than once in a given maintainer's entry,
+# the values are separated by a |.
+#
+# Special maintainer keys we synthesize, i.e., that are not in the
+# actual maintainers file:
+# is_generic - whether it is an actual person or a generic address;
+# best_email - uses privateemail where present, in preference to email;
+# lineno - location in the file.
+#
+sub read_maintainers {
+ my ($how) = @_;
+ my %ret;
+
+ open (MAINTAINERS_FILE) || die "open($MAINTAINERS_FILE) failed: $!";
+
+ # read the real information.
+ my %maint; # info we are accumulating for one maintainer
+ while (<MAINTAINERS_FILE>) {
+ next if /^#/; # ignore comments
+ next if /^%/; # ignore Recutils annotation
+ chomp;
+
+ # at a blank line, save the maintainer info we've accumulated, if any.
+ if (/^\s*$/) {
+ &debug_hash ($., %maint);
+ next unless keys %maint;
+
+ # record whether this is a generic maintainer (starts with lowercase):
+ $maint{"is_generic"} = $maint{"name"} =~ m/^[a-z]/;
+
+ # record best email to use for the maintainer.
+ $maint{"best_email"} = $maint{"privateemail"} || $maint{"email"};
+
+ # record where we found it, more or less. We are past the blank
+ # line, and we can assume every entry has at least two lines.
+ $maint{"lineno"} = $. - 4;
+
+ if ($how eq "by-package") {
+ # split apart the package value we've accumulated..
+ if (exists $maint{"package"} || exists $maint{"uploader"}) {
+ my @pkgs = split (/\|/, $maint{"package"});
+ my @uplds = split (/\|/, $maint{"uploader"});
+
+ # append this maintainer to the list for each of his/her packages.
+ my %copy = %maint;
+ $copy{"is_uploader"} = 0;
+ for my $p (@pkgs) {
+ my @x = exists $ret{$p} ? @{$ret{$p}} : ();
+ push (@x, \%copy);
+ $ret{$p} = address@hidden;
+ }
+ my %copy2 = %maint;
+ $copy2{"is_uploader"} = 1;
+ for my $p (@uplds) {
+ my @x = exists $ret{$p} ? @{$ret{$p}} : ();
+ push (@x, \%copy2);
+ $ret{$p} = address@hidden;
+ }
+ } else {
+ warn "no packages for $maint{name}";
+ }
+
+ } elsif ($how eq "by-maintainer") {
+ if (! exists $maint{"name"}) {
+ warn "no name for maintainer";
+ next;
+ }
+ my $name = $maint{"name"};
+ if (exists $ret{$name}) {
+ warn "ignoring second entry for maintainer $name";
+ next;
+ }
+ my %copy = %maint;
+ $ret{$name} = \%copy;
+
+ } else {
+ die "can't read_maintainers($how)";
+ }
+
+ undef %maint; # clear out for next maintainer.
+
+ last if /^\f$/; # form feed marks end of info.
+ next;
+ }
+
+ # key is everything before the first colon.
+ # value is everything after the first colon and whitespace.
+ my ($key,$val) = split (/:\s*/, $_, 2);
+
+ # check that an email value doesn't have two @'s.
+ if ($key =~ /email/ && $val =~ /@@/) {
+ warn "value for key $key has double \@: $val";
+ next;
+ }
+
+ # if key already exists, use | to separate values.
+ $val = "$maint{$key}|$val" if exists $maint{$key};
+
+ # todo: parse key of address+ and append.
+ $maint{$key} = $val;
+ }
+
+ # skip the rest.
+ close (MAINTAINERS_FILE) || warn "close($MAINTAINERS_FILE) failed: $!";
+
+ return %ret;
+}
+
+
+
+# Return list of entries in $OLDPACKAGES_FILE -- one per line, ignoring
+# comments starting with # and blank lines.
+#
+sub read_oldpackages {
+ local $GNUPACKAGES_FILE = $OLDPACKAGES_FILE;
+ my %ret = &read_gnupackages (); # reuse routine via dynamic scoping
+ return %ret;
+}
+
+
+
+# Return list of entries in $RECENTREL_FILE -- one per line, ignoring
+# comments starting with # and blank lines.
+#
+sub read_recentrel {
+ my @ret = ();
+
+ open (RECENTREL_FILE) || die "open($RECENTREL_FILE) failed: $!";
+ while (<RECENTREL_FILE>) {
+ next if /^\s*#/; # ignore comments
+ next if /^\s*$/; # ignore blank lines.
+ chomp;
+ push (@ret, $_);
+ }
+ close (RECENTREL_FILE) || warn "close($RECENTREL_FILE) failed: $!";
+
+ return @ret;
+}
+
+
+
+# read the savannah groups.tsv file, return a hash of information, where
+# the keys are project identifiers and the values are references to
+# hashes with the information. A key "lineno" is included in each value.
+#
+sub read_savannah {
+ my %ret;
+
+ open (SAVANNAH_FILE) || die "open($SAVANNAH_FILE) failed: $!";
+ <SAVANNAH_FILE>; # ignore first line (with field names).
+
+ # We want only the offical GNU packages, which, happily, come first (type=1).
+ while (<SAVANNAH_FILE>) {
+ last if /^2/; # quit at first non-gnu
+ chomp;
+ my ($type_id,$name,$unix_group_name,$group_name) = split (/\t/);
+
+ my %pkg;
+ $pkg{"name"} = $group_name;
+ $pkg{"lineno"} = $.;
+
+ if (exists $ret{$unix_group_name}) {
+ warn "$SAVANNAH_FILE:$.: already saw $unix_group_name?\n";
+ } else {
+ $ret{$unix_group_name} = \%pkg;
+ }
+ }
+
+ close (SAVANNAH_FILE) || warn "close($SAVANNAH_FILE) failed: $!";
+
+ return %ret;
+}
+
+
+1;
Index: recentrel.txt
===================================================================
RCS file: recentrel.txt
diff -N recentrel.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ recentrel.txt 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,75 @@
+# released only, no announcement
+gnuradio
+commoncpp
+gcc
+solfege
+smalltalk
+nano
+global
+kawa
+bayonne
+ccscript
+tramp
+gprolog
+libextractor
+gnunet
+ccrtp
+aspell
+gdb
+bpel2owfn
+libcdio
+gettext
+ccaudio
+gettext
+radius
+autoconf
+units
+gnujump
+osip
+mailutils
+inetutils
+cpio
+groff
+jel
+electric
+glibc
+erc
+parted
+ed
+reftex
+bash
+readline
+findutils
+libmatheval
+gsl
+glpk
+autogen
+coreutils
+src-highlite
+m4
+songanizer
+reftex
+gzip
+osip
+gnutls
+gsasl
+classpath
+libidn
+xnee
+libgcrypt
+autogen
+libopts
+glpk
+ghostscript
+gperf
+gnupg
+tramp
+nano
+global
+fdisk
+parted
+solfege
+bpel2owfn
+libc
+gnuschool
+shtool
Index: Makefile
===================================================================
RCS file: Makefile
diff -N Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ Makefile 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,183 @@
+# $Id: Makefile,v 1.1 2019/05/11 10:44:52 ineiev Exp $
+# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
+# Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+default:
+
+# when we want to remake all the .html on the web site,
+# $(gw) being the www cvs checkout.
+html-update html: pkgblurbs.txt
+ gm generate logos html >$(gw)/graphics/allgnupkgs.html
+ gm generate manual html >$(gw)/manual/allgnupkgs.html
+ gm generate packages html >$(gw)/software/allgnupkgs.html
+ gm generate blurbs html >$(gw)/server/home-pkgblurbs.html
+
+html-diff:
+ -cd $(gw) && cvs diff -u0 */allgnupkgs.html server/home-pkgblurbs.html
+
+pkg-blurbs-html bhtml: pkgblurbs.txt
+ gm generate blurbs html | tee ~/tmp/x.html
+
+test-genlhtml ghtml: # result included from www.gnu.org/graphics/manual.html
+ gm generate logos html | tee ~/tmp/x.html
+
+test-genmhtml mhtml: # result included from www.gnu.org/manual/manual.html
+ gm generate manual html | tee ~/tmp/x.html
+
+test-genphtml phtml shtml: # result included from
www.gnu.org/software/software.html
+ gm generate packages html | tee ~/tmp/x.html
+
+test-genmaint maint: # this function updates gnuorg/maintainers.bypkg
+ gm generate maintainers bypackage
+
+test-genemail email:
+ gm generate email bypackage -o msg.1303 -p pkglist-cveauto.txt -t
massmail-1303-cveauto.txt
+ ls msg.1303/
+
+email-stale-%:
+ gm generate email bypackage -o msg.$* -p pkglist-stale-$*.txt -t
massmail-$*-stale.txt
+ ls msg.$*/
+
+email-1201:
+ gm generate email bypackage -o msg.1201 -p pkglist-fsfpackages.txt -t
massmail-1201-copyright.txt
+ ls msg.1201/
+
+test-genemail-err:
+ gm generate email bypackage # should give error, missing args
+test-genemail-help:
+ gm generate email bypackage -h
+fsfpackages.txt: copyright.list gm gm-read.pl gm-util.pl pkgblurbs.txt
+ gm list copyrightfsf >$@
+
+test-listfsf fsf:
+ gm list copyrightfsf
+
+test-listfsfnot fsfnot:
+ gm list copyrightfsfnot
+
+test-listpapers pap:
+ gm list copyrightpapers
+
+test-nophysical:
+ gm list maintainers nophysical
+
+test-listactivity stale:
+ gm list packages activity
+
+test-gplv3 gplv3:
+ gm list packages gplv3
+
+test-unanswered:
+ gm list packages unanswered
+
+test-checkactivity cact:
+ gm check activityfile
+
+test-checkfsf cfsf: gnupackages.txt
+ gm check fsfcopyright
+
+test-checkmaint cmaint: gnupackages.txt
+ gm check maintainers
+
+test-checkftp-upload cfu:
+ gm check ftpupload
+
+test-checkftp ftp:
+ gm check ftplisting
+
+test-checksv sv:
+ gm check savannah
+
+#
+creport: gnupackages.txt
+ @printf "total "; gm generate maintainers bypackage \
+ | grep ' - ' | grep -v ' (generic)' | wc -l
+ @printf "fsf "; gm list copyrightfsf 2>/dev/null | wc -l
address@hidden "notfsf"; gm list copyrightfsfnot | wc -l
+# the totals don't exactly match because of gm-utils.pl:skip_pkg_p,
+# so don't bother showing.
+ @$(MAKE) --no-print-directory cfsf
+# just a dirty count of the various categories.
+ @sed -n 's/^copyright-holder: fsf//p' gnupackages.txt \
+ | sed 's/^-//' \
+ | sort | uniq -c
+
+# | sed 's/-.*//' \
+
+maint-field-check:
+ sed 1,/`printf '\f'`/d maintainers \
+ | sed s/#.*// |
+ | sed -n 's/^\([^ ]*\):.*/\1/p' \
+ | sort | uniq -c | sort -n
+
+test-listmaint:
+ gnumaint list maintainers $(sep)
+ gnumaint list maintainers package karl1test $(sep)
+ gnumaint list maintainers karl $(sep)
+
+test-list-packages:
+# gnumaint list packages $(sep)
+# gnumaint list packages maintained $(sep)
+# gnumaint list packages unmaintained $(sep)
+# gnumaint list packages maintainer karl $(sep)
+ gnumaint list packages maintainer arenn $(sep)
+
+#
+# gnumaint (mail) and conversion.
+#
+test-help:
+ gnumaint help sendemail $(sep)
+ gnumaint help list $(sep)
+ gnumaint help $(sep)
+
+test-rece:
+# gnumaint recemail </etc/issue
+# gnumaint recemail <testjunk1.msg
+ gnumaint recemail <testgood1.msg
+# gnumaint recemail <testaddr+real.msg
+# gnumaint recemail <testaddrangle.msg
+# gnumaint recemail <testaddrcase.msg
+# gnumaint recemail <testaddrcomment.msg
+
+sep = 2>&1 | dos2unix; true ------------------------------
+
+test-send:
+ gnumaint sendemail active $(sep)
+
+test-activity-convert:
+ mailtoname
+
+test-maint-convert:
+# maintfileupgrade $(gorg)/maintainers | dos2unix
+ maintfileupgrade m.src | dos2unix | tee m.new
+
+#
+# Old txt files, now maintained as recfiles
+pkgblurbs.txt: rec/pkgblurbs.rec
+ gawk -f rec/pkgblurbs2txt.awk < $< > $@
+gnupackages.txt: rec/gnupackages.rec
+ gawk -f rec/gnupackages2txt.awk < $< > $@
+
+#
+# From the good old days when the Directory was in CVS.
+#
+#gnuorg = $(go)
+#dircvs = $(HOME)/gnu/src/directory/CVS
+#
+## compare GNU package names in maintainers file and Free Software Directory.
+#check-pkgnames: pkgnames.frommaint pkgnames.fromdir
+# comm -3 $^
+#
+## list of all packages derived from the maintainers file.
+## (easier to parse from maintainers.bypkg, generated from maintainers).
+#pkgnames.frommaint: $(gnuorg)/maintainers.bypkg
+# sed -e 's/#.*$$//' -e 's/ - .*$$//' $< | grep -v '(generic)' \
+# | sed '/^$$/d' | sort >$@
+#
+## list of all packages derived from the Free Software Directory.
+#pkgnames.fromdir: gnufsd $(dircvs)/Entries
+# $< byname >$@
Index: temail-4post.txt
===================================================================
RCS file: temail-4post.txt
diff -N temail-4post.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ temail-4post.txt 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,34 @@
+Sample blurbs for sending to new maintainers, to be edited as appropriate.
+
+------------------------------------------------------------------
+[check savannah; if they aren't there, get them to create an account.]
+[a first msg, right after they are appointed]
+
+I added you to the gnu-prog lists. You should have received the welcome
+msgs just before this.
+
+Also, can you please send us a phone number / mailing address /
+alternative email, just to have as backup? We try to collect these for
+all GNU maintainers. Of course we won't publicize the information
+anywhere on the web. If you would prefer to send this info encrypted,
+please let me know.
+
+[for new packages only]
+Also, can you please write a couple of sentences describing your
+package, for use on http://www.gnu.org/manual/blurbs.html?
+
+-------------------------------------------------------------------
+[a second msg, after they reply]
+Thanks for the contact info.
+
+[for replacement maintainers only]
+Please go ahead and update any of the information at the savannah
+project and on the web pages (e.g., remove the looking-for-a-maintainer
+notice :) as needed.
+http://www.gnu.org/prep/maintain/html_node/Web-Pages.html talks about
+handling web pages, including a template you can use if you like.
+
+If any questions or problems with the GNU infrastructure, please feel
+free to email us (or address@hidden, as mentioned in the welcome email).
+
+Happy hacking,
Index: spotlight.mk
===================================================================
RCS file: spotlight.mk
diff -N spotlight.mk
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ spotlight.mk 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,77 @@
+FP = fencepost.gnu.org
+FP_GNU_EXCLUDES = --exclude=*.sig --exclude=video/TIME --exclude=find.txt.gz \
+ --exclude=ls-l*.txt.gz --exclude=gnu-keyring.gpg
+
+SL_DIR = spotlight
+GNUBYTIME = perl $(SL_DIR)/gnubytime.pl
+SL_M4 = $(SL_DIR)/spotlight.m4
+
+SL_TMP = spotlight-tmp
+REL = $(SL_TMP)/releases.gnu
+REL_BY_TIME = $(SL_TMP)/releases-by-time.gnu
+REL_THIS_MONTH = $(SL_TMP)/releases-this-month.gnu
+REL_READY = $(SL_TMP)/releases-ready.gnu
+REL_MD = $(SL_TMP)/releases.md
+SL_MD = $(SL_DIR)/spotlight-$(shell date +%Y-%m-%d).md
+ACTIVITY_REPORT = $(SL_TMP)/activity-report.txt
+
+define HELP
+Procedure:
+ 1. make release-list
+ 2. [manually edit $(REL_THIS_MONTH), rename to $(REL_THIS_MONTH)-ready]
+ 3. make markdown
+endef
+
+release-list: $(REL_THIS_MONTH)
+
+markdown: $(SL_MD)
+
+help:
+ $(info $(HELP))
+
+.PHONY: release-list markdown help
+
+$(REL):
+ mkdir -p $(SL_TMP)
+ rsync --no-h -r $(REL_EXCLUDES) $(FP):/srv/data/ftp-mirror/ftp/ \
+ | egrep -v '^[dl]' >"$@"
+
+$(ACTIVITY_REPORT):
+ scp $(FP):~brandon/src/womb/gnumaint/activity-report.txt $@
+
+$(REL_BY_TIME): $(REL)
+ $(GNUBYTIME) "$<" >"$@"
+
+ifdef END_DATE
+$(REL_THIS_MONTH): $(REL_BY_TIME)
+ if grep -q "$(END_DATE)" $<; then \
+ sed '/$(END_DATE)/,$$d;s|^.*/||' "$<" | sort -u >"$@"; \
+ printf "\nNow manually edit $@, rename to address@hidden"; \
+ printf "Run '$(MAKE) markdown' to continue.\n"; \
+ else \
+ printf "Invalid end date (no packages released on that
date)\n"; \
+ exit; \
+ fi
+else
+$(REL_THIS_MONTH):
+ $(error No end date (end of previous Spotlight) specified (e.g.
END_DATE=20150222))
+endif
+
+$(REL_THIS_MONTH)-ready:
+ $(error You must create $@ by manually editing $(REL_THIS_MONTH))
+
+$(REL_READY): $(REL_THIS_MONTH)-ready
+ sort "$<" >"$@"
+
+$(REL_MD): $(REL_READY)
+ sed \
+ -e 's,\(.*\)-\([^-]*\),*
[\1-\2](https://www.gnu.org/software/\1/),' \
+ "$<" >"$@"
+
+$(SL_MD): $(REL_MD)
+ m4 \
+ -DNN="`wc -l <$(REL_MD)`" \
+ -DDATE="`date '+%B %d, %Y'`" \
+ -DRELEASES="`cat $(REL_MD)`" \
+ -DNEWMAINT="TODO new maintainers" \
+ $(SL_M4) >"$@"
Index: temail-2dub.txt
===================================================================
RCS file: temail-2dub.txt
diff -N temail-2dub.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ temail-2dub.txt 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,152 @@
+From: address@hidden (Brandon Invergo)
+To:
+Cc: address@hidden, address@hidden
+Subject: maintaining
+
+I hereby appoint you as the new maintainer of
+Thanks for volunteering.
+
+Being a package maintainer is a relationship between you personally
+and the GNU Project. The maintainer or maintainers are the ones who
+take the overall responsibility for the work done on the package, on
+behalf of the GNU Project.
+
+If you recruit others to contribute to the package (and some packages
+have hundreds of contributors), they work under your supervision. You
+can delegate some of your authority to them, but you can also take it
+back. Please make sure they don't come to think that you have ceded
+your authority to them and that they no longer have to follow your
+directions.
+
+The GNU Project will sometimes need to talk with you, sometimes
+privately, so please make sure we know a personal email address which
+you read frequently. We normally publish these email addresses in the
+Free Software Directory. We would also like to know other ways to get
+in touch with you if email fails; we do not give them out.
+
+If you ever want to step down as maintainer, or would like someone
+else to replace you, please talk with address@hidden about it.
+When a package has no maintainer, we need to know about the problem so
+we can look for a new one. The program remains a GNU package
+unless/until the GNU project decides to drop ties with it.
+
+Likewise, if you think someone else should join you as co-maintainer
+or take over from you as maintainer, please suggest that to us, since
+we will need to establish a relationship with that person. A person
+cannot become a GNU package maintainer except by being appointed by
+the GNU Project.
+
+Your appointment as maintainer is provisional at first. We'll make
+your appointment full and permanent when we see that you're doing the
+job. Usually that means we see that you've made a release properly,
+with the changes that the next release ought to have. However, if
+making a proper release involves a lot of work, and will therefore
+take a long time, we could appoint you full maintainer when we see you
+have made a good start on the job.
+
+Please tell us the first time you're about to make a release, so we
+can guide you on doing it properly following our conventions.
+
+The GNU maintainer information in https://www.gnu.org/prep/maintain/
+describes a lot of procedures for GNU maintainers. It also
+describes who you can ask for various kinds of support or advice. If
+you encounter a situation where it isn't clear what to do, you can
+also ask address@hidden, which is a list of a few other GNU
+maintainers who have offered to answer questions for new maintainers.
+
+We will add you to the gnu-prog mailing list, a moderated list for
+announcements to GNU maintainers. We will also add you to the
+gnu-prog-discuss list, which can be used for discussion among GNU
+maintainers, but whether to stay on the list is up to you.
+
+We strongly recommend using ftp.gnu.org to make distributions
+available. Please see the GNU maintainers guide for the procedure,
+https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html.
+When that is set up, you'll be able to do uploads yourself. If you
+want to also distribute the package from a site of your own, that is
+fine. To use some other site instead of ftp.gnu.org is acceptable,
+provided it allows connections from anyone anywhere.
+
+Please write or update the web pages about the program, to put in
+https://www.gnu.org/software/PROGNAME. These pages should be the
+main web site for the program, and they should really have the
+information for users, not just a link to another site; please use
+https://www.gnu.org/software/PROGNAME whenever you give out the URL
+for the home page of the program. Please don't set up a "site for the
+program" anywhere else--if you want to do work on additional web pages
+about the program, please put them on www.gnu.org.
+
+(It is ok to put pages that address developers-only topics on another
+site, and likewise for pages that access databases.)
+
+In writing the web pages, please follow the style guidelines in
+https://www.gnu.org/server/fsf-html-style-sheet.html. See also
+https://www.gnu.org/prep/maintain/html_node/Web-Pages.html.
+
+We ask that you register your package on Savannah, at least to maintain
+your package's web pages. This is independent of where the actual
+program sources are hosted (although we encourage you to use Savannah
+for that too). This makes it easy to update the web pages, since you
+will have access to a CVS repository for the web pages and can update it
+as you like. Using Savannah will help the GNU Project in other ways,
+too. To set this up, visit https://savannah.gnu.org/.
+
+Please also write an entry or a change for the page
+https://www.gnu.org/people/people.html, and mail that to
address@hidden Note that we don't want to talk about
+proprietary software, so if you have worked on any, please don't
+mention it here. Your entry can include a link to your home page
+provided it fits our usual criteria for what we link to.
+
+Please update the program's entry in our Free Software Directory. See
+https://www.gnu.org/help/directory.html#adding-entries for help.
+
+Mailing lists: Your package should already have a mailing list
address@hidden for reporting bugs. If not, please create it--see
+https://www.gnu.org/prep/maintain/html_node/Mail.html for the details of
+creating mailing lists.
+
+Some GNU programs with many users have another mailing list,
address@hidden, for people to ask other users for help. If
+your program has many users, you should create such a list for it.
+For a fairly new program, which doesn't have a large user base yet, it
+is better not to bother with this.
+
+Please post announcements of new releases of the program to
address@hidden Include a brief description of the program so people
+can tell whether they are interested in using it. The announcement
+should mention the web pages on www.gnu.org, and say where to get
+releases, normally ftp.gnu.org.
+
+You can also send announcements to a special list address@hidden
+for your program if you think that is warranted. (This list should be
+moderated.)
+
+Please also mention release announcements in the news feed of the
+savannah project site, <https://savannah.gnu.org/projects/PROGNAME>.
+The news feeds from the GNU project are aggregated at
+<https://planet.gnu.org/>.
+
+For more details about writing and publicizing announcements, please see
+https://www.gnu.org/prep/maintain/html_node/Announcements.html.
+
+For details on all policies and recommendations for GNU packages,
+please see the GNU maintainers information, at
+https://www.gnu.org/prep/maintain/, and GNU coding standards, at
+https://www.gnu.org/prep/standards/.
+
+For the basic ideas of GNU and free software, please read these essays:
+http://www.gnu.org/gnu/the-gnu-project.html
+http://www.gnu.org/philosophy/free-sw.html
+http://www.gnu.org/philosophy/categories.html
+http://www.gnu.org/philosophy/compromise.html
+http://www.gnu.org/philosophy/words-to-avoid.html
+http://www.gnu.org/gnu/linux-and-gnu.html
+http://www.gnu.org/gnu/gnu-linux-faq.html
+http://www.gnu.org/philosophy/open-source-misses-the-point.html
+
+new-gnu people, could you please enter XYZ in
+gnuorg/maintainers and add him to the gnu-prog lists?
+
+Savannah hackers, could you please ensure that XYZ is an administrator
+of the project on Savannah (if there is one)?
Index: testgood1.msg
===================================================================
RCS file: testgood1.msg
diff -N testgood1.msg
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testgood1.msg 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,14 @@
+From address@hidden Sun Feb 11 14:48:08 2007
+Return-path: <address@hidden>
+Envelope-to: address@hidden
+Delivery-date: Sun, 11 Feb 2007 14:48:08 -0500
+Received: from karl by fencepost.gnu.org with local (Exim 4.60)
+ (envelope-from <address@hidden>)
+ id 1HGKgC-0000P9-M8
+ for address@hidden; Sun, 11 Feb 2007 14:48:08 -0500
+To: address@hidden
+Message-Id: <address@hidden>
+From: address@hidden
+Date: Sun, 11 Feb 2007 14:48:08 -0500
+Subject: GNU package maintenance
+
Index: testaddrcomment.msg
===================================================================
RCS file: testaddrcomment.msg
diff -N testaddrcomment.msg
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testaddrcomment.msg 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,14 @@
+From address@hidden Sun Feb 11 14:48:08 2007
+Return-path: <address@hidden>
+Envelope-to: address@hidden
+Delivery-date: Sun, 11 Feb 2007 14:48:08 -0500
+Received: from karl by fencepost.gnu.org with local (Exim 4.60)
+ (envelope-from <address@hidden>)
+ id 1HGKgC-0000P9-M8
+ for address@hidden; Sun, 11 Feb 2007 14:48:08 -0500
+To: address@hidden
+Message-Id: <address@hidden>
+From: address@hidden (Karl Berry)
+Date: Sun, 11 Feb 2007 14:48:08 -0500
+Subject: GNU package maintenance
+
Index: temail-0query.txt
===================================================================
RCS file: temail-0query.txt
diff -N temail-0query.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ temail-0query.txt 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,131 @@
+[This is generic text to send to prospective (co-)maintainers, that is,
+ before they are appointed. Of course the intro text should be adjusted
+ to suit the case at hand. The crucial thing is that all maintainers
+ must explicitly agree to follow GNU policies.]
+
+Below is our general info on policies and conventions for maintaining
+GNU programs. Please take a look; assuming you're ok with them, we'll
+be glad to officially appoint you the new maintainer.
+
+========================================================================
+Here's the explanation of what it means for a program to be a GNU
+package, which also explains at a general level the responsibilities
+of a GNU package maintainer.
+
+GNU is not simply a collection of useful programs. We started the GNU
+Project with a specific overall goal: to create a free software
+operating system, the GNU System. To keep the GNU system technically
+coherent, we make sure that the parts fit well together.
+
+Thus, becoming a GNU maintainer is a somewhat formal process, since
+affiliating with the GNU project as a maintainer means you must agree to
+work (within the confines of the maintenance) with the GNU project's
+mission for software freedom.
+
+Here is the basic explanation.
+
+======================================================================
+Making a program GNU software means that its developers and the GNU
+project agree that "This program is part of the GNU project, released
+under the aegis of GNU"--and say so in the program.
+
+The GNU Project appoints package maintainers--initially the main
+developers, or those of them who wish to be appointed--to take
+responsibility for the package on the behalf of the GNU project. We
+hope it won't happen, but if they step down, we look for other
+maintainers. The program remains a GNU package unless/until the GNU
+project decides to drop ties with it.
+
+Being a GNU package means we normally put the program on ftp.gnu.org
+(although we can instead refer to your choice of ftp site, as long as
+it allows connections from anyone anywhere).
+
+The official site for the GNU package should be on www.gnu.org,
+specifically in /software/PROGRAMNAME. Whenever you give out the URL
+for the package home page, you would give this address. It is ok to
+use another site for secondary topics, such as pages meant for people
+helping develop the package, and for running data bases. (We can make
+an exception, and put the web pages somewhere else, if there is a
+pressing reason.)
+
+It means that the developers agree to pay attention to making the
+program work well with the rest of the GNU system--and conversely that
+the GNU project will encourage other GNU maintainers to pay attention
+to making their programs fit in well with it.
+
+Just what it means to make programs work well together is mainly a
+practical matter that depends on what the program does. But there are
+a few general principles. Certain parts of the GNU coding standards
+directly affect the consistency of the whole system. These include
+the standards for configuring and building a program, and the
+standards for command-line options. It is important to make all GNU
+programs follow these standards, where they are applicable.
+
+Another important GNU standard is that GNU programs should come with
+documentation in Texinfo format. That is the GNU standard
+documentation format, and it can be converted automatically into
+various other formats. You can use DocBook format or another suitable
+format for the documentation sources, as long as converting it
+automatically into Texinfo gives good results.
+
+If a GNU program wants to be extensible, it should use Guile
+(https://www.gnu.org/software/guile/guile.html) as the programming
+language for extensibility, if possible. For some programs there's a
+reason to do things differently, but please use Guile if that is
+feasible.
+
+A GNU program should use the latest version of the license that the
+GNU Project recommends--not just any free software license. For most
+packages, this means releasing under the GNU GPL, "version 3 or later."
+
+A GNU program should not recommend use of any non-free program, and it
+should not refer the user to any non-free documentation for free
+software. The campaign for free documentation to go with free
+software is a major focus of the GNU project (see
+https://www.gnu.org/philosophy/free-doc.html); to show that we are
+serious about it, we must not undermine our position by recommending
+documentation that isn't free.
+
+Occasionally there are issues of terminology which are important for
+the success of the GNU project as a whole. So we expect maintainers
+of GNU programs to follow them. For example, the documentation files
+and comments in the program should speak of GNU/Linux systems, rather
+than calling the whole system "Linux", and should use the term "free
+software" rather than "open source". Since a GNU program is released
+under the auspices of GNU, it should not say anything that contradicts
+the GNU Project's views.
+
+For a program to be GNU software does not require transferring
+copyright to the FSF; that is a separate question. If you transfer
+the copyright to the FSF, the FSF will enforce the GPL for the program
+if someone violates it; if you keep the copyright, enforcement will be
+up to you.
+
+As the GNU maintainer of the package, please make sure to stay in
+touch with the GNU Project. If we come across a problem relating to
+the package, we need to tell you about it, and to discuss with you how
+to solve it. Sometimes we will need to ask you to work with other
+maintainers to solve a problem that involves using multiple packages
+together. This probably will happen less than once a year, but please
+make sure we can contact you in case it does happen.
+
+Finally, if you decide to step down as maintainer at any time, please
+inform us (see https://www.gnu.org/prep/maintain/html_node/Stepping-Down.html).
+
+More details are available in these documents:
+ Information For Maintainers of GNU Software:
+ https://www.gnu.org/prep/maintain/
+
+ GNU Coding Standards:
+ https://www.gnu.org/prep/standards/
+
+For the basic ideas of GNU and free software, please read these essays:
+ https://www.gnu.org/gnu/the-gnu-project.html
+ https://www.gnu.org/philosophy/free-sw.html
+ https://www.gnu.org/philosophy/categories.html
+ https://www.gnu.org/philosophy/compromise.html
+ https://www.gnu.org/philosophy/words-to-avoid.html
+ https://www.gnu.org/gnu/linux-and-gnu.html
+ https://www.gnu.org/gnu/gnu-linux-faq.html
+ https://www.gnu.org/philosophy/open-source-misses-the-point.html
+========================================================================
Index: gm-generate.pl
===================================================================
RCS file: gm-generate.pl
diff -N gm-generate.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gm-generate.pl 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,447 @@
+# $Id: gm-generate.pl,v 1.1 2019/05/11 10:44:52 ineiev Exp $
+# The generate actions for the gm script (see --help message).
+#
+# Copyright 2007, 2008, 2009, 2010, 2012, 2013, 2014
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+
+
+
+# Return doc links for all packages. The result is included in
+# http://www.gnu.org/manual/manual.html via SSI.
+#
+sub generate_logos_html {
+ my $autostamp = &generated_by_us ();
+ my @ret = ("<!-- File $autostamp -->");
+ push (@ret, "<table>");
+
+ my %pkgs = &read_gnupackages ();
+ for my $pkgname (sort keys %pkgs) {
+ next if &skip_pkg_p ($pkgname);
+ my $logo = $pkgs{$pkgname}->{"logo"};
+ next unless $logo;
+
+ push (@ret, qq!<tr><td><a href="/software/$pkgname/">$pkgname</a></td>!);
+ push (@ret, qq! <td><img alt="$pkgname"
src="/graphics/pkg-logos-250x100/$pkgname.250x100.png" /></td></tr>\n!);
+ }
+
+ push (@ret, "</table>");
+ push (@ret, "<!-- End file $autostamp -->");
+
+ return @ret;
+}
+
+
+
+# Return all packages with all their maintainers, one package per
+# line, like the original format of the maintainers file. We run this
+# from cron.
+#
+sub generate_maintainers_bypackage {
+ my @ret = ();
+
+ my %pkgs = &read_maintainers ("by-package");
+
+ for my $p (sort { lc($a) cmp lc($b) } keys %pkgs) {
+ my ($entries,$generic_entry,$uploaders) = &maintainer_email_addrs
($pkgs{$p});
+
+ # might not be anything in @entries if the only maintainer was generic.
+ push (@ret, "$p - $entries") if $entries;
+
+ # if we had a generic maintainer for this package, add that as a
+ # separate entry, since that's the way rms wants it.
+ push (@ret, "$p (generic) - $generic_entry") if $generic_entry;
+
+ # if there are named uploaders (distinct from maintainers), add
+ # them under a separate entry
+ push (@ret, "$p (uploaders) - $uploaders") if $uploaders;
+ }
+
+ return @ret;
+}
+
+
+
+# Return doc links for all packages. The result is included in
+# www.gnu.org/manual/manual.html via SSI.
+#
+sub generate_manual_html {
+ my $autostamp = &generated_by_us ();
+ my @ret = ("<!-- File $autostamp -->");
+
+ # we want to output by category, so keep a hash with category names
+ # for keys, and lists of package references for values.
+ my %cat;
+
+ my %pkgs = &read_gnupackages ();
+
+ # Sort packages into their categories.
+ for my $pkgname (sort keys %pkgs) {
+ next if &skip_pkg_p ($pkgname);
+ my %p = %{$pkgs{$pkgname}};
+
+ my $short_cat = $p{"doc_category"};
+ if (! $short_cat) {
+ warn (&gnupkgs_msg ("lacks doc_category\n", %p));
+ next;
+ }
+
+ # Append to the list of packages for this category.
+ my @x = exists $cat{$short_cat} ? @{$cat{$short_cat}} : ();
+ push (@x, \%p);
+ $cat{$short_cat} = address@hidden;
+ }
+
+ # show list of all categories at top
+ push (@ret, &output_category_list (%cat));
+
+ push (@ret, "<table>");
+ push (@ret, qq!<col width="24%" />!); # <td width=...> disallowed in XHTML.
+ push (@ret, qq!<col width="74%" />!);
+
+ # Sort first by full category name, since the abbreviations sometimes
+ # start with a completely different string (Libraries -> Software
+ # libraries). Then, for each category, sort list of packages and output.
+ #
+ for my $short_cat (sort by_full_cat keys %cat) {
+ my ($full_cat,$cat_url) = @{ &read_doc_categories ($short_cat) };
+
+ push (@ret, &output_cat ($short_cat, $full_cat, $cat_url));
+
+ # For each package ...
+ for my $pkg_ref (sort by_pkgname @{$cat{$short_cat}}) {
+ my %p = %$pkg_ref;
+ my ($doc_url,$doc_summary) = ($p{"doc_url"}, $p{"doc_summary"});
+ if (! $doc_url || ! $doc_summary) {
+ warn (&gnupkgs_msg ("lacks doc_(url|summary)\n", %p));
+ next;
+ }
+
+ # convert the doc-url value to a hash of manuals and urls.
+ my $pkgname = $p{"package"};
+ my $home_url = "/software/$pkgname/";
+
+ my %doc_urls = &find_doc_urls ($pkgname, $p{"doc_url"});
+
+ # if there was no explicit url for the package, use the home page.
+ if (! exists ($doc_urls{$pkgname})) {
+ $doc_urls{$pkgname} = $home_url;
+ }
+
+ # have to replace & with & for XHTML.
+ for my $manual (keys %doc_urls) {
+ (my $doc_url_xhtml = $doc_urls{$manual}) =~ s,\&,\&,g;
+ $doc_urls{$manual} = $doc_url_xhtml;
+ }
+
+ # start building output string for this package.
+ # first column is the package name and additional manuals.
+ # Add an id for each package for easy linking;
+ # but XHTML, as usual, introduces gratuitious problems.
+ my $xhtml_id = &xhtml_id ($pkgname);
+ my $str = qq!\n<tr id="$xhtml_id"><td>* !;
+
+ # the main package identifier and its doc url. If we have a
+ # mundane name, use it. Otherwise, prettify the pkg identifier.
+ my $human_label = $p{"human_label"};
+ $str .= qq!<a href="$doc_urls{$pkgname}">$human_label</a>!;
+
+ # followed by other manual identifiers if present.
+ my @more_manuals = ();
+ for my $manual (keys %doc_urls) {
+ next if $manual eq $pkgname; # already took care of that
+ push (@more_manuals,
+ sprintf (qq!<a href="%s">$manual</a>!, $doc_urls{$manual}));
+ }
+ if (@more_manuals) {
+ $str .= "\n<small>(";
+ $str .= join ("\n ", sort @more_manuals);
+ $str .= ")</small>\n";
+ }
+ $str .= "</td>\n";
+
+ # Second column is the package synopsis, any shop url's, and
+ # the package home page.
+ my $summary = "$doc_summary."; # yep, add period
+ my $shop = &find_shop_urls (%p);
+ my $home = qq!\n [<a href="$home_url">$pkgname home</a>]!;
+
+ $str .= qq! <td>$summary$shop$home!;
+ $str .= "</td></tr>";
+
+ push (@ret, $str);
+ }
+ }
+ push (@ret, "</table>");
+
+ # show list of categories again at the end:
+ push (@ret, &output_category_list (%cat));
+
+ push (@ret, "<!-- End file $autostamp -->");
+
+ return @ret;
+
+
+ # HTML output for the beginning of each doc category --
+ # the table row with the text, a header, a link. The padding-top
+ # leaves a bit of extra space above the header, and padding-left moves
+ # the header right to straddle the columns.
+ #
+ sub output_cat {
+ my ($short_cat,$full_cat,$cat_url) = @_;
+ my $css = qq!style="padding-top:.8em; padding-left:16%;"!;
+ my $ret = "\n\n<tr>\n";
+ $ret .= qq!<td id="$short_cat" colspan="2" $css>!;
+ $ret .= qq!<a href="$cat_url">! if $cat_url;
+ $ret .= "<big><b>$full_cat</b></big>";
+ $ret .= "</a>" if $cat_url;
+ $ret .= "</td></tr>";
+ return $ret;
+ }
+
+ # given two package references, compare their names (for sorting).
+ sub by_pkgname { $a->{"package"} cmp $b->{"package"}; }
+
+ # given two short categories, compare their full names (for sorting).
+ sub by_full_cat { &full_category ($a) cmp &full_category ($b); }
+
+ # return just the full category name for SHORT_CAT.
+ sub full_category {
+ my ($short_cat) = @_;
+ my ($full,undef) = @{ &read_doc_categories ($short_cat) };
+ return $full;
+ }
+
+ # return string with all categories as links, as a sort of toc.
+ sub output_category_list {
+ my (%cat) = @_;
+ my $ret = "<p>\n";
+
+ for my $short_cat (sort by_full_cat keys %cat) {
+ my ($full_cat,$cat_url) = &full_category ($short_cat);
+ $full_cat =~ s/ /\ /g; # no spaces in the category name here
+ $ret .= qq!<a href="#$short_cat">$full_cat</a> -\n!;
+ }
+
+ $ret .= "</p>\n";
+ return $ret;
+ }
+
+ # interpret the doc-url value, return hash where keys are manual
+ # identifiers and values are their urls.
+ #
+ sub find_doc_urls {
+ my ($pkgname,$doc_url_val) = @_;
+ my %ret;
+
+ my @vals = split (/\|/, $doc_url_val); # result of parsing is | separators
+ for my $val (@vals) {
+ if ($val eq "none") {
+ ; # nothing to return, let caller handle it.
+
+ } elsif ($val eq "htmlxref") {
+ my %htmlxref = &read_htmlxref ($pkgname);
+ for my $manual (keys %htmlxref) {
+ # do not overwrite a url from gnupackages for the main package
+ # name with one from the htmlxref. Instead, add junk to make
+ # the htmlxref manual have a different key. We don't want to
+ # lose it, since if we have a general entry for "Texinfo"
+ # (pointing to all its manuals), say, it's still useful to
+ # have the direct link to the "texinfo" manual specifically.
+ # Since we uppercase the main label, they're visually
+ # distinct, too.
+ #
+ if ($manual eq $pkgname && exists $ret{$pkgname}) {
+ $ret{"$manual<!-- again -->"} = $htmlxref{$manual}
+ } else {
+ # otherwise, take what we are given.
+ $ret{$manual} = $htmlxref{$manual};
+ }
+ }
+
+ } else {
+ warn "$pkgname: overwriting first doc_url value ($ret{$pkgname}) "
+ . "with $val" # source file should not do this.
+ if (exists $ret{$pkgname});
+ $ret{$pkgname} = $val; # always prefer url given in gnupackages.
+ }
+ }
+ return %ret;
+ }
+
+ # Handle FSF shop references. We assume they come in pairs:
+ # description in one entry and url in the next. We return the HTML to
+ # insert in the output, or the empty string.
+ #
+ sub find_shop_urls {
+ my (%pkg) = @_;
+ my $ret;
+ my @shop = split (/\|/, $pkg{"doc_shop"});
+ if (@shop) {
+ $ret = "\n <br/>Available in print:";
+ # keep same ordering as input.
+ my @books = ();
+ for (my $i = 0; $i < @shop; $i += 2) {
+ my $title = $shop[$i];
+ my $url = $shop[$i+1];
+ if ($url !~ /https?:/) {
+ warn (&gnupkgs_msg ("doc_shop url lacks http (misordered?)\n",%pkg));
+ }
+ push (@books, qq!\n <cite><a href="$url">$title</a></cite>!);
+ }
+ $ret .= join (",", @books);
+ $ret .= ".";
+ } else {
+ $ret = "";
+ }
+ return $ret;
+ }
+}
+
+
+
+# Return all packages as relative HTML links to directories by the
+# package name. We carefully maintain http://www.gnu.org/software/
+# so this works. Use the simple pkgname/ directory, since nothing else
+# (neither /index.html nor /pkgname.html) always works.
+#
+sub generate_packages_html {
+ my $autostamp = &generated_by_us ();
+ my @ret = ("<!-- File $autostamp -->");
+
+ my %pkgs = &read_gnupackages ();
+ for my $pkgname (sort keys %pkgs) {
+ next if &skip_pkg_p ($pkgname);
+ push (@ret, qq!<a href="$pkgname/">$pkgname</a> !);
+ }
+
+ push (@ret, "<!-- End file $autostamp -->");
+ return @ret;
+}
+
+
+# Return HTML-formatted blurbs about the packages for the featured
+# package on http://www.gnu.org.
+#
+sub generate_blurbs_html {
+ my $autostamp = &generated_by_us ();
+ my @ret = ("<!-- File $autostamp -->");
+
+ # so we can cross-check blurbs against packages.
+ my %gnupkgs = &read_gnupackages ();
+
+ my %pkgs = &read_pkgblurbs ();
+ for my $pkgname (sort keys %pkgs) {
+ next if &skip_pkg_p ($pkgname);
+
+ my %pkg = %{ $pkgs{$pkgname} };
+ my $msgprefix = "$PKGBLURBS_FILE:$pkg{lineno}";
+ warn "$msgprefix: $pkgname not in gnupackages\n"
+ if ! exists $gnupkgs{$pkgname};
+ #
+ # Retrieve info from packages file.
+ my $pkglabel = $gnupkgs{$pkgname}->{"human_label"};
+ my $pkgactivity = $gnupkgs{$pkgname}->{"activity_status"};
+ my $pkglogo = $gnupkgs{$pkgname}->{"logo"};
+ delete $gnupkgs{$pkgname}; # so we can see what's left over
+
+ # we intentionally omit blurbs for some packages.
+ next if $pkg{"blurb"} =~ /^null/;
+
+ # Need the anchor version of the package name for the links.
+ my $xhtml_id = &xhtml_id ($pkgname);
+
+ # Need the regexp-safe version of the package name for the SSI (for gtk+).
+ my $rxsafe_id = quotemeta ($pkgname);
+ $rxsafe_id =~ s,\\-,-,g; # \- troubles ineiev's request-blurbs
+
+ # This ssi stuff lets the homepage extract a single blurb to display.
+ push (@ret, qq,\n<!--,
+ . qq,#if expr="\$pkg_selection = /:($rxsafe_id|ALL):/" -->,);
+
+ # Include the package logo (scaled) in the head, if there is one.
+ $logo_xhtml = $pkglogo
+ ? qq!\n <img src="/graphics/pkg-logos-250x100/$pkgname.250x100.png"
style="height:1.3em"\n!
+ . qq! alt="logo for $pkgname" />!
+ : "";
+
+ # Note for translators if the package is stale.
+ my $stale_comment = "";
+ $stale_comment = "<!-- TRANSLATORS: stale -->" if $pkgactivity =~ /^stale/;
+
+ # Include it in both HTML elements so that, e.g., msggrep can be used.
+ push (@ret, qq,<h4 id="$xhtml_id">,
+ . qq,$stale_comment,
+ . qq,$logo_xhtml,
+ . qq,\n <a href="/software/$pkgname/">$pkglabel</a></h4>,
+ . ($stale_comment ? "\n" : "")
+ . qq,<p>$stale_comment,);
+
+ my $blurb = $pkg{"blurb"};
+ # a very short blurb should be a redirect, since we already skipped null.
+ if (length ($blurb) < 70) {
+ my @words = split (" ", $blurb);
+ if ($words[0] eq "redirect") {
+ my $target = &xhtml_id ($words[1]);
+ if (length ($target) <= 1) {
+ warn "$msgprefix: redirection target too short: $target\n";
+ next;
+ }
+ push (@ret, qq!See <a href="#$target">$target</a>.!);
+ } else {
+ warn "$msgprefix: unexpectedly short blurb: $words[0]\n";
+ next;
+ }
+
+ } else { # normal blurb
+ $blurb =~ s/\&/\&/g;
+ $blurb =~ s/</\</g;
+ $blurb =~ s/>/\>/g;
+
+ # "..." typically is best rendered in typewriter.
+ $blurb =~ s,"(.*?)",<tt>$1</tt>,g;
+ $blurb =~ s/"/\"/g; # quote any stray "
+
+ $blurb =~ s/'/\'/g; # be sure we can quote text for shell
+ chomp ($blurb = `echo '$blurb' | fmt`);
+ $blurb =~ s/\'/'/g; # convert apostrophe back for translators
+ push (@ret, $blurb);
+ }
+
+ # let's advertise if the package is looking for a maintainer. maybe
+ # we'll find someone.
+ push (@ret, "This package is looking for a maintainer.")
+ if $pkgactivity =~ /^nomaint/;
+
+ my $doc_links = "/manual/manual.html#$xhtml_id";
+ push (@ret, qq!<small>(<a href="$doc_links">doc</a>)!
+ . qq!</small></p>!);
+
+ push (@ret, "<!--#endif -->");
+ }
+
+ # make sure we've covered every package.
+ for my $leftover (sort keys %gnupkgs) {
+ next if &skip_pkg_p ($leftover);
+ warn "$PKGBLURBS_FILE:1: $leftover missing\n";
+ }
+
+ push (@ret, "\n<!-- End file $autostamp -->");
+ return @ret;
+}
+
+1;
Index: howto-spotlight.txt
===================================================================
RCS file: howto-spotlight.txt
diff -N howto-spotlight.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ howto-spotlight.txt 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,117 @@
+$Id: howto-spotlight.txt,v 1.1 2019/05/11 10:44:52 ineiev Exp $
+ Copyright 2015 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
+
+Notes on making the spotlight feature for the Free Software Supporter.
+The general idea is to make markdown text and send it to
address@hidden, around the 23rd of each month.
+
+This is all pretty randomly messy. The process never seemed worth
+refining, in light of who runs it and how often and that the final
+result needs to be carefully read anyway. Of course all aspects can be
+tinkered with ad infinitum.
+
+-------------------------------------------------------------------------
+Top level outline, with more about the prerequisites following:
+
+1. Run the hacky little script below, call it gnubytime for the sake of
+example, which reads a previously-saved rsync listing of
+ftp.gnu.org::gnu, call that fp.gnu for the sake of example. As in:
+ gnubytime fp.gnu >/tmp/s0
+
+2. Throw away everything after the latest release from the previous
+month, which just needs to be tracked in a working file somewhere. For
+example, in February 2015 the latest release was parallel-20150222, so
+March 2015 should include everything after that.
+
+3. Reduce the list to just unique package names, as in:
+sed 's,^.*/,,' /tmp/s0 | sort -u >/tmp/s1
+
+4. Remove things we don't want to list here, such as aspell
+dictionaries, test releases (wrongly) put on ftp.gnu.org,
+and plenty more.
+
+5. Look at the info-gnu mailing list archives from
+ftp://lists.gnu.org/info-gnu/ for the current month and the previous
+month for releases not on ftp.gnu.org. Add those by hand to /tmp/s1
+(and resort). gnupg and related are the most likely. Looking at the
+Subject: lines suffices.
+
+6. Convert the result to markdown with the one-line gnu2mdwn script below:
+gnu2mdwn /tmp/s1 >/tmp/s2
+
+7. Check that the result is actually correct, e.g., does not have version
+numbers in the urls, has correct package names in the urls. Especially
+when there are dashes in either the package name or release version.
+
+8. Look at ./spotlight.tmpl in this womb/gnumaint directory. The markdown
+list from /tmp/s2 goes at the top. Also replace the NN and DD and YY in
+the first line.
+
+9. The list of people to welcome as new maintainers or as maintaining
+new packages comes from fp:~karl/src/gnumaint/activity-report.txt. That
+file needs to be maintained in place, by hand, whenever a maintainer or
+package is added or removed, as noted in /gd/gnuorg/README.
+
+10. Send to the FSF as above.
+
+11. Update the new "latest release" wherever that info is stored.
+And, although not strictly necessary, keeping an archive of all
+spotlights as sent can be useful for quickly looking at past entries.
+
+-------------------------------------------------------------------------
+In step 1, the rsync listing can be generated like this:
+
+outfile=fp.gnu # or whatever
+excludes="--exclude=*.sig \
+ --exclude=video/TIME --exclude=find.txt.gz --exclude=ls-l*.txt.gz \
+ --exclude=gnu-keyring.gpg"
+rsync --no-h -r $excludes fp:/srv/data/ftp-mirror/ftp/ \
+ | egrep -v '^[dl]' \
+ >$outfile.new
+...
+mv $outfile.new $outfile
+
+By the way, this same rsync listing is intended to be the source for the
+ftplisting check in gm-check.pl.
+
+Also, this same rsync listing can be the source for updating release
+information in gnupackages.txt, as they come through. For that
+
+-------------------------------------------------------------------------
+Still in step 1, the "hacky little script" (gnubytime) is as follows.
+
+#!/usr/bin/env perl
+# ftp releases by time,via rsync listing.
+# -rw-r--r-- 918 2002/01/14 14:28:56 .message
+
+$ARGV[0] = "/u/karl/sys/ftp/fp.gnu" unless @ARGV;
+
+while (<>) {
+ next if / -> /;
+ next if /\.(diff|xdelta)\./;
+ next if /snapshot\.pkg/;
+ next if /\.darwin/;
+ next if /-latest/;
+ next if /\.sig/;
+ next unless /\.[tj]ar\./;
+ my (undef,undef,$date,undef,$pkg) = split (" "); # rsync
+ # my ($date,undef,$pkg) = split (" "); # ftp
+ $date =~ tr,-/,,d;
+ $pkg{$pkg} = $date;
+}
+
+for my $p (sort { $pkg{$b} <=> $pkg{$a} } keys %pkg) {
+ ($pfile = $p) =~ s/\.tar\..*$//;
+ print "$pkg{$p}\t$pfile\n";
+}
+-------------------------------------------------------------------------
+In step 6, the gnu2mdwn script is:
+
+#!/bin/sh
+sed \
+ -e 's,\(.*\)-\([^-]*\),* [\1-\2](http://www.gnu.org/software/\1/),' \
+ "$@"
Index: .cvsignore
===================================================================
RCS file: .cvsignore
diff -N .cvsignore
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ .cvsignore 11 May 2019 10:44:52 -0000 1.1
@@ -0,0 +1,13 @@
+ChangeLog
+activity-report.txt
+copyright-papers.txt
+pkgblurbs.txt
+gnupackages.txt
+m.test
+msg.*
+*.mbox*
+*.log*
+pkgnames.frommaint
+pkgnames.fromdir
+fsd
+pkglist-*.txt
Index: nonpackages.txt
===================================================================
RCS file: nonpackages.txt
diff -N nonpackages.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ nonpackages.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,16 @@
+# $Id: nonpackages.txt,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Public domain.
+#
+# This file records information about software that is not an official
+# GNU package on its own, but we want to automatically generate entries
+# about it anyway. There is nothing private in this file.
+
+package: gnus
+doc-category: Email
+doc-summary: Emacs-based mail and news reader.
+
+package: mh-e
+doc-category: Email
+doc-summary: Emacs interface to the MH mail system.
+
+# End. (Do not remove this line or the blank line before it. Thanks.)
Index: testaddrangle.msg
===================================================================
RCS file: testaddrangle.msg
diff -N testaddrangle.msg
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testaddrangle.msg 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,14 @@
+From address@hidden Sun Feb 11 14:48:08 2007
+Return-path: <address@hidden>
+Envelope-to: address@hidden
+Delivery-date: Sun, 11 Feb 2007 14:48:08 -0500
+Received: from karl by fencepost.gnu.org with local (Exim 4.60)
+ (envelope-from <address@hidden>)
+ id 1HGKgC-0000P9-M8
+ for address@hidden; Sun, 11 Feb 2007 14:48:08 -0500
+To: address@hidden
+Message-Id: <address@hidden>
+From: <address@hidden>
+Date: Sun, 11 Feb 2007 14:48:08 -0500
+Subject: GNU package maintenance
+
Index: testjunk1.msg
===================================================================
RCS file: testjunk1.msg
diff -N testjunk1.msg
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testjunk1.msg 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,15 @@
+From address@hidden Sun Feb 11 14:48:08 2007
+Return-path: <address@hidden>
+Envelope-to: address@hidden
+Delivery-date: Sun, 11 Feb 2007 14:48:08 -0500
+Received: from karl by fencepost.gnu.org with local (Exim 4.60)
+ (envelope-from <address@hidden>)
+ id 1HGKgC-0000P9-M8
+ for address@hidden; Sun, 11 Feb 2007 14:48:08 -0500
+To: address@hidden
+Message-Id: <address@hidden>
+From: Karl Berry <address@hidden>
+Date: Sun, 11 Feb 2007 14:48:08 -0500
+
+karl fencepost Sun Feb 11 14:48:08 EST 2007
+
Index: howto-decommission.txt
===================================================================
RCS file: howto-decommission.txt
diff -N howto-decommission.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ howto-decommission.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,30 @@
+$Id: howto-decommission.txt,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+ Copyright 2013, 2014, 2015 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
+
+Notes on what to do when a package becomes unmaintained or
+decommissioned.
+
+unmaintained:
+ for the new maintainer to do: look at mailing list archives,
+ any todo files, good to make quick release.
+ try writing mlist if there is one.
+ update: package web page - takeaction.html - www.gnu.org home page
+ on savannah: status=orphaned; note in summary; post job.
+ (in more detail, see fp:/gd/gnuorg/README)
+
+decommissioned:
+ maintainers - activity-report.txt
+ - gnupackages.rec,pkgblurbs.rec -> oldpackages.txt;
+ then regenerate autopackage lists (see Makefile and howto-commission.txt)
+ - address@hidden ftp.gnu.org dir to old-gnu
+ - lists: advertised=no, mv domains/gnu.org ...
+ - project home page: Add a prominent notice stating that the package is
decommissioned.
+ - add to list of old packages on software.html - webpages
+ - savannah: status=orphaned; note in summary.
+
+When a maintainer resigns, implicitly or explicitly, the story is
+similar; see /gd/gnuorg/README.
Index: maintfileupgrade
===================================================================
RCS file: maintfileupgrade
diff -N maintfileupgrade
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ maintfileupgrade 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,221 @@
+#!/usr/bin/env tclsh
+#
+# maintfileupgrade - GNU maintainers file upgrade to new format
+#
+# Copyright 2007 Free Software Foundation Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+
+###
+### Global variables
+###
+
+set first_page_contents {}
+
+set contact_regexp {(?x)
+ # A regexp to match contact information
+ ^([^<(]*) # The name of the contact (optional)
+ (<address@hidden@[^>]+?>)? # The email of the contact (optional)
+ ((?:.+))?$ # Notes about the contact (optional)
+ }
+
+set package_line_regexp {(?x)
+ # A regexp to match a package description line
+ ^
+ ([^(]+) # The name of the package
+ ((?:.+))? # Package comments (optional)
+ \ - # Separator: " -"
+ (.*) # Contacts information (see above)
+ $
+ }
+
+set maintainers_file {}
+set maintainersdb {}
+
+
+###
+### Code
+###
+
+proc do_help_usage {} {
+
+ puts {Usage: mfupgrade FILE}
+ puts "Read FILE and convert its contents to the new maintainers format"
+ puts "Dump the new contents on the standard output"
+}
+
+proc parse_contacts {text} {
+
+ global contact_regexp
+
+ set contact_list {}
+
+ foreach scontact [split $text ,] {
+
+ if {![regexp -- $contact_regexp $scontact fullmatch contact_name
contact_email contact_comments]} {
+
+ puts "ERROR: not matching text $scontact"
+ exit 1
+ }
+
+ lappend contact_list [list [string trim $contact_name] \
+ [string trim [string trim [string trim
$contact_email "<"] ">"]] \
+ [string trim [string trim $contact_comments]
{( )}]]
+
+ }
+
+ return $contact_list
+
+}
+
+proc parse_package_line {line} {
+
+ global package_line_regexp
+
+ if {![regexp -- $package_line_regexp $line]} then {
+ # Invalid package line
+ return {}
+ }
+
+ regexp -- $package_line_regexp $line entire_match pkg_name pkg_comments
pkg_contacts
+ #puts "parse: $pkg_name | $pkg_comments | $pkg_contacts"
+ return [list [string trim $pkg_name] \
+ [string trim $pkg_comments] \
+ [parse_contacts [string trim $pkg_contacts]]]
+}
+
+
+proc build_maintainers_db {} {
+
+ global first_page_contents
+ global maintainers_file
+ global maintainersdb
+
+ # Open the maintainers file
+ if {[catch {set finput [open $maintainers_file r]}]} {
+
+ puts "Cannot open the maintainers file $maintainers_file"
+ puts "Aborting"
+ exit 1
+ }
+
+ # Get the first line and collect the info
+ gets $finput line
+ append first_page_contents $line
+ append first_page_contents "\n"
+
+ # Skip until second page
+ while {(![eof $finput]) && ([string index $line 0] != "\f")} {
+ gets $finput line
+ append first_page_contents $line
+ append first_page_contents "\n"
+ }
+ # Consume the ^L
+ if {![eof $finput]} then {
+ gets $finput line
+ }
+
+ # Parse package lines
+ while {(![eof $finput]) && ([string index $line 0] != "\f")} {
+
+ set pkginfo [parse_package_line $line]
+ lappend maintainersdb $pkginfo
+ #puts "lappe: [lindex $pkginfo 1]"
+ gets $finput line
+ }
+
+ # Close the maintainers file
+ close $finput
+}
+
+proc do_convert {} {
+
+ global first_page_contents
+ global maintainersdb
+
+ puts $first_page_contents
+ puts {}
+
+ foreach pkg $maintainersdb {
+ if {[lindex $pkg 2] == ""} then {
+ #puts "regen: [lindex $pkg 0] -- [lindex $pkg 1] -- [lindex $pkg 2]"
+
+ set maintainer_name "Unmaintained"
+ set maintainer_email($maintainer_name) {}
+ set maintainer_notes($maintainer_name) {}
+ lappend maintainer_packages($maintainer_name) [list [lindex $pkg 0]
[lindex $pkg 1]]
+ }
+
+ foreach maintainer [lindex $pkg 2] {
+ set maintainer_name [lindex $maintainer 0]
+ set m_email [lindex $maintainer 1]
+ set m_notes [lindex $pkg 1]
+
+ set maintainer_email($maintainer_name) $m_email
+ set maintainer_notes($maintainer_name) $m_notes
+ lappend maintainer_packages($maintainer_name) [list [lindex $pkg
0] [lindex $pkg 1]]
+ }
+
+
+ }
+
+ set maintainers_name_list [lsort [array names maintainer_email]]
+ foreach maintainer $maintainers_name_list {
+
+ puts "name: $maintainer"
+ puts "email: $maintainer_email($maintainer)"
+
+ foreach pkg $maintainer_packages($maintainer) {
+ puts "package: [lindex $pkg 0]"
+ ;#if {[lindex $pkg 1] != {}} then {
+ ;#puts "note: [lindex $pkg 1]"
+ ;#}
+ }
+
+ if {$maintainer_notes($maintainer) != {}} then {
+ puts "note: $maintainer_notes($maintainer)"
+ }
+
+ puts {}
+ }
+}
+
+proc main {} {
+
+ global argc
+ global argv
+ global maintainers_file
+
+ # Get the maintainers file from arguments
+ if {$argc != 1} then {
+
+ do_help_usage
+ exit 1
+ }
+
+ set maintainers_file [lindex $argv 0]
+ if {![file readable $maintainers_file]} then {
+
+ puts stderr "error: could not open file $maintainers_file"
+ exit 1
+ }
+
+ # Build the maintainers database
+ build_maintainers_db
+
+ # Convert the file
+ do_convert
+}
+
+
+# Call the main routine
+main
+
+# Local Variables:
+# mode: tcl
+# End:
+
+### End of file
Index: massmail-1201-copyright.txt
===================================================================
RCS file: massmail-1201-copyright.txt
diff -N massmail-1201-copyright.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ massmail-1201-copyright.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,34 @@
+From: address@hidden (GNU Project)
+To: %PACKAGE_MAINTAINERS
+Subject: %PACKAGE_NAME and non-FSF-copyrighted code
+Precedence: bulk
+
+Greetings,
+
+I'm sending you this message on behalf of the GNU Project because
+according to the FSF's records, you are the maintainer(s) of
+%PACKAGE_NAME, which is supposed to be an FSF-copyrighted package.
+
+We would like to gather information on any code or other material in
+your package that is *not* copyrighted by the FSF. Could you please
+reply to this message (which should go to address@hidden) and let
+us know? That is, one of:
+
+1) There is no non-FSF-copyrighted material in %PACKAGE_NAME.
+
+2) There is non-FSF-copyrighted code included in %PACKAGE_NAME,
+ per the procedure described in the External Libraries node
+ of the maintainers' guide:
+ http://www.gnu.org/prep/maintain/html_node/External-Libraries.html
+
+3) Something else.
+
+Please include any and all relevant details.
+
+(Aside from this, if you have any news or questions regarding the
+package, please let us know at address@hidden)
+
+Thanks for contributing to GNU, and happy hacking.
+
+Karl Berry
+Assistant Chief GNUisance
Index: testaddr+real.msg
===================================================================
RCS file: testaddr+real.msg
diff -N testaddr+real.msg
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testaddr+real.msg 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,14 @@
+From address@hidden Sun Feb 11 14:48:08 2007
+Return-path: <address@hidden>
+Envelope-to: address@hidden
+Delivery-date: Sun, 11 Feb 2007 14:48:08 -0500
+Received: from karl by fencepost.gnu.org with local (Exim 4.60)
+ (envelope-from <address@hidden>)
+ id 1HGKgC-0000P9-M8
+ for address@hidden; Sun, 11 Feb 2007 14:48:08 -0500
+To: address@hidden
+Message-Id: <address@hidden>
+From: Karl Berry <address@hidden>
+Date: Sun, 11 Feb 2007 14:48:08 -0500
+Subject: GNU package maintenance
+
Index: sendmaintmail
===================================================================
RCS file: sendmaintmail
diff -N sendmaintmail
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ sendmaintmail 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,123 @@
+#!/usr/bin/env perl
+# $Id: sendmaintmail,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Send or refrain from sending a message to a maintainer.
+#
+# Copyright 2007 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+#
+# If the email address is recent enough in activity-report.txt, omit.
+# If the package is recent enough in activity-report.txt, omit.
+# If the package is in recentrel.txt, omit.
+# Otherwise send.
+#
+# When we omit, we write a short string to stdout describing why.
+# When we send, we write nothing to stdout.
+# (The TCL exec function works most naturally this way.)
+#
+# Although we could of course do the filtering in gnumaint, it was
+# easier for me to implement it in this separate script.
+
+exit (&main ());
+
+sub main
+{
+ my ($maint_email, $pkgref, @msg) = &read_msg ();
+ my @maint_pkgs = @$pkgref;
+
+ # Check if any of these package names appear in the recently-released file.
+ # If so, we're done.
+ chomp (my @recent_rel = `cat recentrel.txt`);
+ #
+ for my $p (@maint_pkgs) {
+ if (grep { $_ eq $p } @recent_rel) {
+ print "recent release of $p\n";
+ return 0;
+ }
+ }
+
+ # Check if either the maintainer email or any package occurs
+ # recently enough in activity-report.txt.
+ #
+ my $now = time ();
+ my $cutoff = $now - 512 * 24 * 60 * 60; # don't bother them for 512 days
+ #warn "cutoff seconds: $cutoff\n";
+ #
+ chomp (my @activity = `cat activity-report.txt`);
+ @activity = reverse @activity; # newest first
+ #
+ for my $a (@activity) {
+ my ($name, $email,$pkg,$time) = split (/\|/, $a);
+ next unless $time; # last_sendemail has two fields
+ $time =~ tr/./ /; # date -d wants a space between date and time
+ substr ($time,13,2) = ""; # wipe out seconds, date -d can't handle
+ chomp (my $seconds = `date +%s -d "$time"`);
+ last if $seconds < $cutoff;
+
+ #warn "checking $email|$pkg|$seconds\n";
+ if ($email eq $maint_email) {
+ print "recent activity for $email/$pkg\n";
+ return 0;
+ } elsif (grep { $_ eq $pkg } @maint_pkgs) {
+ print "recent activity for $pkg/$email\n";
+ return 0;
+ }
+ }
+
+ #warn "would send mail";
+ local *SENDMAIL;
+# $SENDMAIL = "|/usr/lib/sendmail -t";
+ $SENDMAIL = "|cat >>/tmp/xyz";
+ open (SENDMAIL) || die "open($SENDMAIL) failed: $!";
+ print SENDMAIL @msg;
+ close (SENDMAIL) || warn "close($SENDMAIL) failed: $!";
+
+ return 0;
+}
+
+
+# return maintainer email, package list reference, and original message
+# from msg on stdin.
+#
+sub read_msg
+{
+ my @msg = ();
+ my ($to,$subject);
+ for my $line (<>) {
+ push (@msg, $line);
+ ($to = $line) =~ s/^To: // if $line =~ /^To: /;
+ ($subject = $line) =~ s/^Subject: // if $line =~ /^Subject: /;
+ }
+
+ die "no To: in @msg\n" unless $to;
+ die "no Subject: in @msg\n" unless $subject;
+ chomp ($to);
+ chomp ($subject);
+ #warn "found $to, $subject\n";
+
+ # extract package names from subject, which looks like this:
+ # Subject: GNU package maintenance: a and b
+ # or
+ # Subject: GNU package maintenance: a, b and c
+ $subject =~ s/^.*: *//;
+ $subject =~ s/ and /, /;
+ my @pkgs = split (/, /, $subject);
+ #warn "pkgs @pkgs from $subject";
+
+ # We can assume the maintainer email is just the value of the To:
+ # header, since we generated it ourselves in gnumaint.
+ return ($to, address@hidden, @msg);
+}
Index: massmail-0705-active.txt
===================================================================
RCS file: massmail-0705-active.txt
diff -N massmail-0705-active.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ massmail-0705-active.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,31 @@
+GNU package maintenance: %PACKAGE_LIST
+
+Have I reached %MAINTAINER_NAME?
+(My apologies if this message reaches you in error.)
+
+fmt:I'm sending you this message on behalf of the GNU Project because
+fmt:you're listed as the maintainer of the GNU %PLURAL_PACKAGE %PACKAGE_LIST.
+fmt:We would like to verify that you're still there, and still reachable at
+fmt:the address we have, %MAINTAINER_EMAIL.
+
+If all of that is correct, please just reply to this message.
+That will confirm that you got it, that you're still maintaining
+%PLURAL_THIS_PACKAGE, and that the address we used is still good.
+
+If you are no longer maintaining the %PLURAL_PACKAGE, or your preferred
+email address has changed, or there's anything else you think we should
+know, please send mail to address@hidden so we can update our
+records.
+
+We'd also like to collect package maintainers' postal addresses and
+phone numbers, so that if email addresses stop working, we have some
+backup. Would you please mail that contact information to
address@hidden so we can note it down?
+
+If you have any news or questions regarding your GNU %PLURAL_PACKAGE,
+please let us know. address@hidden is the address for that too.
+
+Thanks for contributing to GNU, and happy hacking.
+
+Karl Berry
+Assistant Chief GNUisance
Index: gm-check.pl
===================================================================
RCS file: gm-check.pl
diff -N gm-check.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gm-check.pl 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,239 @@
+# $Id: gm-check.pl,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# The check actions for the gm script (see --help message).
+#
+# Copyright 2007, 2008, 2009, 2010, 2012, 2013
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+
+
+
+# Return list of packages in the activity report that are not in the
+# maintainers file. (Implementation not finished.)
+#
+sub check_activityfile_ {
+ my @ret = ();
+
+ my %pkgs = &read_maintainers ("by-package");
+ my %maints = &read_maintainers ("by-maintainer");
+
+ my %activity = &read_activity ("by-package");
+
+ for my $ap (sort by_lineno keys %activity) {
+ next if $ap eq "*"; # our last_sendemail placeholder
+ my ($email,$name,$time,$line) = split (/\|/, $activity{$ap});
+
+ push (@ret, "$ACTIVITY_FILE:$line: active package $ap does not exist"
+ . " ($email|$name|$time)")
+ unless exists $pkgs{$ap}; #|| exists $missing_pkg_ok{$ap};
+ }
+ return @ret;
+
+
+ sub by_lineno {
+ my (undef,undef,undef,$aline) = split (/\|/, $activity{$a});
+ my (undef,undef,undef,$bline) = split (/\|/, $activity{$b});
+ $aline <=> $bline;
+ }
+}
+
+
+
+# Return inconsistencies between copyright.list and the
+# copyright-holder: field in gnupackages. There should not be any.
+#
+sub check_fsfcopyright_ {
+ my @ret = ();
+
+ my %pkgs = &read_gnupackages ();
+ my @cl = &list_copyrightfsf_ (0, 1);
+ my %cl;
+ @address@hidden = (); # make hash from list
+
+ for my $cl (keys %cl) {
+ if (! exists $pkgs{$cl}) {
+ # should be caught by daily checks.
+ push (@ret, "$0: FSF-copyrighted $cl missing from $GNUPACKAGES_FILE");
+ next;
+ }
+ my $p = $pkgs{$cl};
+ #&warn_hash ($cl, $p);
+ if ($p->{"copyright-holder"} !~ /^(fsf|see-)/) { # allow redirects too
+ push (@ret, &gnupkgs_msg
+ ("copyright-holder: not fsf, but in copyright.list", %$p));
+ }
+ delete $pkgs{$cl};
+ }
+
+ for my $pkgname (keys %pkgs) {
+ my $p = $pkgs{$pkgname};
+ if ($p->{"copyright-holder"} =~ /^fsf/) {
+ push (@ret, &gnupkgs_msg
+ ("copyright-holder: fsf, but not in copyright.list", %$p));
+ }
+ }
+
+ return @ret;
+}
+
+
+
+# Return list of entries in the ftp listing that are not in the official
+# list of packages. (Implementation not finished.)
+#
+sub check_ftplisting_ {
+ my @ret = ();
+
+ my %pkgs = &read_gnupackages ();
+ my @ftp = &read_ftplisting ();
+
+ # known-unusual entries or aliases under ftp.gnu.org:gnu/.
+ my @special = qw(GNUinfo GNUsBulletins Licenses MailingListArchives
+ MicrosPorts aspell- commonc\+\+ dotgnu flex git glibc
+ non-gnu phantom queue savannah speedx windows);
+
+ for my $f (sort @ftp) {
+ next if exists $pkgs{$f};
+ next if grep { $f =~ /^$_/ } @special;
+ # read oldpackages? next if grep { $f =~ /^$_/ } @old;
+ push (@ret, $f);
+ }
+
+ return @ret;
+}
+
+
+
+# Return list of email addresses or packages in the ftp-upload setup
+# that are not in maintainers.
+#
+sub check_ftpupload_ {
+ my @ret = ();
+
+ my %maint_file = &read_maintainers ("by-package");
+ my %ftpupload_file = &read_ftpupload_email ();
+
+ for my $p (sort keys %ftpupload_file) {
+ # The ftp-upload package itself better be in the maintainers file.
+ # (Many packages do not release through ftp.gnu.org, unfortunately,
+ # so there is no use in worrying about the reverse.)
+ if (! exists $maint_file{$p}) {
+ push (@ret, "$FTPUPLOAD_EMAIL_FILE: not in maintainers: $p");
+ next;
+ }
+
+ # see if we can find each ftp-upload email in maintainers.
+ FTP_EMAIL:
+ for my $ftp_email (split (" ", $ftpupload_file{$p})) {
+
+ # for each maintainer of this package ...
+ my @maint_refs = @{$maint_file{$p}};
+ for my $m (@maint_refs) {
+
+ # for each of the keys that have email values ...
+ for my $mkey ("email", "privateemail", "altemail", "bademail") {
+ my @mval = split (/\|/, $m->{$mkey}); # split multiple vals
+
+ # for each value of this key ...
+ for my $mval (@mval) {
+ if ($mval eq $ftp_email) {
+ if ($mkey eq "bademail") {
+ warn "$p: ftp email $ftp_email known bad!\n\n";
+ } else {
+ warn "$p: good, found $mval in $mkey\n";
+ }
+ next FTP_EMAIL;
+ }
+ } # each of multiple email values
+ } # each possible email key
+ } # each maintainer
+ warn "$p: did not find $ftp_email\n";
+ warn "\n";
+ } # each ftp-upload email for this package
+ } # each ftp-upload package
+
+ return @ret;
+}
+
+
+# Return list of packages in the gnupackages file that are not in the
+# maintainers file, and vice versa. Run hourly from karl cron on fp.
+#
+sub check_maintainers_ {
+ my @ret = ();
+
+ my %maint_file = &read_maintainers ("by-package");
+ my %pkg_file = &read_gnupackages ();
+
+ for my $m (keys %maint_file) {
+ if (exists $pkg_file{$m}) {
+ delete $maint_file{$m};
+ delete $pkg_file{$m};
+ }
+ }
+
+ for my $p (sort keys %pkg_file) {
+ push (@ret, "$GNUPACKAGES_FILE:$pkg_file{$p}->{lineno}: "
+ . "$p not in maintainers");
+ }
+
+ for my $p (sort keys %maint_file) {
+ next if $p =~ /\.nongnu/;
+ push (@ret, "$MAINTAINERS_FILE:$maint_file{$p}[0]->{lineno}: "
+ . "$p not in gnupackages");
+ }
+
+ return @ret;
+}
+
+
+
+# Return list of packages in the savannah GNU groups.tsv list that are
+# not in the gnupackages or oldpackages files. We check against these
+# rather than maintainers because some are legitimately only on sv and
+# we want to have info for them.
+#
+# On the other hand, there's no expectation that everything in
+# gnupackages (or maintainers) is on savannah, so don't check that
+# direction.
+#
+# The sv file is at http://savannah.gnu.org/cooperation/groups.tsv
+# and is updated via cron on savannah.
+#
+# (Implementation not finished.)
+#
+sub check_savannah_ {
+ my @ret = ();
+
+ my %pkg_file = &read_gnupackages ();
+ my %sv_file = &read_savannah ();
+
+ for my $m (keys %sv_file) {
+ if (exists $pkg_file{$m}) {
+ delete $sv_file{$m};
+ }
+ }
+
+ for my $p (sort keys %sv_file) {
+ push (@ret, "$SAVANNAH_FILE:$sv_file{$p}->{lineno}: "
+ . "$p ($sv_file{$p}->{name}) not in gnupackages");
+ }
+
+ return @ret;
+}
+
+
+1;
Index: gnumaint
===================================================================
RCS file: gnumaint
diff -N gnumaint
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnumaint 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,773 @@
+#!/usr/bin/env tclsh
+# gnumaint - GNU maintainers file maintenance (/gd/gnuorg/maintainers)
+# $Id: gnumaint,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+#
+# Copyright 2007 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Jose Marchesi.
+
+# Global variables (configuration section)
+
+variable maintainers_file "maintainers"
+variable mailtemplate_active "template-active.txt"
+variable log_file "email.log"
+variable report_file "activity-report.txt"
+variable discarded_mbox "discarded-email.mbox"
+variable processed_mbox "processed-email.mbox"
+variable sent_mbox "sent-email.mbox"
+variable formail "/usr/bin/formail"
+variable sendmail "sendmaintmail"
+variable email_originator "address@hidden"
+variable email_reply "address@hidden"
+
+proc do_help_usage {} {
+ global maintainers_file
+ global log_file
+
+ puts "Usage: gnumaint OPERATION \[ARG\]..."
+ puts ""
+ puts "Manage the GNU maintainer list (/gd/gnuorg/maintainers)."
+ puts ""
+ puts "Available OPERATIONs:"
+ puts " list - retrieve information"
+ puts " sendemail - send email to maintainers"
+ puts " recemail - receive email from maintainers"
+ puts ""
+ puts "For more help, run:"
+ puts " gnumaint help OPERATION"
+ puts ""
+ puts "The maintainer information is taken from the file"
+ puts " $maintainers_file (GNUMAINT_MAINTAINERS_FILE envvar overrides)."
+ puts "Log messages are written to the file"
+ puts " $log_file"
+ puts ""
+ puts "Please email address@hidden with any discussion."
+}
+
+proc do_help_list {} {
+ puts "Usage: gnumaint list TOPIC \[ARG\]..."
+ puts ""
+ puts "List information about GNU maintainers to stdout."
+ puts ""
+ puts "Allowed TOPICs:"
+ puts " packages \[ARG\]"
+ puts " all \[or no argument\] - list all packages"
+ puts " maintained - list all maintained packages"
+ puts " unmaintained - list all unmaintained packages"
+ puts " maintainer MAINTAINER - list MAINTAINER's packages"
+ puts " (search is done in both names and email addresses)"
+ puts ""
+ puts " maintainers \[ARG\]"
+ puts " all \[or no argument\] - list all maintainers"
+ puts " package PACKAGE - list maintainers of PACKAGE"
+ puts " search is done for \"*PACKAGE*\", case-insensitive"
+ puts " GLOB"
+ puts " search for GLOB in maintainers file"
+}
+
+proc do_help_sendemail {} {
+ variable mailtemplate_active
+
+ puts "Usage: gnumaint sendemail EMAIL-TYPE"
+ puts ""
+ puts "Send email to maintainers. At present we have one EMAIL-TYPE:"
+ puts " active - send email to all maintainers requesting a reply"
+ puts " to confirm that they are active. Template file:"
+ puts " $mailtemplate_active"
+}
+
+proc do_help_recemail {} {
+ puts "Usage: gnumaint recemail"
+ puts ""
+ puts "Receive email. This is invoked via /com/mailer/aliases."
+}
+
+proc do_help_operation {topic} {
+ switch $topic {
+ sendemail {
+ do_help_sendemail
+ }
+ recemail {
+ do_help_recemail
+ }
+ list {
+ do_help_list
+ }
+ default {
+ puts "Unknown operation `$topic'"
+ do_help_usage
+ }
+ }
+}
+
+proc add_to_log {text} {
+ global log_file
+ set flog [open $log_file a]
+ puts $flog "[timestamp]: $text"
+ close $flog
+}
+
+#
+# Maintainers database structure:
+#
+# { {MAINTAINER-NAME MAINTAINER-EMAIL MAINTAINER-NOTES {PACKAGE1 PACKAGE2
...}} ...}
+#
+set maintainersdb {}
+
+proc get_entry_value {entry text} {
+ set label_regexp "${entry}:"
+ set entry_regexp "^${label_regexp}(.+)"
+
+ regexp $entry_regexp $text match entry_content
+
+ return [string trim $entry_content]
+}
+
+proc get_entry_label {text} {
+ set entry_regexp {^([^:]+):.+}
+
+ regexp $entry_regexp $text match entry_label
+
+ ;# Bad formed entry line
+ if {![info exist entry_label]} then {
+ return {}
+ }
+
+ return [string trim $entry_label]
+}
+
+proc parse_maintainers {finput lineno} {
+ global maintainers_file
+ global maintainersdb
+
+ if {![eof $finput]} then {
+ gets $finput line
+ incr lineno
+ }
+
+ while {(![eof $finput]) && ([string index $line 0] != "\f")} {
+ # Break if EOF or ^L
+ if {[eof $finput] || ([string index $line 0] == "\f")} then {
+ break;
+ }
+
+ ;# Skip blank lines or comments
+ while {$line == "" || ([string index $line 0] == "#")} {
+ gets $finput line
+ }
+
+ ;# Process this maintainer entry
+ set maintainer_name {}
+ set maintainer_email {}
+ set maintainer_notes {}
+ set maintainer_packages {}
+
+ if {[string match "name:*" $line]} then {
+ set maintainer_name [get_entry_value name $line]
+
+ } else {
+ puts "parse error: $maintainers_file \[line $lineno\]: `name:'
expected"
+ exit 1
+ }
+
+ gets $finput line
+ incr lineno
+
+ while {$line != ""} {
+ set entry_label [get_entry_label $line]
+ switch $entry_label {
+ "email" {
+ set maintainer_email [get_entry_value email $line]
+ }
+ "note" {
+ set note_contents [get_entry_value note $line]
+ lappend maintainer_notes $note_contents
+ }
+ "package" {
+ set pkgname [get_entry_value package $line]
+ lappend maintainer_packages $pkgname
+ }
+ }
+
+ gets $finput line
+ incr lineno
+ }
+
+ ;# Add this maintainer entry into maintainersdb
+ lappend maintainersdb [list \
+ $maintainer_name \
+ $maintainer_email \
+ $maintainer_notes \
+ $maintainer_packages]
+ ;# Read the next line
+ gets $finput line
+ incr lineno
+ }
+}
+
+proc build_maintainers_db {} {
+ global maintainers_file
+ global maintainersdb
+
+ # Open the maintainers file
+ if {[catch {set finput [open $maintainers_file r]}]} {
+ puts "Cannot open the maintainers file $maintainers_file"
+ puts "Aborting"
+ exit 1
+ }
+
+ # Get the first line
+ set lineno 0
+ gets $finput line
+ incr lineno
+
+ # Skip until second page
+ while {(![eof $finput]) && ([string index $line 0] != "\f")} {
+ gets $finput line
+ incr lineno
+ }
+
+
+ # Parse maintainers
+ parse_maintainers $finput $lineno
+
+ # Close the maintainers file
+ close $finput
+}
+
+#
+proc do_recemail_operation {opargs} {
+ variable maintainersdb
+ variable formail
+ variable discarded_mbox
+ variable processed_mbox
+
+ ;# Read the email from the standard input
+ set email_contents [read -nonewline stdin]
+
+ ;# Get data fields from the received email
+ set from [exec $formail -c -xFrom: << $email_contents]
+ set subject [exec $formail -c -xSubject << $email_contents]
+ set body [exec $formail -I \"\" << $email_contents]
+
+ ;# Infer the nature of the email from the subject content
+ set subject [string trim $subject]
+
+ switch -glob $subject {
+ {*GNU package*} {
+ ;# Handle activity response email
+
+ ;# Get the maintainer email
+ set maintainer_email [string trim $from]
+
+ ;# We need to extract the email address from a From: line in
+ ;# any of several formats:
+ ;# address@hidden
+ ;# <address@hidden>
+ ;# J User <address@hidden>
+ ;# address@hidden (J User)
+ ;# We don't attempt to do this perfectly.
+ ;#
+ if { [regexp {<([^>]+)>} $from match maintainer_email] } then {
+ ;# take whatever is inside <...>
+ } elseif { [regexp {^[^ ]*$} $maintainer_email] } then {
+ ;# no spaces, take the whole thing
+ } elseif { [regsub {\(.*\)} $from "" maintainer_email] } then {
+ ;# (Real Name) removed, now remove space. regsub won't do it.
+ set maintainer_email [string trim $maintainer_email]
+ } else {
+ puts "could not find email in $from"
+ }
+ set maintainer_email [string tolower $maintainer_email]
+ #puts "got email $maintainer_email"
+
+ ;# See if this maintainer is in the database
+ set maintainer_found false
+ foreach maintainer $maintainersdb {
+ if { [string tolower [lindex $maintainer 1]]
+ == $maintainer_email } then {
+ set maintainer_found true
+ }
+ }
+ if {!$maintainer_found} then {
+ ;# Maintainer not found => discard email
+ add_to_log "discarded msg from unknown maintainer $from"
+ archive_email $discarded_mbox $email_contents
+ return
+ }
+
+ ;# Log the operation
+ add_to_log "received activity reply from $from"
+ archive_email $processed_mbox $email_contents
+
+ ;# Annotate this packages into the activity file
+ activity_annotate $maintainer_email
+ }
+ default {
+ ;# Unknown email type. Discard it.
+ add_to_log "discarded strange email from $from about $subject"
+ archive_email $discarded_mbox $email_contents
+ }
+ }
+}
+
+proc archive_email {mbox email_contents} {
+ set fout [open $mbox a]
+ puts $fout $email_contents
+ puts $fout "\n"
+ close $fout
+}
+
+
+proc sendemail_annotate {} {
+ variable report_file
+
+ set fout [open $report_file a]
+ set line "last_sendemail|[timestamp]"
+ puts $fout $line
+
+ close $fout
+}
+
+proc activity_annotate {maintainer_email} {
+ variable report_file
+ variable maintainersdb
+
+ set maintainer_name {}
+ set maintainer_packages {}
+
+ ;# Collect information for this maintainer
+ foreach maintainer $maintainersdb {
+ if {[lindex $maintainer 1] == $maintainer_email} then {
+ set maintainer_name [lindex $maintainer 0]
+ set maintainer_packages [lindex $maintainer 3]
+ break;
+ }
+ }
+
+ ;# Make an annotation on file
+ set fout [open $report_file a]
+
+ foreach pkg $maintainer_packages {
+ set pkgline "$maintainer_name|$maintainer_email|$pkg|[timestamp]"
+ puts $fout $pkgline
+ }
+
+ close $fout
+}
+
+proc timestamp {} {
+ return [exec date +%Y%m%d.%H%M%S.%Z]
+}
+
+#
+proc do_sendemail_operation {opargs} {
+ if {[llength $opargs] == 1} then {
+ puts "Please specify sendemail type"
+ do_help_sendemail
+ exit 1
+ }
+
+ switch [lindex $opargs 1] {
+ active {
+ do_sendemail_operation_active
+ }
+ default {
+ puts "Unknown sendemail type `[lindex $opargs 1]'"
+ do_help_sendemail
+ exit 1
+ }
+ }
+}
+
+proc fill_template {translation_list email_template} {
+ foreach trn $translation_list {
+ regsub -all -- [lindex $trn 0] $email_template [lindex $trn 1]
email_template
+ }
+
+ return $email_template
+}
+
+proc do_sendemail_operation_active {} {
+ variable maintainersdb
+ variable formail
+ variable sendmail
+ variable mailtemplate_active
+ variable email_originator
+ variable email_reply
+ set maintainer_sent 0
+ set maintainer_omit 0
+
+ ;# Read the email template
+ set email_contents_file [open $mailtemplate_active r]
+ gets $email_contents_file subject_template
+ set email_template [read -nonewline $email_contents_file]
+ close $email_contents_file
+
+ foreach maintainer $maintainersdb {
+ set maintainer_name [lindex $maintainer 0]
+ set maintainer_email [lindex $maintainer 1]
+ set maintainer_notes [lindex $maintainer 2]
+ set maintainer_pkgs [lindex $maintainer 3]
+
+ ;# Skip unmaintained and generic addresses.
+ ;#puts "checking $maintainer_name"
+ if {[regexp {^[a-z]} $maintainer_name] == 1} then {
+ puts "skipping $maintainer_name"
+ continue
+ }
+
+ ;# Skip maintainers with no packages
+ if {[llength $maintainer_pkgs] == 0} then {
+ puts "*** no packages for $maintainer_name??"
+ continue
+ }
+
+ #
+ if {$maintainer_notes == ""} {
+ set maintainer_notes "(none)";
+ }
+
+ ;# Build the list of package names.
+ set pkg_list_str ""
+ set i 0
+ foreach pkg $maintainer_pkgs {
+ incr i
+ append pkg_list_str "${pkg}"
+ if {$i == [llength $maintainer_pkgs] - 1} then {
+ append pkg_list_str " and "
+ } elseif {$i < [llength $maintainer_pkgs]} then {
+ append pkg_list_str ", "
+ }
+ }
+
+ ;# rms doesn't like "package(s)".
+ if {[llength $maintainer_pkgs] == 1} then {
+ set plural_package "package"
+ set plural_this_package "this package"
+ } else {
+ set plural_package "packages"
+ set plural_this_package "these packages"
+ }
+
+ ;# Fill the template with this package/maintainer pair info
+ set translation_list \
+ [list \
+ [list %PLURAL_PACKAGE $plural_package] \
+ [list %PLURAL_THIS_PACKAGE $plural_this_package] \
+ [list %PACKAGE_LIST $pkg_list_str] \
+ [list %MAINTAINER_ADDRESS $maintainer_notes] \
+ [list %MAINTAINER_NAME $maintainer_name] \
+ [list %MAINTAINER_EMAIL $maintainer_email]]
+ set email_contents [fill_template $translation_list $email_template]
+
+ ;# Append the control line
+ set note_line \
+ "\n\n-- Please make sure to include the following line in the body
on your reply --\n"
+
+ set control_line {}
+ append control_line "\$mntemail:$maintainer_email\$ "
+ foreach pkg $maintainer_pkgs {
+ append control_line "\$package:$pkg\$ "
+ }
+ append control_line "\n"
+
+;# append email_contents $note_line
+;# append email_contents $control_line
+
+ set subject_contents [fill_template $translation_list $subject_template]
+
+ ;# Build the email with formail
+ set out_email_contents \
+ [exec $formail -i "Reply-To: $email_reply" \
+ -i "From: $email_originator" \
+ -i "To: $maintainer_email" \
+ -i "Subject: $subject_contents" \
+ -i "Precedence: bulk" \
+ << $email_contents]
+ set out_email_contents \
+ [exec $formail -k -X Date -X Reply-to: -X From: -X Subject: -X To: \
+ << $out_email_contents]
+ append out_email_contents "\n";# be sure we end with blank line
+
+ ;# redo the linebreaks where requested.
+ set out_email_contents \
+ [exec fmt --prefix=fmt: <<$out_email_contents | sed s/fmt:// \
+ << $out_email_contents]
+
+ ;# (Maybe) send the email.
+ puts -nonewline "--- Email to $maintainer_name <$maintainer_email>:"
+ set ret [exec $sendmail << $out_email_contents]
+ if {[string length $ret] == 0} {
+ set log_str "sent"
+ incr maintainer_sent
+ variable sent_mbox
+ archive_email $sent_mbox $out_email_contents
+ } else {
+ set log_str "omitted ($ret)";
+ incr maintainer_omit;
+ }
+
+ puts " $log_str.";
+ add_to_log "$log_str activity check to $maintainer_email
($maintainer_name) for $pkg_list_str"
+
+ }
+
+ ;# Annotate the sendemail operation
+ sendemail_annotate
+
+ puts "Sent email to $maintainer_sent maintainers, omitted $maintainer_omit."
+}
+
+proc do_list_operation {opargs} {
+ if {[llength $opargs] == 1} then {
+ do_help_list
+ exit 1
+ }
+
+ switch [lindex $opargs 1] {
+ packages {
+ if {[llength $opargs] == 2} then {
+ do_list_packages all
+ } else {
+ switch [lindex $opargs 2] {
+ all {
+ do_list_packages all
+ }
+ maintained {
+ do_list_packages maintained
+ }
+ unmaintained {
+ do_list_packages unmaintained
+ }
+ maintainer {
+ do_list_packages_maintainer [lindex $opargs 3]
+ }
+ default {
+ puts "Unknown list packages operation: [lindex $opargs
2]"
+ }
+ }
+ }
+ }
+ maintainers {
+ if {[llength $opargs] == 2} then {
+ do_list_maintainers all
+ } else {
+ switch [lindex $opargs 2] {
+ all {
+ do_list_maintainers all
+ }
+ package {
+ do_list_package_maintainers [lindex $opargs 3]
+ }
+ default {
+ do_list_maintainers [lindex $opargs 2]
+ }
+ }
+ }
+ }
+
+ help {
+ do_help_list
+ }
+
+ default {
+ puts "Unknown list operation: [lindex $opargs 1]"
+ exit 1
+ }
+ }
+}
+
+proc do_list_maintainers {which} {
+ variable maintainersdb
+
+ foreach maintainer $maintainersdb {
+ set maintainer_name [lindex $maintainer 0]
+ set maintainer_email [lindex $maintainer 1]
+ set maintainer_notes [lindex $maintainer 2]
+
+ if {($which == "all") ||
+ [string match -nocase "*${which}*" $maintainer_name] ||
+ [string match -nocase "*${which}*" $maintainer_email]} {
+
+ ;# List this maintainer
+ puts -nonewline $maintainer_name
+ if {$maintainer_email != ""} then {
+ puts -nonewline " "
+ puts -nonewline "<$maintainer_email>"
+ }
+ foreach note $maintainer_notes {
+ puts -nonewline " "
+ puts -nonewline "($note)"
+ }
+ puts {}
+ }
+ }
+}
+
+proc do_list_package_maintainers {package_name} {
+ variable maintainersdb
+
+ foreach maintainer $maintainersdb {
+ set maintainer_name [lindex $maintainer 0]
+ set maintainer_email [lindex $maintainer 1]
+ set maintainer_notes [lindex $maintainer 2]
+ set maintainer_pkgs [lindex $maintainer 3]
+
+ set to_list false
+ foreach pkg $maintainer_pkgs {
+ if {[string match -nocase "*${package_name}*" $pkg]} then {
+ set to_list true
+ break
+ }
+ }
+
+ if {$to_list} then {
+ ;# List this maintainer
+ puts -nonewline $maintainer_name
+ if {$maintainer_email != ""} then {
+ puts -nonewline " "
+ puts -nonewline "<[lindex $maintainer 1]>"
+ }
+ foreach note $maintainer_notes {
+ puts -nonewline " "
+ puts -nonewline "($note)"
+ }
+ puts {}
+ }
+ }
+}
+
+proc do_list_packages_maintainer {maintainer_info} {
+ variable maintainersdb
+
+ foreach maintainer $maintainersdb {
+ set maintainer_name [lindex $maintainer 0]
+ set maintainer_email [lindex $maintainer 1]
+ set maintainer_pkgs [lindex $maintainer 3]
+
+ if {[string match -nocase "*${maintainer_info}*" $maintainer_name] ||
+ [string match -nocase "*${maintainer_info}*" $maintainer_email]}
then {
+
+ foreach pkg $maintainer_pkgs {
+ puts $pkg
+ }
+ }
+ }
+}
+
+proc do_list_packages {which} {
+ variable maintainersdb
+
+ set pkg_list {}
+ foreach maintainer $maintainersdb {
+ set maintainer_name [lindex $maintainer 0]
+ set maintainer_pkgs [lindex $maintainer 3]
+
+ if {(($which == "maintained") &&
+ ($maintainer_name == "Unmaintained")) ||
+ (($which == "unmaintained") &&
+ ($maintainer_name != "Unmaintained"))} then {
+
+ continue
+ }
+
+ foreach pkg $maintainer_pkgs {
+ if {[lsearch -exact $pkg_list $pkg] == -1} then {
+ lappend pkg_list $pkg
+ }
+ }
+ }
+
+ foreach pkg $pkg_list {
+ puts $pkg
+ }
+}
+
+proc parse_command_line_arguments {} {
+ variable argc
+ variable argv
+
+ if {$argc == 0} then {
+ do_help_usage
+ exit 1
+ }
+
+ switch [lindex $argv 0] {
+ help {
+ if {($argc == 1) || ($argc > 2)} then {
+ do_help_usage
+ exit 0
+ }
+ do_help_operation [lindex $argv 1]
+ exit 0
+ }
+ list {
+ do_list_operation $argv
+ }
+ sendemail {
+ do_sendemail_operation $argv
+
+ }
+ recemail {
+ do_recemail_operation $argv
+ }
+ default {
+ do_help_usage
+ exit 1
+ }
+ }
+}
+
+#
+proc get_environment {} {
+ global env
+ global maintainers_file
+ global mailtemplate_active
+
+ # GNUMAINT_MAINTAINERS_FILE variable
+ if {[info exists env(GNUMAINT_MAINTAINERS_FILE)]} then {
+ set maintainers_file $env(GNUMAINT_MAINTAINERS_FILE)
+ }
+
+ # GNUMAINT_MAILTEMPLATE_ACTIVE
+ if {[info exists env(GNUMAINT_MAILTEMPLATE_ACTIVE)]} then {
+ set mailtemplate_active $env(GNUMAINT_MAILTEMPLATE_ACTIVE)
+ }
+}
+
+proc main {} {
+ ; # cd to our directory so we can easily find our files.
+ global argv0
+ variable mydir
+ regsub {/[^/]*$} $argv0 "" mydir
+ cd $mydir
+
+ variable maintainersdb
+
+ # Override configuration variables from
+ # the environment
+ get_environment
+
+ # Build the maintainers database
+ build_maintainers_db
+
+ # Parse command line arguments
+ parse_command_line_arguments
+}
+
+# Call the main routine
+main
Index: contact-activity.txt
===================================================================
RCS file: contact-activity.txt
diff -N contact-activity.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ contact-activity.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,676 @@
+# $Id: contact-activity.txt,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Public domain.
+#
+# This file records information about contact activity with package
+# maintainers. There is nothing private in this file.
+#
+# Canonical order:
+# package
+# reply-from
+# query-to
+# next-release
+# next-contact
+# note
+#
+# The package name should always be all-lowercase (and match
+# gnupackages.txt and maintainers).
+#
+# Finally, this file as a whole is more or less sorted by package
+# identifier. However, software reading this file should accept any
+# order of packages or fields.
+
+package: 3dldf
+reply-from: 04jun13/laurence, 23apr13, 3apr13, 28mar13
+query-to: 29mar13/brandon, 28mar13
+next-release: 04jun13/later this summer?, 23apr13/in preparation
+
+package: a2ps
+reply-from: 30sep12, 19feb12 replied to list, 20aug11
+query-to: 28jun14/karl, 5may14/karl, 18sep12/karl, 11jun12, 5may12
+
+package: acct
+query-to: 4dec12/karl
+next-release: 4dec12/no eta
+
+package: acm
+reply-from: 23mar15/sergio, 16nov10
+query-to: 22mar15/brandon
+next-release: 23mar15/stepping down, 16nov10/soon
+
+package: adns
+reply-from: 13may14/ian, 04jun13, 19feb13, 18feb13, 10mar11
+query-to: 12may13/brandon, 28may13, 7feb13/karl, 19jan12/rms
+next-release: 13may14/next 6 months, 04jun13/not certain, 19feb13/probably not
soon maybe just gplv3, 10mar11/in a month
+
+package: anubis
+reply-from: 15may14/sergey
+query-to: 12may14/brandon
+next-release: 15may14/two weeks
+
+package: avl
+query-to: 12may14/brandon
+
+package: ballandpaddle
+reply-from: 04jun13, 11feb13
+query-to: 12may14/brandon
+next-release: 04jun13/fall 2013 or spring 2014, 11feb13/soon
+
+package: barcode
+reply-from: 12jun12, 22nov10 newmaint, 26jul09
+query-to: 11jun12/karl, 15nov10
+
+package: bc
+reply-from: 13may14/phil, 7may12/ken, 6may12/phil, 22may08/pizzini
+query-to: 12may14/brandon, 28may13
+next-release: 13may14/fall 2014
+
+package: bool
+reply-from: 28mar15/marc
+query-to: 23mar15/brandon, 12may14, 28may13, 5sep08/karl, 17dec09
+next-release: 28mar15/this year
+
+package: bpel2owfn
+reply-from: 15may15/Niels, 9apr10
+query-to: 14may15/brandon, 22mar15
+next-release: 15may15/never (stable)
+
+package: cfengine
+reply-from: feb10/gscrivano
+
+package: cim
+query-to: 12may14/brandon, 28may13, 22dec09/karl
+
+package: clisp
+reply-from: 23mar15/sam, 3jan11
+query-to: 22mar15/brandon, 4oct12/karl/rms
+next-release: 23mar15/never
+
+package: cobol
+reply-from: 26oct08
+note: dedicated maintainer, but will not be able to resume full-time work
+note: for 4-5 years (after 6 months full-time work). But it's a Cobol
+note: compiler, hardly likely to find other implementors, and lots and lots
+note: of work has been done. Mail from tej, 26 Oct 2008 12:42:10 +1100.
+
+package: combine
+reply-from: 14oct08
+query-to: 28may13/brandon, 18jun10/karl, 7nov10
+next-release: 14oct08/end of month
+
+package: commoncpp
+query-to: 8jun10/karl
+
+package: dap
+query-to: 19feb12/jmd, 22jan12
+
+package: ddd
+query-to: 17dec12/karl, 4may11
+reply-from: 29oct14
+next-release: 29oct14+soonh
+
+package: dejagnu
+reply-from: 10mar11
+
+package: denemo
+reply-from: 12may10
+
+package: dia
+reply-from: 9jun08
+
+package: dionysus
+reply-from: 23mar15/jean michel
+query-to: 22mar15/brandon
+next-release: 23mar15/never
+
+package: dismal
+reply-from: 29may13, 25jan11
+query-to: 28may13/brandon, 17nov10/karl, 29oct08
+next-release: 29may13/never, 25jan11/soon
+
+package: dmd
+reply-from: 30oct08
+query-to: 28may13/brandon, 20jun10/karl
+
+package: dominion
+query-to: 12may14/brandon, 28may13, 8jan10/karl
+
+package: emacs-muse
+query-to: 12may14/brandon
+
+package: enscript
+reply-from: 19sep12
+
+package: eprints
+reply-from: 23nov09
+
+package: epsilon
+reply-from: 14apr15/luca, 12dec12
+query-to: 23mar15/brandon, 11may14
+next-release: 23mar15/1.0 possible soon, 12dec12/alpha soon
+
+package: findutils
+reply-from: 24mar15/james, 1may12
+query-to: 23mar15/brandon, 12may14
+next-release: 24mar15/two months, 1may12/four blocking bugs
+
+package: flex manual
+query-to: 9nov08/karl
+note: 9nov08 source?
+
+package: fontutils
+reply-from: 12feb13
+query-to: 12may14/brandon
+next-release: 12feb13/not soon
+
+package: freeipmi
+reply-from: 14jan10
+next-release: 14jan10/next major release
+
+package: freetalk
+query-to: 12may14/brandon
+
+package: fribidi
+query-to: 12may14/brandon
+
+package: garpd
+reply-from: 21nov10
+next-release: 21nov10/soon
+
+package: gcl
+reply-from: 07jun13, 8nov10
+query-to: 28may13/brandon
+next-release: 07jun13/next week
+
+package: gdbm
+query-to: 10mar11/karl
+
+package: gengen
+reply-from: 23mar15/raman
+query-to: 22mar15/brandon
+next-release: 23mar15/2-3 weeks
+
+package: ggradebook
+reply-from: 22feb13/anto
+query-to: 21apr13/brandon, 18feb13
+
+package: gift
+reply-from: 18feb13
+query-to: 18feb13/brandon
+
+package: glue
+reply-from: 14may14/markus, 18jan10
+query-to: 12may14/brandon, 4apr13/karl
+next-release: 14may14/years from now, 18jan10/2011 release
+
+package: gmediaserver
+reply-from: 14apr15/dmitry, 14may14, 20nov10
+query-to: 23mar15/brandon, 12may14, 16may13
+next-release: 14apr15/suggest retirement, 14may14/this summer, 20nov10/this
year
+
+package: gmorph
+reply-from: 24jan12
+query-to: 25apr13/rms/karl, 16feb13/brandon, 4jan11/karl
+next-release: 14jan12/replied to jmd but doing nothing
+
+package: gnats
+reply-from: 6apr13, 1jan13
+next-release: ?
+next-contact: 6nov13
+
+package: gnatsweb
+reply-from: 25jul11
+query-to: 22jan12/jmd
+next-release: 25jul11/little work done
+
+package: gnowsys
+reply-from: 24mar15/nagarjuna, 13may14, 28may13, 18mar10
+query-to: 22mar15/brandon, 12may14, 28may13
+next-release: 24mar15/april 2015, 13may14/august 2014, 28may13/august 2013
+
+package: gnu-arch
+reply-from: 28may13/andy, 10oct11, 2dec08
+query-to: 28may13/brandon, 1jul12/karl
+next-release: 28may13/probably none should retire
+
+package: gnubg
+query-to: 8may13/brandon, 25apr13/rms/karl, 20mar13/brandon
+
+package: gnucap
+query-to: 12may14/brandon, 28may13, 15aug08/karl
+note: 15aug08/asked about gplv3
+
+package: gnucash
+query-to: 24jan10/karl
+
+package: gnufm
+reply-from: 26mar13/matt
+query-to: 12may14/brandon, 26mar13
+next-release: 26mar13/almost ready
+
+package: gnugo
+query-to: 12may14/brandon
+
+package: gnuit
+query-to: 12may14/brandon
+
+package: gnujdoc
+reply-from: 15dec08
+query-to: 26jan10/karl
+
+package: gnukart
+reply-from: 04jun13, 21apr10
+query-to: 28may13/brandon
+next-release: 04jun13/never
+
+package: gnumed
+reply-from: 19jan10
+query-to: 18nov10/karl
+
+package: gnump3d
+query-to: 11feb10/karl
+
+package: gnupod
+reply-from: 13may14/adrian
+query-to: 12may14/brandon
+next-release: 13may14/none in sight
+note: the software is moribund due to being tied to moribund hardware
+
+package: gnurobots
+query-to: 12may14/brandon, 13feb11/karl
+
+package: gnuschool
+reply-from: 15jun13, 29may13, 7apr13, 1apr13
+query-to: 28may13/brandon, 26mar13/karl, 28mar12/karl
+next-release: 15jun13/emailed-to-karl-told-him-to-try-uploading
+next-contact: 1jul13
+
+package: gnushogi
+reply-from: 13mar12
+
+package: gnuskies
+reply-from: 8apr13/rahul
+query-to: 20mar13/brandon, 24jun09/karl
+next-release: never
+
+package: gnusound
+query-to: 12may14/brandon, 17sep11/karl, 30jan10
+note: 17sep11/#709362
+
+package: gnuspeech
+reply-from: 1apr15/david, 26mar13
+query-to: 23mar15/brandon, 12may14, 26mar13
+next-release: 1apr15/mid may?, 26mar13/unknown but possible
+
+package: goptical
+reply-from: 29nov10
+next-release: 29nov10/before christmas
+
+package: gpaint
+reply-from: 30may14/andy, 28may13, 10oct11, 12dec08
+query-to: 12may14/brandon, 28may13
+next-release: 31may14/two months, 28may13/one month
+
+package: gperf
+query-to: 28jun14/karl, 5may14/karl (and many in the past)
+also: libiconv, libsigsegv, libunistring
+
+package: gprolog
+query-to: 1feb10/karl
+
+package: grabcomics
+reply-from: 18nov10
+
+package: greg
+query-to: 12may14/brandon, 28may13, 14dec08/karl
+
+package: gretl
+query-to: 21nov10/karl
+
+package: gsegrafix
+query-to: 13feb11/karl
+
+package: gsl
+query-to: 25apr13/rms/karl, 19feb13/brandon
+
+package: gtick
+query-to: 12may14/brandon
+
+package: gtypist
+reply-from: 5dec10
+note: 5dec10/volunteer
+
+package: guile-rpc
+reply-from: 13may14/ludovic, 25mar13, 17dec08
+query-to: 12may14/brandon, 24mar13
+next-release: 13may14/next month, 25mar13/ready now, 17dec08/official eta
unknown
+
+package: gurgle
+reply-from: 23mar15/tim
+query-to: 22mar15/brandon
+next-release: 23mar15/1 year but it's effectively stable
+
+package: halifax
+reply-from: 6jul12
+
+package: hp2xx
+reply-from: 13may14/martin, 11feb10
+query-to: 12may14/brandon, 11may13, 13nov12
+next-release: 13may14/maybe later this year, unlikely because it's stable
+
+package: httptunnel
+reply-from: 28apr09
+query-to: 12may14/brandon, 28may13, 9feb10/karl
+
+package: intlfonts
+query-to: 12may14/brandon, 28may13, 27jan09/karl
+
+package: jdresolve
+query-to: 25apr13/rms/karl, 24mar13/brandon, 24nov10/karl, 9feb10
+
+package: jel
+reply-from: 24jun09
+
+package: jwhois
+reply-from: 12dec12, 20jun09
+next-release: 20jun09/maybe soon
+
+package: kawa
+reply-from: 8jun09
+
+package: kopi
+query-to: 12may14/brandon, 28may13, 10mar12/benheni
+
+package: leg
+reply-from: 16feb13, 8nov10
+query-to: 16feb13/brandon
+next-release: 16feb13/end of summer
+
+package: liberty-eiffel
+query-to: 11may14/brandon
+
+package: libffcall
+reply-from: 28may13, 27nov10
+query-to: 28may13/brandon
+next-release: 28may13/orphaned, 27nov10/unknown
+
+package: libmatheval
+reply-from: 18jun11
+query-to: 18jun11/karl, 10nov10
+
+package: libredwg
+reply-from: 16feb10
+query-to: 27mar13/karl
+
+package: libxmi
+query-to: 12may14/brandon, 28may13, 16feb10/karl
+
+package: lightning
+query-to: 28may13/brandon, 27sep12/karl, 31dec08
+
+package: lrzsz
+reply-from: 11apr09
+query-to: 12may14/brandon, 28may13, 28nov10/karl
+next-release: 11apr09/next 3 months
+
+package: lsh
+reply-from: 29may13/niels, 9mar13
+query-to: 28may13/brandon
+next-release: 29may13/within a few months, 9mar13/sometime
+
+package: macchanger
+reply-from: 18jan09
+
+package: make
+reply-from: 21jan09
+
+package: maverik
+reply-from: 21feb13
+query-to: 18feb13/brandon
+
+package: mc
+query-to: 28may13/brandon, 19jun12/karl, 20jan09, 12nov08
+
+package: mcsim
+reply-from: 29jan11, 29nov10
+
+package: melting
+query-to: 22feb10/karl
+
+package: metaexchange
+reply-from: 27mar13/laurence
+query-to: 24mar13/brandon
+next-release: 27mar13/indefinitely no
+
+package: metahtml
+reply-from: 19jan11, 23feb10
+query-to: 27nov11/gerald
+
+package: miscfiles
+reply-from: 17nov10
+
+package: nana
+query-to: 3jul12/jmd, 10mar11/karl
+
+package: nano
+query-to: 11jun12/karl
+
+package: oleo
+reply-from: 21jan13, 5apr12
+query-to: 21jan13/brandon, 1apr12/jmd, 19feb12, 22jan12
+
+package: orgadoc
+reply-from: 1mar10
+
+package: panorama
+query-to: 12may14/brandon, 28may13, 11may09/karl
+
+package: pascal
+reply-from: 23feb09
+
+package: paxutils
+query-to: 12may14/brandon, 3apr13/karl
+reply-from: 9dec12, 4feb09, autumn09
+
+package: pcb
+query-to: 2jul12/karl, 2dec10, 4mar10, 24mar09
+
+package: pdf
+reply-from: 31mar13/jose
+query-to: 12may14/brandon, 24mar13
+
+package: pexec
+query-to: 13may14/brandon
+
+package: phantom_home
+query-to: 13may14/brandon, 28may13, 1jun09/karl
+
+package: phpgroupware
+reply-from: 28apr12/hamet
+query-to: 25apr13/rms/karl, 16feb13/brandon, 15apr12/karl, 8mar10
+
+package: pies
+reply-from: 24may14/sergey
+query-to: 13may14/brandon
+next-release: 24may14/within two months
+
+package: pipo
+query-to: 13may14/brandon, 28may13, 9mar10/karl
+
+package: plotutils
+reply-from: 14may14, 13jun11
+query-to: 30apr14/karl
+next-release: summer14
+
+package: powerguru
+next-release: 3dec10/never
+reply-from: 3dec10
+query-to: 26mar13/karl
+
+package: proxyknife
+query-to: 13may14/brandon
+
+package: pspp
+reply-from: 9dec12
+next-release: 9dec12/early next year
+
+package: pth
+reply-from: 3dec11, 4jan11, 1jun09
+query-to: 13may14/brandon, 28may13, 10mar11/karl, 12mar10
+note: 10mar11 rms gave up, 4jan11 to rms
+
+package: pythonwebkit
+reply-from: 17feb13
+query-to: 16feb13/brandon
+note: 17feb13 no release yet (urged doing so)
+
+package: quickthreads
+reply-from: 23jul09
+query-to: 12mar10/karl
+note: 23jul09 awaiting code
+
+package: radius
+query-to: 13may14/brandon
+
+package: rpge
+query-to: 25apr13/rms/karl, 16feb13/brandon, 19feb12/jmd, 22jan12, 14feb11/karl
+
+package: sather
+reply-from: 14apr13
+query-to: 19feb13/brandon, 14apr12/karl
+next-release: unknown
+next-contact: 14oct13
+
+package: screen
+reply-from: 27jan12
+query-to: 28may13/brandon
+next-release: 27jan12/early next week
+
+package: serveez
+reply-from: 29jan11, 25jun09
+query-to: 26jan11/karl, 8jun10
+
+package: shmm
+reply-from: 25mar15/jeannie
+query-to: 23mar15/brandon, 13may14
+next-release: 25mar15/probably never (stable) maybe update for MacOS
+support later this year
+
+package: shtool
+query-to: 13may14/brandon
+
+package: smarteiffel
+query-to: 28may13/brandon
+
+package: social
+reply-from: 13may14/brandon, 26mar13/matt
+query-to: 13may14/brandon, 26mar13
+next-release: 13may14/waiting on copyright assignment, 26mar13/almost ready
+
+package: spacechart
+query-to: 13may14/brandon, 28may13, 21mar10/karl, 14feb09
+
+package: speex
+reply-from: 13may14/jean-marc
+query-to: 13may14/brandon
+next-release: 13may14/new maintainer so hopefully sometime
+
+package: sqltutor
+reply-from: 13may14/ales, 9dec12
+query-to: 13may14/brandon
+next-release: 14may14/this summer, 9dec12/next year
+
+package: stalkerfs
+query-to: 13may14/brandon, 20feb09/karl
+
+package: stump
+reply-from: 13may14/igor, 16mar09
+query-to: 13may14/brandon, 28may13, 9dec10/karl, 24mar10
+next-release: 13may14/never
+
+package: superopt
+next-contact: jun14->ttn
+reply-from: 16jan14/ttn, 18mar09
+query-to: 28may13/brandon, 18jan11/karl, 25mar10
+
+package: sysutils
+query-to: 13may14/brandon, 28may13, 19jan11/karl, 26mar10
+
+package: talkfilters
+reply-from: 30may14/mark
+query-to: 13may14/brandon
+next-release: 30may14/never, stable
+
+package: termcap
+reply-from: 14may14/gary
+query-to: 13may14/brandon, 28may13
+next-release: 14may14/never
+
+package: termutils
+reply-from: 14may14/gary, 23feb09
+query-to: 13may14/brandon, 28may13, 8nov10/karl, 23feb09
+next-release: 14may14/never
+
+package: thales
+reply-from: 27feb13
+query-to: 26feb13/brandon
+
+package: time
+reply-from: 23mar15/david, 16feb13/bug-gnu-utils, 14oct11, 13jan11
+query-to: 22mar15/brandon, 13may14, 28may13
+next-release: 23mar15/recent release via git tag, 16feb13/no eta,
13jan11/within a month
+
+package: trueprint
+reply-from: 15jan13
+note: 15jan13 "try to work more"
+
+package: userv
+reply-from: 04jun13, 19feb13
+query-to: 13may14/brandon, 28may13
+next-release: 04jun13/some time this year, 19feb13/maybe soon
+
+package: uucp
+reply-from: 29may13, 19may09
+query-to: 28may13/brandon, 9jan11/karl, 3apr10
+next-release: 29may13/never
+
+package: vcdimager
+reply-from: 26feb09
+
+package: vmslib
+reply-from: 18feb13, 12jun12
+query-to: 21mar13/brandon, 18feb13
+next-contact: 18mar13
+
+package: w3
+reply-from: 6apr10
+query-to: 16may13/brandon, 13may13, 25apr13/rms/karl, 27mar13/brandon,
10jan11/karl, 8nov10
+
+package: webstump
+reply-from: 22mar15/igor
+query-to: 22mar15/brandon, 13may14, 28may13
+
+package: which
+reply-from: 15may14/carlo
+query-to: 13may14/brandon
+next-release: 15may14/none, stable
+
+package: xhippo
+reply-from: 13may14/adam
+query-to: 13may14/brandon
+next-release: 13may14/never
+
+package: xlogmaster
+reply-from: 23mar15/john
+query-to: 22mar15/brandon, 13may14, 19feb12/jmd
+note: 19feb12 asked about penguin
+next-release: 23mar15/couple months
+
+package: xmlat
+reply-from: 27feb13
+query-to: 26feb13/brandon
+
+package: xaos
+reply-from: 14may14/zoltan
+query-to: 13may14/brandon
+
+# End. (Do not remove this line or the blank line before it. Thanks.)
Index: massmail-1405-stale.txt
===================================================================
RCS file: massmail-1405-stale.txt
diff -N massmail-1405-stale.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ massmail-1405-stale.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,39 @@
+From: address@hidden (GNU Project)
+To: %PACKAGE_MAINTAINERS
+Bcc: address@hidden
+Subject: release of GNU %PACKAGE_NAME
+
+Greetings,
+
+We're sending you this message on behalf of the GNU Project because as
+far as we know, you are the maintainer(s) of %PACKAGE_NAME. (If you're
+not maintaining it, please just reply to let us know.)
+
+As far as we've been able to discern, %PACKAGE_NAME
+has gone several years without a new (official) release. If you have in
+fact made a recent release, please let us know, and sorry for the noise.
+We could not determine the status with absolute certainty.
+
+Otherwise ... it has always been a basic goal of GNU that its
+constituent packages be actively developed and have releases from time
+to time. Without a release, we periodically ping the maintainer(s) to see
+how things are going. So, could you please reply to this message with a
+response to the following questions? Please include all and any
+relevant information, better too much than too little.
+
+1) Can you estimate, even roughly, when a new release will be made?
+
+2) Have you been able to make progress (fixing bugs, updating
+infrastructure, adding features, ...) since the last release, or since
+our last contact with you?
+
+3) Are there technical, legal, or other barriers to making a release?
+We'd like to help if we can.
+
+4) Other comments?
+
+In general, if you have any news or questions regarding the package,
+please let us know at address@hidden Thanks for contributing to
+GNU, and happy hacking.
+
+Brandon & Karl (GNUisances)
Index: mailtoname
===================================================================
RCS file: mailtoname
diff -N mailtoname
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ mailtoname 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,99 @@
+#!/usr/bin/env perl
+# We originally used email addresses in activity-report.txt; turns out
+# it's much better to include real names, since email addresses change and
+# vary. This one-time script does a simplistic conversion, with hand
+# clean-up needed afterwards.
+
+exit (&main ());
+
+sub main
+{
+ my %names = &read_maintainers ("by-email");
+ my @activity = &read_activity ("activity-report.txt");
+
+ for my $a (@activity) {
+ my ($email,$pkg,$date) = split (/\|/, $a);
+ print $names{lc ($email)};
+ print "|$email|$pkg|$date";
+ }
+
+ return 0;
+}
+
+
+
+# just do very basic parsing for this one-time job.
+# return hash where keys are email addresses and values are names.
+# we record all emails we can find.
+#
+sub read_maintainers
+{
+ my %ret;
+
+ $MAINTAINERS_FILE = "m.link";
+ open (MAINTAINERS_FILE) || die "open($MAINTAINERS_FILE) failed: $!";
+
+ # ignore first part of maintainers, through the first form feed.
+ while (<MAINTAINERS_FILE>) {
+ chomp;
+ last if /^\f$/;
+ }
+
+ # read the real information.
+ my (@email_list, $name);
+ while (<MAINTAINERS_FILE>) {
+ chomp;
+ next if /^#/; # ignore comments
+
+ # at a blank line, save the maintainer info we've accumulated, if any.
+ if (/^\s*$/) {
+ for my $e (@email_list) {
+ if (exists $ret{$e}) {
+ warn "already saw email $e for $ret{$e}, now have $name";
+ } else {
+ $ret{$e} = $name;
+ }
+ }
+
+ @email_list = ();
+ $name = undef;
+
+ last if /^\f$/; # form feed marks end of info.
+ next;
+ }
+
+ # key is everything before the first colon.
+ # value is everything after the first colon and whitespace.
+ my ($key,$val) = split (/:\s*/, $_, 2);
+
+ # just want name and email addresses.
+ if ($key eq "name") {
+ $name = $val;
+ } elsif ($key =~ /email/) {
+ push (@email_list, lc ($val));
+ }
+ }
+
+ # skip the rest.
+ close (MAINTAINERS_FILE) || warn "close($MAINTAINERS_FILE) failed: $!";
+
+ return %ret;
+}
+
+
+
+sub read_activity
+{
+ my ($file) = @_;
+ my (@ret);
+
+ local *FILE;
+ $FILE = $file;
+ open (FILE) || die "open($FILE) failed: $!";
+ while (<FILE>) {
+ push (@ret, $_);
+ }
+ close (FILE) || warn "close($FILE) failed: $!";
+
+ return @ret;
+}
Index: gm-email.pl
===================================================================
RCS file: gm-email.pl
diff -N gm-email.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gm-email.pl 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,156 @@
+# $Id: gm-email.pl,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Generate a batch of email messages. See the help string below.
+# In a separate file just because it gets kind of long.
+#
+# Copyright 2012 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+
+
+# Maybe someday we will need "bymaintainer", or something else.
+#
+sub generate_email_bypackage {
+ splice (@ARGV, 0, 3); # lose the "generate email ..."
+ my ($output_dir, $pkg_list, $template_file);
+ while (my $arg = shift @ARGV) {
+ if ($arg eq "-h") {
+ print <<END_GENEMAIL_HELP;
+Usage: $0 generate email batch -o OUTDIR -p PKGLIST-FILE -t TEMPLATE-FILE
+
+Generate a batch of email messages in OUTDIR,
+one for each package in PKGLIST-FILE (plain text, one package name per line),
+doing substitutions in TEMPLATE-FILE to make each actual message.
+All three of these options are required.
+
+Any previous contents of OUTDIR is removed, so the program can be run
+many times while tweaking the template and package list.
+
+No email is actually sent (do that by running, e.g., sendmail -t on each
+file in OUTDIR after you are satisfied with the contents).
+END_GENEMAIL_HELP
+ exit 0;
+
+ } elsif ($arg eq "-o") {
+ $output_dir = shift @ARGV;
+ } elsif ($arg eq "-p") {
+ $pkglist_file = shift @ARGV;
+ } elsif ($arg eq "-t") {
+ $template_file = shift @ARGV;
+ }
+ }
+
+ # Check values.
+ die "$0: generate email group needs all of -o, -p, -t; try -h for help.\n"
+ if (! $output_dir || ! $pkglist_file || ! $template_file);
+ #
+ die "$0: package list file nonexistent or empty: $pkglist_file"
+ if ! -s $pkglist_file;
+ #
+ die "$0: template file nonexistent or empty: $template_file"
+ if ! -s $template_file;
+ #
+ if (! -e $output_dir || -d $output_dir) {
+ system ("rm -rf $output_dir");
+ mkdir ($output_dir, 0777) || die "$0: mkdir($output_dir) failed: $!\n";
+ } else {
+ die "$0: output directory exists and is not a directory: $output_dir\n";
+ }
+
+ my %maint_file = &read_maintainers ("by-package");
+
+ my $count = 0;
+ open (PKGLIST, $pkglist_file) || die "open($pkglist_file) failed: $!";
+ while (<PKGLIST>) {
+ (my $pkg = $_) =~ s/\s.*$//; # take first word of each line, ignore rest.
+ die "$0: Not a package in the maintainers file: $pkg\n"
+ if ! exists $maint_file{$pkg};
+
+ # for msg.1201, rms said to explicitly exclude Hurd from the query.
+ # And there's no point in checking on gnustandards or trans-coord.
+ next if $pkg =~ /^(mig|hurd|gnumach|gnustandards|trans-coord)$/;
+
+ my $msg = &make_msg ($template_file, $pkg, $maint_file{$pkg});
+ next if ! $msg; # skipping this one since unmaintained, etc.
+
+ local *MSG;
+ $MSG = ">$output_dir/$pkg";
+ open (MSG) || die "open($MSG) failed: $!";
+ print MSG $msg;
+ close (MSG) || die "close($MSG) failed: $!";
+
+ $count++;
+ }
+ close (PKGLIST) || warn "close($pkglist_file) failed: $!";
+
+ return "$count messages generated in $output_dir/.";
+}
+
+
+# PKGREF is a hash with the information for PKGNAME from the maintainers
+# file. Expand TEMPLATE_FILE and return it as a string. Except if the
+# package is unmaintained, then return undef.
+#
+sub make_msg {
+ my ($template_file,$pkgname,$pkgref) = @_;
+
+ # ignore generic entry if present, we want to write the individuals.
+ my ($maintainer_email_addrs,undef) = &maintainer_email_addrs ($pkgref);
+ return undef if $maintainer_email_addrs =~ /^unmaintained/;
+
+ # Ok, we're unnecessarily rereading the template file every time.
+ open (TEMPLATE, $template_file) || die "open($template_file) failed: $!";
+ my $msg = join ("", <TEMPLATE>);
+ close (TEMPLATE) || warn "close($template_file) failed: $!";
+
+ my $pretty_email_addrs = &prettify_for_msg ($maintainer_email_addrs);
+
+ # Template substitutions.
+ $msg =~ s/%PACKAGE_NAME/$pkgname/g;
+ $msg =~ s/%PACKAGE_MAINTAINERS/$pretty_email_addrs/g;
+
+ return $msg;
+}
+
+# Given single string of email ADDRS, break into multiple lines at a
+# somewhat reasonable length, prepending tabs to second and subsequent
+# lines. The idea being that the result can be used in the To: header.
+#
+sub prettify_for_msg {
+ my ($addrs) = @_;
+ my $ret = "";
+
+ my @addrs = split (/, /, $addrs);
+ return $addrs if @addrs == 1; # only one, just return it.
+
+ my $line_len = 0;
+ for (my $i = 0; $i < @addrs; $i++) {
+ $ret .= $addrs[$i]; # add addr
+ $ret .= "," if $i + 1 < @addrs; # add comma if not the last one
+
+ $line_len += length ($addrs[$i]) + 1; # what we just added
+ if ($line_len > 71) {
+ # long enough, end this line and start the next:
+ $ret .= "\n\t" if $i +1 < @addrs; # unless it's the last one.
+ $line_len = 0;
+ } else {
+ $ret .= " "; # add space, will continue on this line
+ }
+ }
+
+ return $ret;
+}
+
+1;
Index: gm-list.pl
===================================================================
RCS file: gm-list.pl
diff -N gm-list.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gm-list.pl 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,267 @@
+# $Id: gm-list.pl,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# The list actions for the gm script (see --help message).
+#
+# Copyright 2007, 2008, 2009, 2010, 2012, 2013, 2015
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# Originally written by Karl Berry.
+
+
+
+# Return a list of strings: the (active) package names which the FSF is
+# the copyright holder. Or, if the NOTFSF argument is set, for which it
+# is not the copyright holder.
+#
+sub list_copyrightfsf_ {
+ my ($notfsf,$nowarn) = @_;
+ my @ret = ();
+
+ my %fsf_pkgs = &read_copyright_list ("by-line");
+ my %old_pkgs = &read_oldpackages ();
+ my %maint_pkgs = &read_maintainers ("by-package");
+
+ for my $fsf_pkg (sort keys %fsf_pkgs) { # packages in copyright.list
+ if (! exists $maint_pkgs{$fsf_pkg}) { # if not in maintainers ...
+ # warn about stray names unless known special case, or decommissioned.
+ if (! &skip_fsf ($fsf_pkg) && ! exists $old_pkgs{$fsf_pkg}) {
+ $fsf_line = $fsf_pkgs{$fsf_pkg};
+ warn "$COPYRIGHT_LIST_FILE:$fsf_line: $fsf_pkg not in maintainers\n"
+ unless $nowarn;
+ }
+ next;
+ }
+
+ if ($notfsf) {
+ delete $maint_pkgs{$fsf_pkg};
+ } else {
+ push (@ret, $fsf_pkg) if ! &skip_pkg_p ($mp);
+ }
+ }
+
+
+ if ($notfsf) {
+ # if not fsf, then we want everything left in (not deleted from) maint.
+ # The same few problem and non-packages to delete in this case.
+ for my $mp (keys %maint_pkgs) {
+ delete $maint_pkgs{$mp} if &skip_pkg_p ($mp);
+ }
+ push (@ret, sort keys %maint_pkgs);
+ }
+
+ return @ret;
+
+
+ # Return 1 if we shouldn't worry about the name of this FSF assignment
+ # not being a canonical package name.
+ #
+ sub skip_fsf {
+ my ($fsf) = @_;
+
+ my @skip_fsf = qw(
+ alloca art artwork asa
+ at crontab atrm crond makeatfile
+ autolib
+ backupfile getversion
+ banner blksize bsearch c2tex catalog cdlndir
+ cgraph dfs
+ checkaliases checker chkmalloc command configure crypto ctutorial cvs
+ cvs-utils
+ dcl debian dvc
+ ebnf2ps ecc ecos edebug egcs elisp_manual elms emacstalk enc-dec
+ ep gnust
+ etags expect
+ fcrypt fiasco file flex flymake flyspell fpr freeodbc fsflogo
+ g77 g95 gamma garlic gc gcc-testsuite gconnectfour gellmu gfortran
+ gfsd gm2 gnatdist gnoetry gnu_ocr gnulist gnussl go32 gomp grx gsmb
+ gso guile-python guppi gyve
+ initialize interp io isaac ispell
+ je
+ kaffe
+ leif lesstif lib libiberty libstdc libwv linkcontroller lynx
+ m2f mh-e mingw32 minpath misc mkinstalldirs mmalloc mpuz msort mtime
+ mtrace mule mutt myme
+ newlib newsticker nvi
+ opcodes ox
+ p2c pc pipobbs pips planner polyorb pptp profile psi publish
+ qsort quagga
+ rcl readelf regex review riacs
+ scandir srchdir
+ send sim spim spline stm suit
+ tcl tix tk expect
+ texi2roff thethe tkwww trix tsp_solve tzset
+ udi ul uncvt unexec
+ viper web webpages win32api xemacs zlib
+ );
+
+ my %skip_fsf;
+ @address@hidden = (); # hash slice to make hash from list
+
+ return exists $skip_fsf{$fsf};
+ }
+}
+
+
+# Return the packages for which the FSF is not the copyright holder.
+#
+sub list_copyrightfsfnot_ {
+ return list_copyrightfsf_ (1);
+}
+
+
+
+# Return copyright.list entries that don't have matching paperwork,
+# and vice versa.
+#
+sub list_copyrightpapers_ {
+ my @ret = ();
+ my %cl_pkgs = &read_copyright_list ("by-year");
+ my %cp_pkgs = &read_copyright_papers ();
+
+ $DEBUG = 1;
+
+ for my $year (sort keys %cp_pkgs) {
+ my $cp_year = $cp_pkgs{$year};
+ my $cl_year = $cl_pkgs{$year};
+ &debug_hash ("cp_year $year", $cp_year);
+ &debug_hash ("cl_year $year", $cl_year);
+ last;
+ }
+
+ return @ret;
+}
+
+
+
+# Return list of maintainers for whom we have no phone or address.
+#
+sub list_maintainers_nophysical {
+ my @maints = ();
+ my %maints = &read_maintainers ("by-maintainer");
+
+ for my $m (sort keys %maints) {
+ my $m_ref = $maints{$m};
+ my %m = %$m_ref;
+ next if $m{"is_generic"}; # no contact info needed
+ next if $m{"address"} || $m{"phone"}; # have contact info
+ (my $packages = $m{"package"}) =~ tr/|/ /;
+ push (@maints, "$m{best_email} ($m{name} - $packages)");
+ }
+
+ return @maints;
+}
+
+
+
+# Return all packages sorted by activity status, one package per line.
+#
+sub list_packages_activity {
+ my @ret = ();
+
+ # sort activity statuses in this order. If other strings are used,
+ # they'll show up first so they can be easily fixed.
+ my %activity_order = ("stale" => 1,
+ "moribund" => 2,
+ "ok" => 3,
+ "stable" => 4,
+ "subpkg" => 5,
+ "container" => 6,
+ );
+
+ my %pkgs = &read_gnupackages ();
+ for my $pkgname (sort by_activity keys %pkgs) {
+ my %p = %{$pkgs{$pkgname}};
+ my $activity = $p{"activity-status"};
+ push (@ret, &gnupkgs_msg ($activity, %p));
+ }
+
+ return @ret;
+
+ sub by_activity {
+ (my $a_status = $pkgs{$a}->{"activity-status"}) =~ s/ .*//;
+ (my $b_status = $pkgs{$b}->{"activity-status"}) =~ s/ .*//;
+ $activity_order{$a_status} <=> $activity_order{$b_status}
+ || $pkgs{$a}->{"activity-status"} cmp $pkgs{$b}->{"activity-status"}
+ || $a cmp $b;
+ }
+}
+
+
+
+# Return all packages whose GPLv3 status is not final.
+#
+sub list_packages_gplv3 {
+ my @ret = ();
+
+ my %pkgs = &read_gnupackages ();
+ for my $pkgname (sort by_gplv3 keys %pkgs) {
+ my %p = %{$pkgs{$pkgname}};
+ my $gplv3 = $p{"gplv3-status"};
+ my $contact = $p{"last-contact"};
+ next if $gplv3 =~ /^(done|doc|not-applicable|notgpl|ok|see)/;
+ push (@ret, &gnupkgs_msg ($gplv3 . ($contact ? " [$contact]" : ""), %p));
+ }
+
+ return @ret;
+
+ sub by_gplv3 {
+ (my $a_status = $pkgs{$a}->{"gplv3-status"});# =~ s/ .*//;
+ (my $b_status = $pkgs{$b}->{"gplv3-status"});# =~ s/ .*//;
+ $pkgs{$a}->{"gplv3-status"} cmp $pkgs{$b}->{"gplv3-status"}
+ || $a cmp $b;
+ }
+}
+
+
+
+# Return list of packages for whom no maintainer has answered.
+#
+sub list_packages_unanswered {
+ my @recentrel = &read_recentrel ();
+ my %activity = &read_activity ("by-package");
+ my %pkgs = &read_maintainers ("by-package");
+ my @ret = ();
+
+ for my $p (sort { lc($a) cmp lc($b) } keys %pkgs) {
+ #&debug_hash ($p, $pkgs{$p});
+
+ if (grep { $p eq $_ } @recentrel) {
+ &debug ("$p recently released, skipping");
+
+ } elsif (exists $activity{$p}) {
+ # todo: check back to some cutoff
+ &debug ("$p got activity reply, skipping");
+
+ } else {
+ &debug ("$p no activity, returning");
+ my @entries = ();
+ for my $m (@{$pkgs{$p}}) {
+ next if $m->{"is_generic"};
+ my $entry = $m->{"name"};
+ $entry .= " " if $entry;
+ $entry .= "<$m->{best_email}>" if exists $m->{"best_email"};
+ push (@entries, $entry);
+ }
+
+ # might not be anything in @entries.
+ push (@ret, "$p - " . join (", ", @entries)) if @entries;
+ }
+ }
+
+ return @ret;
+}
+
+
+1;
Index: spotlight.tmpl
===================================================================
RCS file: spotlight.tmpl
diff -N spotlight.tmpl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ spotlight.tmpl 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,38 @@
+$Id: spotlight.tmpl,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+ Copyright 2015 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
+
+Template for GNU Spotlight feature of the Free Software Supporter.
+See ./howto-spotlight.txt.
+
+---------------------------------------------------------------------
+NN new GNU releases in the last month (as of Month DD, 20YY):
+
+[[[markdown list of releases goes here]]]
+
+For announcements of most new GNU releases, subscribe to the info-gnu
+mailing list: <http://lists.gnu.org/mailman/listinfo/info-gnu>.
+
+To download: nearly all GNU software is available from
+<http://ftp.gnu.org/gnu/>, or preferably one of its mirrors from
+<http://www.gnu.org/prep/ftp.html>. You can use the url
+<http://ftpmirror.gnu.org/> to be automatically redirected to a
+(hopefully) nearby and up-to-date mirror.
+
+This month, we welcome [[[list from activity-report.txt]]].
+
+A number of GNU packages, as well as the GNU operating system as a
+whole, are looking for maintainers and other assistance: please see
+<http://www.gnu.org/server/takeaction.html#unmaint> if you'd like to
+help. The general page on how to help GNU is at
+<http://www.gnu.org/help/help.html>.
+
+If you have a working or partly working program that you'd like
+to offer to the GNU project as a GNU package, see
+<http://www.gnu.org/help/evaluation.html>.
+
+As always, please feel free to write to us at <address@hidden>,
+with any GNUish questions or suggestions for future installments.
Index: massmail-1305-stale.txt
===================================================================
RCS file: massmail-1305-stale.txt
diff -N massmail-1305-stale.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ massmail-1305-stale.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,40 @@
+From: address@hidden (GNU Project)
+To: %PACKAGE_MAINTAINERS
+Bcc: address@hidden
+Subject: release of GNU %PACKAGE_NAME
+Reply-to: address@hidden
+
+Greetings,
+
+We're sending you this message on behalf of the GNU Project because as
+far as we know, you are the maintainer(s) of %PACKAGE_NAME. (If you're
+not maintaining it, please just reply to let us know.)
+
+As far as we've been able to discern, %PACKAGE_NAME
+has gone several years without a new (official) release. If you have in
+fact made a recent release, please let us know, and sorry for the noise.
+We could not determine the status with absolute certainty.
+
+Otherwise ... it has always been a basic goal of GNU that its
+constituent packages be actively developed and have releases from time
+to time. Without a release, we periodically ping the maintainer(s) to see
+how things are going. So, could you please reply to this message with a
+response to the following questions? Please include all and any
+relevant information, better too much than too little.
+
+1) Can you estimate, even roughly, when a new release will be made?
+
+2) Have you been able to make progress (fixing bugs, updating
+infrastructure, adding features, ...) since the last release, or since
+our last contact with you?
+
+3) Are there technical, legal, or other barriers to making a release?
+We'd like to help if we can.
+
+4) Other comments?
+
+In general, if you have any news or questions regarding the package,
+please let us know at address@hidden Thanks for contributing to
+GNU, and happy hacking.
+
+Brandon & Karl (GNUisances)
Index: oldpackages.txt
===================================================================
RCS file: oldpackages.txt
diff -N oldpackages.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ oldpackages.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,482 @@
+# $Id: oldpackages.txt,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Public domain.
+#
+# This file is maintained in the CVS repository of GNU womb,
+# http://cvs.savannah.gnu.org/viewvc/gnumaint/?root=womb
+#
+# This file records information and the old gnupackages entries for
+# packages which we have decommissioned.
+#
+# There is nothing private in this file.
+
+package: cobol
+copyright-holder: fsf-no-reply
+doc-category: Software
+doc-summary: COBOL for GCC
+doc-url: none
+download-url: http://sourceforge.net/project/showfiles.php?group_id=5709
+gplv3-status: next-release
+activity-status: moribund 20000812 (0.1.2)
+last-contact: 26oct08 replied
+note: dedicated maintainer, but will not be able to resume full-time work
+note: for 4-5 years (after 6 months full-time work). But it's a Cobol
+note: compiler, hardly likely to find other implementors, and lots and lots
+note: of work has been done. Mail from tej, 26 Oct 2008 12:42:10 +1100.
+
+package: libreboot
+copyright-holder: notfsf
+logo: https://libreboot.org/logo/logo.png
+language: shell,c
+doc-category: Sysadmin
+doc-summary: A free BIOS/UEFI replacement
+doc-url: none
+gplv3-status: ok
+activity-status: newpkg 20160514
+
+package: dmd
+copyright-holder: fsf-no-reply-individual-name-in-files
+doc-category: Sysadmin
+doc-summary: Daemon managing daemons
+doc-url: none
+gplv3-status: not-done-in-0.5
+download_url: http://www.wt-lorsch.de/dmd--0.5.tar.gz
+activity-status: newmaint/20130925 2003 (0.5)
+gone: 17jan16 per maintainer: renamed to shepherd
+
+package: sovix
+copyright-holder: notfsf
+doc-category: Web
+doc-summary: Emacs-like website revision system
+doc-url: none
+gplv3-status: done-in-0.0.1.5 (agplv3)
+activity-status: stale 20081215 (0.0.1.7)
+gone: 12mar15 per englund; maintainer long since took it from GNU
+
+package: myserver
+copyright-holder: fsf-ok-with-dependencies-libxml-libevent-#786724
+language: c++
+logo: /software/myserver/logo.png
+doc-category: Internet
+doc-summary: Multi-threaded web server
+doc-url: none
+gplv3-status: done-as-of-0.9.2
+activity-status: ok 20110716 (0.11)
+note: doc-url was htmlxref, but gone now, author working 11mar12
+gone: 14mar14 per maintainer
+
+package: fcrypt
+copyright-holder: fsf-ok-#786630
+doc-category: Sysadmin
+doc-summary: on-the-fly encrypted filesystems, including secret partitions
+doc-url: none
+gplv3-status: should-be-ok
+activity-status: newpkg/20121106
+gone: 5oct13 strange behavior by maintainer
+
+package: xhippo
+doc_category: Audio
+doc_summary: Generic playlist manager program
+doc_url: none
+blurb_id: xhippo_blurb
+gplv3_status: done-in-3.5
+last_release: 3.5
+last_release_date: 20070827
+activity_status: stable
+last_activity: 20070827
+gone: 20jan19 per request from rms
+
+package: w3
+copyright-holder: fsf-no-reply
+doc-category: Internet
+doc-summary: Web browser written entirely in Emacs Lisp
+doc-url: none
+gplv3-status: not-done-since-stale
+activity-status: stale no-release
+gone: now http://elpa.gnu.org/packages/w3.html
+
+package: dismal
+copyright-holder: fsf-no-reply
+doc-category: Spreadsheets
+doc-summary: Emacs spreadsheet mode
+doc-url: none
+download-url: http://acs.ist.psu.edu/dismal/
+gplv3-status: working (gnumaint-reply 22 Aug 2007 01:16:36)
+activity-status: nomaint/20130528 19971204 (1.4)
+note: copyright.list says fsf, but actual copyrights don't
+note: http://acs.ist.psu.edu/dismal/dismal-1.4.tar.gz
+last-contact: 25jan11 replied soon, 17nov10, 29oct08 asked
+gone: 9aug13, now http://elpa.gnu.org/packages/dismal.html (M-x list-packages)
+
+package: gnu-arch
+mundane-name: Arch
+copyright-holder: notfsf-#786554
+doc-category: Version
+doc-summary: Distributed version control system
+doc-url: htmlxref
+logo: /software/gnu-arch/graphics/octopus-a-small.png
+gplv3-status: decommissioning-since-no-changes (atai 17 Dec 2007 10:00:18
-0800)
+activity-status: stale 20060720 (1.3.5)
+last-contact: 1jul12 asked, 10oct11,2dec08 replied
+gone: 29may13, inaction, have bazaar
+
+package: jdresolve
+language: perl
+doc-category: Internet
+doc-summary: Fast, recursive DNS name resolver for log files
+doc-url: none
+gplv3-status: not-done-since-stale
+activity-status: stale no-release
+gone: 22may13, vaporware
+
+package: phpgroupware
+mundane-name: phpGroupWare
+copyright-holder: fsf-no-reply
+logo: http://www.phpgroupware.org/templates/new/images/logo.png
+doc-category: Business
+doc-summary: Multi-user groupware suite
+doc-url: none
+download-url: http://sourceforge.net/projects/phpgroupware/files/phpgroupware/
+gplv3-status: in-dev-sources-maybe
+activity-status: newmaint/20091110 20100707 (0.9.16.017)
+gone: 22may13, inaction, hardly ever GNU
+
+package: gmorph
+doc-category: Graphics
+doc-summary: Image morphing program
+doc-url: none
+#download-url-of-xmorph:
http://sourceforge.net/project/showfiles.php?group_id=11808
+gplv3-status: not-done-since-stale
+activity-status: newmaint/20100106 20060817 (20060817)
+last-contact: 16feb13 asked, 24jan12 replied to jmd but doing nothing, 4jan11
asked
+note: renamed from xmorph, which continues to be non-GNU.
+gone: 22may13, inaction, still have xmorph
+
+package: gnuskies
+doc-category: Science
+doc-summary: Stargazing
+doc-url: none
+gplv3-status: not-done-since-no-release
+activity-status: nomaint/10apr13 no-release
+last-contact: 20mar13 brandon asked, 24jun09 asked, 2011 copyright finally done
+gone: 13apr13, never anything done, have celestia, per maintainer and rms
+
+package: vmslib
+doc-category: Software
+doc-summary: Help porting GNU software to VMS
+doc-url: none
+gplv3-status: not-done-since-nomaint
+activity-status: newmaint/20110707 (1996)
+gone: 28mar13, too stale and have GNV, per maintainer and rms
+
+package: packaging
+copyright-holder: fsf-no-reply
+doc-category: Software
+doc-summary: Packaging for GNU
+doc-url: none
+logo: /software/packaging/packaging.png
+gplv3-status: not-done-since-mia
+activity-status: stale no-release
+gone: 28mar13, too stale and have guix and gsrc, per maintainer and rms
+
+package: aetherspace
+doc-category: Games
+doc-summary: Massively multiplayer online (MMO) game
+doc-url: none
+gplv3-status: in-dev-sources (18jun08) # stated on web pages too
+activity-status: stale no-release
+last-contact: 20mar13 brandon asked, 12nov10 asked, 14dec09 replied, "spring
2010"
+gone: 24mar13, nonexistent, per maintainer and rms
+
+package: sourceinstall
+copyright-holder: fsf-no-reply
+doc-category: Sysadmin
+doc-summary: Managing distribution sources as packages
+doc-url: /software/sourceinstall/manual/
+gplv3-status: done-in-2.5rc1 (11may08)
+activity-status: ok 20080719 (2.5)
+gone: 19mar13, gsrc + guix do the job, per maintainer and rms
+
+package: guile-gtk
+copyright-holder: fsf-no-reply
+doc-category: Libraries
+doc-summary: Guile bindings to GTK libraries
+doc-url: htmlxref
+gplv3-status: done-as-of-2.1
+activity-status: ok 20071230 (2.1)
+gone: 10mar13, replaced by guile-gnome, per maintainer and rms
+
+package: paperclips
+logo: /software/paperclips/Paperclips-GNU-small.jpg
+language: java
+doc-category: Internet
+doc-summary: Java Servlet engine with EEP! template language support
+doc-url: none
+gplv3-status: not-done-since-no-release
+activity-status: stale no-release
+last-contact: 11feb13 asked, 3mar10 asked
+gone: 13feb13, never any release, per maintainer and rms
+
+package: snakecharmer
+doc-category: Graphics
+doc-summary: Image finding with GNU GIFT
+doc-url: none
+gplv3-status: not-done-since-nomaint
+activity-status: nomaint
+last-contact: see gift
+gone: 9feb13, never any release, no volunteers, raw sources on web page
+
+package: vc-changelog
+doc-category: Version
+doc-summary: ChangeLog management especially with distributed version control
+doc-url: none
+gplv3-status: in-dev-sources
+activity-status: new 19aug10
+gone: 1feb13, no active developers, never any release, can be under vc-dwim
+
+package: dotgnu
+mundane-name: DotGNU
+doc-category: Software
+doc-summary: Web services and C#
+doc-url: none
+gplv3-status: ok-since-container
+activity-status: container for-dotgnu-pnet-etc.
+gone: 18dec12, no development
+
+package: dotgnu-forum
+doc-category: Internet
+doc-summary: Web site revision system for DotGNU
+doc-url: none
+gplv3-status: not-done-since-stale
+activity-status: nomaint
+note: copyright.list seems clear
+gone: 18dec12, no development
+
+package: dotgnu-pnet
+copyright-holder: notfsf
+doc-category: Software
+doc-summary: DotGNU Portable.NET support for .NET applications
+doc-url: http://dotgnu.org/pnetlib-doc/index.html
+download-url: ftp://ftp.gnu.org/gnu/dotgnu/
+gplv3-status: not-done-in-0.1.2
+activity-status: ok 20070308 (0.8, libjit-0.1.2/20081210)
+gone: 18dec12, no development
+
+package: gnu-queue
+mundane-name: Queue
+copyright-holder: address@hidden and other authors
+doc-category: Sysadmin
+doc-summary: Allocate jobs to nodes in a cluster
+doc-url: none
+gplv3-status: under-discussion partly at GPLv1, but should be updatable
+activity-status: nomaint 20001101 (1.30.1)
+gone: 11aug12, parallel does the job
+
+package: goldwater
+doc-category: Business
+doc-summary: Middleware server
+doc-url: none
+gplv3-status: not-done-since-dotgnu-nomaint
+activity-status: nomaint
+last-contact: 31jan10 replied
+note: cvs -d:pserver:address@hidden:/sources/dgee co goldwater
+note: download-url: ftp.gnu.org:gnu/dotgnu -- taken offline, though
+gone: 11aug12
+
+package: goodbye
+doc-category: Software
+doc-summary: Kiosk management
+doc-url: none
+gplv3-status: not-done-since-no-release
+activity-status: stale no-release
+gone: 25jul12, per rms on gnu-prog-discuss
+
+package: aeneas
+doc-category: Science
+doc-summary: Design and simulation of submicron semiconductor devices
+doc-url: /software/aeneas/#documentation
+gplv3-status: done-in-1.2 (14jul08)
+activity-status: ok 20080714
+gone: 13may12, subsumed into archimedes
+
+package: sxml
+download-url: http://medialab.di.unipi.it/Project/SXML/resources.html
+doc-category: Web
+doc-summary: Simple XML for defining and implementing markup languages
+doc-url: none
+gplv3-status: not-done-since-stale
+activity-status: nomaint 20010829 (0.96)
+last-contact: 14nov10 stepped down
+gone: 12may12, replaced by xmlat
+
+package: proto
+copyright-holder: confused
+note: copyright.list says fsf, sources don't
+doc-category: Software
+doc-summary: Find prototypes in header files
+doc-url: none
+download-url: http://www.oualline.com/sw/
+gplv3-status: done-since-public-domain
+activity-status: stale 1996
+last-contact: 3mar11 to rms, 14mar10 replied, no plans to work on it
+gone: 19mar11, maintainer not interested, rms ok with decommissioning it
+
+package: libiberty
+copyright-holder: fsf
+gplv3-status: under-discussion
+activity-status: ok released-in-combination
+gone: 2dec10, redundant with gcc
+
+package: gnotary
+mundane-name: GNotary
+doc-category: Business
+doc-summary: Digitally sign electronic health records
+doc-url: none
+gplv3-status: not-done-since-stale
+activity-status: stale 20050827 (0.1.rc1)
+last-contact: see gnumed
+gone: 28nov10 never got off the ground, maintainers have no time for it
+
+package: songanizer
+copyright-holder: fsf
+doc-category: Audio
+doc-summary: Organize collections of audio files
+doc-url: none
+gplv3-status: not-done-in-1.0
+activity-status: stale 20070326 (1.0)
+last-contact: 19nov10 wrote, 10feb09 wrote
+gone: 22nov10 maintainer resigned, never caught on
+
+package: dictionary
+download-url: ftp://ftp.gnu.org/gnu/gcide
+gplv3-status: not-done-since-moribund
+activity-status: moribund-will-merge-into-gcide 200201 (0.46)
+last-contact: 21jun10 replied
+note: renamed to/from gcide
+note: gray will make an interface and spruce it up as part of dico.
+gone: 17nov10 no need to be separate from dico
+
+package: beacon
+gplv3-status: not-done-since-no-release
+activity-status: stale nonesuch
+last-contact: see aroundme
+gone: 14nov10 like aroundme, but never existed
+
+package: aroundme
+mundane-name: AROUNDMe
+download-url: http://www.barnraiser.org/aroundme/
+doc-category: Web
+gplv3-status: done-in-aroundme_pi_20080116a
+activity-status: ok 20080327
+last-contact: 200808 wrote author, working
+gone: 14nov10, discovered resignation
+
+package: libopts
+gplv3-status: not-done-in-27.6
+activity-status: stale 20070127 (27.6)
+last-contact: 15feb10 wrote
+gone: 9nov10, effectively part of autogen, unused on its own.
+
+package: zebra
+download-url: ftp://ftp.zebra.org/pub/zebra/
+logo: http://www.zebra.org/zebralogo.jpg
+gplv3-status: not-done-since-stale
+activity-status: stale 20050908 (0.95a) # 10feb10 wrote
+note: 18dec09 quagga unlikely replacement, some developers anti-gplv3.
+note: see also http://www.zebra.org
+gone: 8nov10, maintainer disappeared for years, quagga fork is active.
+
+package: isofsmk
+gplv3-status: not-done-in-1.11.3
+activity-status: ok 20100108 (1.13)
+gone: 8jul10 per author, replaced by xorriso.
+
+package: toutdoux
+doc-url: http://www.gnu.org/software/toutdoux/en/documentation.html
+gone: 20apr09 per author.
+
+package: octal
+doc-url: http://www.gnu.org/software/octal/ox_api_main/
+gone: 9apr09 per author.
+
+package: abcsh
+gone: per author, #332187.
+
+package: gnufi
+gone: 13feb10
+
+package: cons
+gone: 3jan10
+
+package: radar
+gone: 13oct08
+
+package: recode
+gone: 13oct08
+
+package: balsa
+gone: 4mar08
+
+package: hydrant
+gone: 18feb08
+
+package: cfs-el
+gone: 31aug07 or so
+
+package: music
+gone: 28aug07
+
+package: mana
+gone: 17aug07
+
+package: leonardo
+gone: 12may07
+
+package: hegemonie
+gone: 29mar07
+
+package: gnusql
+gone: 16mar06
+
+package: free
+gone: 25oct02
+
+package: dld
+gone: 11jul01 or so
+
+package: rx
+gone: long ago
+
+package: doschk
+gone: always nongnu
+
+package: emacs-wiki
+gone: never dubbed
+
+package: adhoc
+gone: never dubbed
+
+package: fileutils
+gone: long ago merged into coreutils
+
+package: textutils
+gone: long ago merged into coreutils
+
+package: sh-utils
+gone: long ago merged into coreutils
+
+package: finger
+gone: long ago merged into inetutils
+
+package: gfe
+gone: long ago
+
+package: gts
+mundane-name: G Transaction Server (?)
+gone: long ago
+note: Todd Lewis
+note: http://archives.postgresql.org/pgsql-hackers/1999-03/msg00200.php
+
+package: winboard
+gone: part of xboard
+
+# End. (Do not remove this line or the blank line before it. Thanks.)
Index: tpost-need.html
===================================================================
RCS file: tpost-need.html
diff -N tpost-need.html
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tpost-need.html 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,8 @@
+<!-- blurb to put on the web pages of packages that need maintainers. -->
+
+<hr><p>GNU XXX is looking for a maintainer.
+If you're interested, please take a look at this <a
+href="/help/evaluation.html#whatmeans">general information about GNU
+packages and being a GNU maintainer</a>, and then email
address@hidden with a bit about your background and particular
+interest in this package. Thanks.</p><hr>
Index: doc-categories.txt
===================================================================
RCS file: doc-categories.txt
diff -N doc-categories.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc-categories.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,41 @@
+# $Id: doc-categories.txt,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Public domain.
+# Map doc-category identifiers in gnupackages.txt to the actual category
+# names used in the Free Software Directory (http://directory.fsf.org),
+# so we can use the latter in generated web pages, such as
+# http://www.gnu.org/manual.
+# Texinfo @dircategory names should also use the third column (full
+# name) when it's present.
+Archiving -
+Audio aud
+Business prod Business and productivity
+Database db
+Dictionaries dict
+Education educ
+Email email
+Editors editors
+Fonts fonts
+Games games
+Graphics graph
+Health health
+Hobbies hobbies
+Interface iface
+Internet net Internet applications
+Libraries libs Software libraries
+Live lc Live communications
+Localization local
+Mathematics math
+Music music
+Printing print
+Science science
+Security sec
+Software dev Software development
+Spreadsheets ssheet
+Sysadmin admin System administration
+Telephony tel
+Text text Text creation and manipulation
+Translation dtrans Documentation translation
+Version vc Version control
+Video video
+Web web Web authoring
+gnuorg - GNU organization
Index: massmail-1503-stale.txt
===================================================================
RCS file: massmail-1503-stale.txt
diff -N massmail-1503-stale.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ massmail-1503-stale.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,47 @@
+From: address@hidden (GNU Project)
+To: %PACKAGE_MAINTAINERS
+Bcc: address@hidden
+Subject: release of GNU %PACKAGE_NAME
+
+Greetings,
+
+We're sending you this message on behalf of the GNU Project because as
+far as we know, you are the maintainer(s) of %PACKAGE_NAME. (If you're
+not maintaining it, please just reply to let us know.)
+
+As far as we've been able to discern, %PACKAGE_NAME
+has gone several years without a new (official) release. If you have in
+fact made a recent release, please let us know, and sorry for the noise.
+We could not determine the status with absolute certainty. Please
+note that the best ways for us to be aware of your releases are making
+the release available on ftp.gnu.org and making release announcements
+via address@hidden and your Savannah project's "News" section (which
+shows up on the Planet GNU RSS feed).
+
+Otherwise ... it has always been a basic goal of GNU that its
+constituent packages be actively developed and have releases from time
+to time. Without a release, we periodically ping the maintainer(s) to see
+how things are going. So, could you please reply to this message with a
+response to the following questions? Please include all and any
+relevant information, better too much than too little.
+
+1) Can you estimate, even roughly, when a new release will be made?
+
+2) Have you been able to make progress (fixing bugs, updating
+infrastructure, adding features, ...) since the last release, or since
+our last contact with you?
+
+3) Are there technical, legal, or other barriers to making a release?
+We'd like to help if we can.
+
+3b) Do you have any difficulties in making your package work with
+other GNU packages or are there any bugs in other GNU packages that
+affect your software?
+
+4) Other comments?
+
+In general, if you have any news or questions regarding the package,
+please let us know at address@hidden Thanks for contributing to
+GNU, and happy hacking.
+
+Brandon & Karl (GNUisances)
Index: howto-commission.txt
===================================================================
RCS file: howto-commission.txt
diff -N howto-commission.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ howto-commission.txt 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,76 @@
+$Id: howto-commission.txt,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+ Copyright 2015 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
+
+Notes on what an "assistant GNUisance" needs to do when a new package is
+officially dubbed. Only rms can dub a new package; he sends mail to
address@hidden (which all and only such assistants should be on), and
+other recipients.
+
+When a replacement or co-maintainer for an existing package is dubbed,
+most of the below is unnecessary: just add the person to
+gnu-prog[-discuss] (item 1), and to the maintainers file (item 4), and
+send them the post-dubbing message (item 10).
+
+1. Add the new maintainer to gnu-prog, gnu-prog-discuss, and
+gnu-community-private right away, as stated at the end of the dubbing
+message.
+https://lists.gnu.org/mailman/admin/gnu-prog/members/add
+https://lists.gnu.org/mailman/admin/gnu-prog-discuss/members/add
+https://lists.gnu.org/mailman/admin/gnu-community-private/members/add
+
+2. Sometimes the package identifier is not completely clear from rms's
+message, especially if it has not gone through the normal evaluation
+process. The identifier should be all lowercase (no exceptions!), no
+spaces, not start with "gnu" unless there is good reason for it, and be
+reasonably descriptive and unique in the universe of free software (at
+least). The identifier is the common key linking the package in many
+disparate places, so it is worth a little time and discussion with the
+new maintainer if need be to make it good. rms does not generally need
+to be involved in that detail.
+
+3. A package can have a "mundane name" that includes spaces, capitals,
+etc. Sometimes that dispels fears the new maintainer might have.
+
+4. Once the package identifier is settled, things can proceed. Add the
+new maintainer to /gd/gnuorg/maintainers, with the new package name.
+See /gd/gnuorg/README for editing specifics. Update activity-report.txt
+at the same time, as described in that README.
+
+5. In womb/gnumaint, add the entry to rec/gnupackages.rec. The only entries
+likely to require some thought are the doc-category and doc-summary.
+It can always be fixed later, but usually isn't, so it's worth thinking
+about. Whatever else, do not commit a placeholder or other fake
+entries, since it will get propagated to www.gnu.org below. The doc-url
+will typically be "none" for a new package.
+
+6. Also in womb/gnumaint, add an entry to rec/pkgblurbs.rec. Here it can
+be a three-line placeholder:
+ id: newpkgid_blurb
+ package: newpkgid
+ blurb: null (newpkg/YYYYMMDD)
+We'll ask the new maintainer for a blurb in the post email, below.
+
+7. Items 5 and 6 should be done right away, as otherwise consistency
+checks will start to fail (as soon as /gd/gnuorg/maintainers is
+updated). Commit these changes.
+
+8. Regenerate the allgnupkgs.html et al. web page includes here:
+ make gnupackages.txt
+ make html-update # writes into www checkout at ${gw}
+ make html-diff # cvs diff of the generated files
+ cd $gw && cvs commit ...
+It's important to do the diff and actually look at the output, to ensure
+both that the files have not been hand-edited on the www side, and that
+the generation actually did what is expected.
+
+9. The savannah people should ensure that the new package is marked gnu,
+if it already exists on savannah, or accept it. And for
+replacement/co-maintainers, they should ensure that the new person is
+made an admin of the package, if it exists.
+
+10. Send the post-appointment email from the template temail-4post.txt,
+suitably edited.
Index: gnufsd
===================================================================
RCS file: gnufsd
diff -N gnufsd
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnufsd 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,84 @@
+#!/usr/bin/env perl
+# $Id: gnufsd,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Extract information about GNU packages from the Free Software Directory.
+
+$DIRDIR = "$ENV{HOME}/gnu/src/directory/";
+exit (&main ());
+
+sub main
+{
+ my %opt;
+ if ($ARGV[0] eq "byname") {
+ $opt{"packages_by_name"} = 1;
+ } elsif ($ARGV[0] eq "bylicense") {
+ $opt{"packages_by_license"} = 1;
+ }
+
+ # what we extract. should read and return a hash, etc. no need yet.
+ my %licenses;
+ my @packages;
+
+ chdir ($DIRDIR) || die "chdir($DIRDIR) failed: $!";
+ opendir (DIR, ".") || die "opendir($DIRDIR) failed: $!";
+ while (my $dirent = readdir (DIR)) {
+ next if $dirent =~ /^(\.\.?|CVS|README)$/; # ignore . .. CVS README
+
+ open (DIRENT, $dirent) || die "open($dirent) failed: $!";
+
+ my %fsd_entry;
+
+ while (<DIRENT>) {
+ if (/^%%license:/) {
+ $fsd_entry{"license"} = $_;
+
+# } elsif (/^%%name:/) {
+# (undef,$xdirent) = split (" ", $_, 2);
+# }
+
+ } elsif (/^%%GNU:/) {
+ s/\s*\n$//;
+ my (undef,$val) = split;
+ $fsd_entry{"gnu"} = $val =~ /yes/i;
+ }
+ }
+ close (DIRENT) || warn "close($dirent) failed: $!";
+
+ next unless $fsd_entry{"gnu"}; # if nongnu, forget it.
+ (my $pkg = $dirent) =~ s/\.txt$//;
+
+ if ($opt{"packages_by_name"}) {
+ push (@packages, $pkg);
+ }
+
+ if ($opt{"packages_by_license"}) {
+ # save this package under all the licenses we've got.
+ $fsd_entry{"license"} =~ s/\s*\n$//;
+ my (undef,$license) = split (" ", $fsd_entry{"license"}, 2);
+ $license =~ s/ +and +/, /;
+ my @licenses = split (/ *[,;] */, $license);
+ # warn "$dirent: split $license into @licenses\n";
+
+ for my $l (@licenses) {
+ $licenses{$l} .= " $pkg";
+ }
+ }
+ }
+
+ closedir (DIR) || warn "closedir(dir) failed: $!";
+
+ if ($opt{"packages_by_name"}) {
+ print map { "$_\n"} sort @packages;
+ }
+
+ if ($opt{"packages_by_license"}) {
+ for my $k (sort keys %licenses) {
+ my $pkglist = $licenses{$k};
+ my @pkglist = split (" ", $pkglist);
+ print "$k: ";
+ print join (" ", sort @pkglist);
+ print "\n";
+ }
+ }
+
+ return 0;
+}
Index: testaddrcase.msg
===================================================================
RCS file: testaddrcase.msg
diff -N testaddrcase.msg
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testaddrcase.msg 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,14 @@
+From address@hidden Sun Feb 11 14:48:08 2007
+Return-path: <address@hidden>
+Envelope-to: address@hidden
+Delivery-date: Sun, 11 Feb 2007 14:48:08 -0500
+Received: from karl by fencepost.gnu.org with local (Exim 4.60)
+ (envelope-from <address@hidden>)
+ id 1HGKgC-0000P9-M8
+ for address@hidden; Sun, 11 Feb 2007 14:48:08 -0500
+To: address@hidden
+Message-Id: <address@hidden>
+From: address@hidden
+Date: Sun, 11 Feb 2007 14:48:08 -0500
+Subject: GNU package maintenance
+
Index: README
===================================================================
RCS file: README
diff -N README
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ README 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,36 @@
+Copyright 2013 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
+
+The gm script is about performing various GNU maintainer/package
+operations. Run gm --help for a list. What's been done is what has
+been needed in practice, rather than any kind of theoretical list of
+what might be useful.
+
+gm combines information from several files. The most important are
+./gnupackages.txt (maintained in the CVS here, can be updated whenever
+and by whomever) and the fp:/gd/gnuorg/maintainers (maintained on
+fencepost, in RCS, and should only be modified if you have explicit
+permission from rms to do so).
+
+For a list of all the files needed to do the various jobs, see the
+variables given at the top the gm file. You yourself need to set up
+symlinks to them as needed, and arrange your own cron jobs (or whatever)
+to ensure your versions stay current.
+
+Perhaps the most frequent operation is updating the allgnupkgs.html on
+www.gnu.org. If you set the envvar gw to the path of your www checkout,
+running make update-html will do this. (It is just running three "gm
+generate" invocations, no magic involved, so go ahead and do it
+individually as needed.)
+
+The Makefile has a variety of other current and historical tasks, so
+it is good to peruse it, adapt it, update it.
+
+Happy maintaining.
+
+P.S. The gnumaint script was a first attempt at this job, dealing with
+the first mass email we did, ca.2007; see gnumaint.README.
+
Index: fsd/Makefile
===================================================================
RCS file: fsd/Makefile
diff -N fsd/Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ fsd/Makefile 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,32 @@
+SHELL = /bin/sh
+TEXI2DVI = texi2dvi
+TEXI2PDF = texi2pdf
+MAKEINFO = makeinfo
+
+A4_FLAGS = -t @afourpaper
+LETTER_FLAGS =
+
+.PHONY: clean info all
+
+all: info
+
+info: fsd-schema.info
+
+fsd-schema.info: fsd-schema.texi
+ $(MAKEINFO) $<
+
+clean:
+ rm -f *.aux
+ rm -f *.cp
+ rm -f *.cps
+ rm -f *.dvi
+ rm -f *.fn
+ rm -f *.info
+ rm -f *.ky
+ rm -f *.log
+ rm -f *.pdf
+ rm -f *.pg
+ rm -f *.toc
+ rm -f *.tp
+ rm -f *.vr
+ rm -f fsd-schema.txt
Index: fsd/.cvsignore
===================================================================
RCS file: fsd/.cvsignore
diff -N fsd/.cvsignore
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ fsd/.cvsignore 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,5 @@
+fsddb
+fsddb.tgz
+quaggasql
+sock
+README*
Index: fsd/gnufsd-psql
===================================================================
RCS file: fsd/gnufsd-psql
diff -N fsd/gnufsd-psql
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ fsd/gnufsd-psql 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,561 @@
+#!/usr/bin/env perl
+# $Id: gnufsd-psql,v 1.1 2019/05/11 10:44:53 ineiev Exp $
+# Extract information about GNU packages from the Free Software
+# Directory's PostgreSQL database.
+#
+# Dependencies:
+# perl (5.8.x), libdbd-pg-perl, libdate-calc-perl
+
+use warnings;
+use strict;
+use DBI;
+use Date::Calc qw ( check_date Delta_Days Add_Delta_YMD Today );
+use File::Temp qw ( tmpnam );
+
+# Configuration:
+# ==============================
+# Database connection settings:
+my $dbname = "quagga";
+my $username = "django";
+my $password = "";
+
+# `activity-status' calculation:
+my @activity_interval = (-1, 0, 0); # One year ago (Y, M, D)
+my @activity_reference = Today ();
+#===============================
+
+my @activity_threshold = Add_Delta_YMD (@activity_reference,
+ @activity_interval);
+
+# FIXME: What about handling UTF-8 from PostgreSQL?
+
+my ($dbh, $sth_homepage, $sth_download_url, $sth_activity_status,
+ $sth_computer_languages, $sth_subprograms, $sth_categories,
+ $sth_category, $sth_keywords, $sth_related, $sth_versions,
+ $sth_licenses, $sth_interfaces);
+
+my %user_level_enum = (
+ 0 => "unknown",
+ 1 => "beginner",
+ 2 => "intermediate",
+ 3 => "advanced");
+
+my %version_status_enum = (
+ 2 => "alpha",
+ 3 => "beta",
+ 4 => "developmental",
+ 5 => "testing",
+ 6 => "unstable",
+ 7 => "stable",
+ 8 => "mature");
+
+exit (&main ());
+
+# Connect to the database and prepare all reusable statements in
+# advance.
+sub db_connect ()
+{
+ $dbh = DBI->connect ("dbi:Pg:dbname=$dbname",
+ $username,
+ $password,
+ {AutoCommit => 0,
+ PrintError => 1,
+ RaiseError => 1});
+
+ $dbh->do ("SET datestyle TO ISO;"); # YYYY-MM-DD
+
+ $sth_homepage = $dbh->prepare (
+ "SELECT link FROM directory_projectwebresource
+ WHERE audience = 5 AND kind = 5 AND project_id = ?;");
+
+ $sth_download_url = $dbh->prepare (
+ "SELECT link FROM directory_projectwebresource
+ WHERE kind = 11 AND project_id = ? ORDER BY audience DESC;");
+
+ $sth_activity_status = $dbh->prepare (
+ "SELECT name, date FROM directory_version
+ WHERE project_id = ? ORDER BY date DESC;");
+
+ $sth_computer_languages = $dbh->prepare (
+ "SELECT l.name
+ FROM directory_computerlanguage l, directory_project_computer_languages p
+ WHERE l.id = p.computerlanguage_id AND p.project_id = ?
+ ORDER BY l.name ASC;");
+
+ $sth_subprograms = $dbh->prepare (
+ "SELECT name FROM directory_subprogram
+ WHERE project_id = ?
+ ORDER BY name;");
+
+ $sth_categories = $dbh->prepare (
+ "SELECT category_id FROM directory_project_categories
+ WHERE project_id = ?;");
+
+ $sth_category = $dbh->prepare (
+ "SELECT name, slug, parent_category_id FROM directory_category
+ WHERE id = ?;");
+
+ $sth_keywords = $dbh->prepare (
+ "SELECT k.keyword
+ FROM directory_keyword k, directory_project_keywords p
+ WHERE p.keyword_id = k.id AND p.project_id = ?
+ ORDER BY k.keyword ASC;");
+
+ $sth_related = $dbh->prepare (
+ "SELECT p.slug
+ FROM directory_project p, directory_project_related r
+ WHERE r.to_project_id = p.id AND r.from_project_id = ?
+ ORDER BY p.slug ASC;");
+
+ $sth_versions = $dbh->prepare (
+ "SELECT v.id, v.name, v.date, v.status, v.notes,
+ u.first_name || ' ' || u.last_name || ' <' || u.email || '>'
+ AS license_verified_by,
+ v.license_verified_on, v.source_code
+ FROM directory_version AS v, auth_user AS u
+ WHERE v.license_verified_by_id = u.id AND v.project_id = ?
+ ORDER BY v.date DESC;");
+
+ $sth_licenses = $dbh->prepare (
+ "SELECT l.slug
+ FROM directory_license AS l, directory_version_licenses AS vl
+ WHERE l.id = vl.license_id AND vl.version_id = ?
+ ORDER BY slug;");
+
+ $sth_interfaces = $dbh->prepare (
+ "SELECT i.name
+ FROM directory_interface AS i, directory_version_interfaces AS vi
+ WHERE i.id = vi.interface_id AND vi.version_id = ?
+ ORDER BY name;");
+}
+
+# Disconnect from the database.
+sub db_disconnect ()
+{
+ $dbh->disconnect ();
+}
+
+# Trim the useless whitespace that sometimes surrounds the values in
+# the database.
+# FIXME: What about collapsing internal whitespace?
+sub trim_whitespace
+{
+ my ($input) = @_;
+ return $input if ! defined $input;
+
+ my $type = ref ($input);
+ if ($type eq "SCALAR") {
+ return $input if ! defined $$input;
+ $$input =~ s/^\s+//; # leading whitespace
+ $$input =~ s/\s+$//; # trailing whitespace
+ $$input =~ s/\r//g; # delete all carriage returns
+ }
+ elsif ($type eq "HASH") {
+ trim_whitespace (\$_) foreach (values %$input);
+ }
+ elsif ($type eq "ARRAY") {
+ for my $row (@$input) {
+ trim_whitespace (\$_) foreach (values %$row);
+ }
+ }
+ else {
+ die "Don't know how to trim input '$input' of type '$type'!";
+ }
+ return $input;
+}
+
+# Fetch all rows resulted from a SELECT statement.
+sub all ($)
+{
+ my ($sql) = @_;
+ return trim_whitespace ($dbh->selectall_arrayref ($sql, {Slice=>{}}));
+}
+
+# Fetch one row resulted from a SELECT statement.
+sub row ($)
+{
+ my ($sql) = @_;
+ return trim_whitespace ($dbh->selectrow_hashref ($sql));
+}
+
+# Fetch all values in one COLUMN resulted from a SELECT statement.
+sub all_col ($$)
+{
+ my ($sql, $col) = @_;
+ my @result;
+ my $rows = all ($sql);
+ for my $row (@$rows) {
+ push (@result, $row->{$col});
+ }
+ return @result;
+}
+
+# Fetch one COLUMN from the first row resulted from a SELECT
+# statement.
+sub col ($$)
+{
+ my ($sql, $col) = @_;
+ my $value = row ($sql);
+ return $value->{$col} if $value;
+}
+
+# Fetch all GNU projects.
+sub projects ()
+{
+ return all ("SELECT id, name, slug, user_level, short_description,
+ full_description, entry_compiled_by, updated,
+ checkout_command
+ FROM directory_project
+ WHERE gnu IS TRUE ORDER BY slug;");
+}
+
+# Return mundane-name for a project. Returns an empty string if the
+# `mundane-name' field should be ommited for this project.
+sub mundane_name (\%)
+{
+ my ($project) = @_;
+ my $slug = $project->{"slug"};
+ my $name = $project->{"name"};
+
+ # Omit mundane-name if it is trivial, e.g. match the package name.
+ return "" if ($name eq $slug) or ($name eq ucfirst $slug);
+
+ # The mundane-name is non-trivial, return it.
+ return $name;
+}
+
+# Fetch homepage (if any) for a project. Returns an empty string if
+# the `homepage' field should be omitted for this project.
+sub homepage (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ my $slug = $project->{"slug"};
+ $sth_homepage->bind_param (1, $id);
+ my $url = col ($sth_homepage, "link");
+
+ # Mark explicitly the lack of homepage.
+ return "none" if ! $url;
+
+ # Do magic to suppress a homepage comforming to
+ # http://www.gnu.org/software/PACKAGE format.
+ return "" if $url =~
m#^http://www.gnu.org/software/$slug(/($slug.html)?)?$#i;
+
+ # This is non-trivial URL, return it as is.
+ return $url;
+}
+
+# Fetch download-url (if any) for a project. Returns an empty string
+# if the `download-url' field should be omitted for this project.
+sub download_url (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ my $slug = $project->{"slug"};
+ $sth_download_url->bind_param (1, $id);
+ my $url = col ($sth_download_url, "link");
+
+ # Mark explicitly the lack of download-url.
+ return "none" if ! $url;
+
+ # Do magic to supress a download-url comforming to
+ # ftp://ftp.gnu.org/gnu/PACKAGE format.
+ return "" if $url =~ m#^ftp://ftp.gnu.org/gnu/$slug/?$#i;
+
+ return $url;
+}
+
+# Converts SQL ISO date format (YYYY-MM-DD) to Date::Calc YMD.
+sub iso_date_to_ymd ($)
+{
+ my ($iso_date) = @_;
+ my ($year, $month, $day) = split (/-/, $iso_date);
+ my @ymd = ($year, $month, $day);
+ return @ymd;
+}
+
+# Converts Date::Calc YMD to string.
+sub iso_date_to_str ($) {
+ my ($date) = @_;
+ $date =~ s/-//g;
+ return $date;
+}
+
+# Fetch activity-status for a project.
+sub activity_status (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ $sth_activity_status->bind_param (1, $id);
+ my $row = row ($sth_activity_status);
+
+ return "stale" if ! $row;
+
+ my $status = "stale";
+ my $comments = "";
+ if ($row->{"date"}) {
+ my @release = iso_date_to_ymd ($row->{"date"});
+ if (check_date (@release)) {
+ $status = "ok" if Delta_Days (@activity_threshold, @release) >= 0;
+ }
+ else {
+ $comments .= " Invalid release date: $row->{date}.";
+ }
+ }
+
+ my $date = $row->{"date"};
+ $date =~ tr/-//d if $date;
+ $date = "" if ! $date;
+
+ my $number = $row->{"name"};
+ if ($number and not ($number eq "NO_VERSION_DATA")) {
+ $number = " ($number)";
+ }
+ else {
+ $number = "";
+ }
+
+ my $result = "$status $date$number";
+ $result .= " #" . $comments if $comments;
+ return $result;
+}
+
+# Formats a category_id to be suitable for dumping.
+sub format_category ($)
+{
+ my ($id) = @_;
+ my @name_chain;
+ my @slug_chain;
+ do {
+ $sth_category->bind_param (1, $id);
+ my $cat = row ($sth_category);
+ my $name = $cat->{"name"};
+ my $slug = $cat->{"slug"};
+ push (@name_chain, $name);
+ push (@slug_chain, $slug);
+ $id = $cat->{"parent_category_id"};
+ } until ($id == 1);
+ my $names = join ("/", reverse (@name_chain));
+ my $slugs = join ("/", reverse (@slug_chain));
+ return "/$names (/$slugs)"
+}
+
+# Fetch categories for a project.
+sub categories (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ $sth_categories->bind_param (1, $id);
+ my $categories = all ($sth_categories);
+
+ my @result;
+ foreach my $category (@{$categories}) {
+ my $category_id = $category->{"category_id"};
+ push (@result, format_category ($category_id));
+ }
+ return sort (@result);
+}
+
+# Fetch related projects for a project.
+sub keywords (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ $sth_keywords->bind_param (1, $id);
+ my @keywords = all_col ($sth_keywords, "keyword");
+
+ return @keywords;
+}
+
+# Fetch related projects for a project.
+sub related (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ $sth_related->bind_param (1, $id);
+ my @related = all_col ($sth_related, "slug");
+
+ return @related;
+}
+
+# Fetch computer languages for a project.
+sub computer_languages (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ $sth_computer_languages->bind_param (1, $id);
+ my @computer_languages = all_col ($sth_computer_languages, "name");
+
+ return @computer_languages;
+}
+
+# Fetch subprograms for a project.
+sub subprograms (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ $sth_subprograms->bind_param (1, $id);
+ my @subprograms = all_col ($sth_subprograms, "name");
+
+ return @subprograms;
+}
+
+# Reformat paragraph text using coreutils' fmt.
+sub fmt ($)
+{
+ my ($str) = @_;
+ # write input to temp file
+ my $filename;
+ $filename = tmpnam ();
+ open TMP, ">$filename" or die "Can't open file: $!";
+ print TMP $str;
+ close TMP or die "Can't close file: $!";
+
+ # invoke fmt
+ open(FMT, "fmt $filename |") or die "Can't fork: $!";
+
+ # read output
+ my (@lines) = <FMT>;
+ close FMT or die "Can't close file: $!";
+
+ # delete temp file
+ unlink $filename or die "Can't delete file: $!";
+
+ return join ("", @lines);
+}
+
+# Formats long muliparagraph text to be suitable for dumping.
+sub format_full_descr ($)
+{
+ my ($descr) = @_;
+ my $out = fmt ($descr);
+ $out =~ s/\n/\n /g; # add space after every newline
+ $out =~ s/\s+$//; # trim trailing whitespace
+ return " " . $out;
+}
+
+# Fetch licenses for a project version.
+sub licenses (\%)
+{
+ my ($version) = @_;
+ my $id = $version->{"id"};
+ $sth_licenses->bind_param (1, $id);
+ return all_col ($sth_licenses, "slug");
+}
+
+# Fetch interfaces for a project version.
+sub interfaces (\%)
+{
+ my ($version) = @_;
+ my $id = $version->{"id"};
+ $sth_interfaces->bind_param (1, $id);
+ return all_col ($sth_interfaces, "name");
+}
+
+# Fetch versions for a project.
+sub versions (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ $sth_versions->bind_param (1, $id);
+ return all ($sth_versions);
+}
+
+# Dump a version.
+sub version (\%)
+{
+ my ($version) = @_;
+ my $name = $version->{"name"};
+ my $date = iso_date_to_str ($version->{"date"});
+ my $status = $version_status_enum{$version->{"status"}};
+ my $notes = $version->{"notes"};
+ my $license_verified_by = $version->{"license_verified_by"};
+ my $license_verified_on = iso_date_to_str
+ ($version->{"license_verified_on"});
+ my $source_code = $version->{"source_code"};
+ my $licenses = join (" | ", licenses (%$version));
+ my $interfaces = join (" | ", interfaces (%$version));
+ print "version: $name\n";
+ print " date: $date\n";
+ print " status: $status\n";
+ print " notes: $notes\n" if defined $notes and ! ($notes eq '');
+ print " license-verified-by: $license_verified_by\n";
+ print " license-verified-on: $license_verified_on\n";
+ print " source-code: $source_code\n"
+ if defined $source_code and ! ($source_code eq '');
+ print " licenses: $licenses\n" if ! ($licenses eq '');
+ print " interfaces: $interfaces\n" if ! ($interfaces eq '');
+}
+
+# Dump a project to STDOUT.
+sub project (\%)
+{
+ my ($project) = @_;
+ my $id = $project->{"id"};
+ my $slug = $project->{"slug"};
+ my $name = $project->{"name"};
+ print "package: $project->{slug}\n";
+
+ my $mundane_name = mundane_name (%$project);
+ print "mundane-name: $mundane_name\n" if $mundane_name;
+
+ my $homepage = homepage (%$project);
+ print "homepage: $homepage\n" if $homepage;
+
+ my $download_url = download_url (%$project);
+ print "download-url: $download_url\n" if $download_url;
+
+ my $checkout_cmd = $project->{"checkout_command"};
+ if (defined $checkout_cmd and ! ($checkout_cmd eq '')) {
+ print "checkout-command: $checkout_cmd\n";
+ }
+
+ my $activity_status = activity_status (%$project);
+ print "activity-status: $activity_status\n";
+
+ my $user_level = $user_level_enum{$project->{"user_level"}};
+ print "user-level: $user_level\n";
+
+ my $computer_lang = join (" | ", computer_languages (%$project));
+ print "computer-languages: $computer_lang\n" if ! ($computer_lang eq '');
+
+ my $subprograms = join (" | ", subprograms (%$project));
+ print "subprograms: $subprograms\n" if ! ($subprograms eq '');
+
+ print "category: $_\n" foreach (categories (%$project));
+
+ my $keywords = join (" | ", keywords (%$project));
+ print "keywords: $keywords\n" if ! ($keywords eq '');
+
+ my $related = join (" | ", related (%$project));
+ print "related-packages: $related\n" if ! ($related eq '');
+
+ print "entry-compiled-by: $project->{entry_compiled_by}\n";
+
+ my @updated = iso_date_to_str ($project->{"updated"});
+ print "updated: @updated\n";
+
+ my $full_descr = format_full_descr($project->{"full_description"});
+ print "description: $project->{short_description}\n";
+ print "$full_descr\n";
+
+ my $versions = versions (%$project);
+ for my $version (@{$versions}) {
+ version (%$version);
+ }
+
+ print "\n";
+}
+
+# Main entry point.
+sub main
+{
+ db_connect ();
+ my $projects = projects ();
+ foreach my $project (@{$projects}) {
+ project (%$project);
+ }
+ print STDERR "DONE: " . @{$projects} . " projects exported.\n";
+ db_disconnect ();
+ return 0;
+}
Index: fsd/fsd-schema.texi
===================================================================
RCS file: fsd/fsd-schema.texi
diff -N fsd/fsd-schema.texi
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ fsd/fsd-schema.texi 11 May 2019 10:44:53 -0000 1.1
@@ -0,0 +1,1281 @@
+\input texinfo
address@hidden %**start of header
address@hidden fsd-schema.info
address@hidden Free Software Directory DB Schema Reference
address@hidden lastupdate 06.06.2009
+
address@hidden
+
+This reference manual is for the database schema of the Free Software
+Directory, catalog of useful free software that runs under free
+operating systems — particularly the GNU operating system and its
+GNU/Linux address@hidden Last updated on @value{lastupdate}.
address@hidden 1
+Copyright @copyright{} 2008, 2009 Free Software Foundation, Inc.
+
address@hidden
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the @acronym{GNU} Free Documentation License,
+Version 1.2 or any later version published by the Free Software
+Foundation; with no Invariant Sections, no Front-Cover Texts, and no
+Back-Cover Texts. A copy of the license is included in the section
+entitled address@hidden Free Documentation License.''
address@hidden quotation
address@hidden copying
+
address@hidden
address@hidden Free Software Directory DB Schema Reference
address@hidden (last updated @value{lastupdate})
address@hidden by Kaloian Doganov <@email{kaloian@@gnu.org}>
address@hidden
address@hidden 0pt plus 1filll
address@hidden
address@hidden titlepage
+
address@hidden
+
address@hidden
address@hidden Top, Essential Concepts, (dir), (dir)
address@hidden Free Software Directory DB Schema Reference
address@hidden
address@hidden ifnottex
+
address@hidden
+* Essential Concepts::
+* Not Interesting:: Tables that are not directly related to the
+ Free Software Directory's essential data.
+* Index::
+* Copying This Manual:: The GNU Free Documentation License.
address@hidden menu
+
address@hidden Essential Concepts, Project, Top, Top
address@hidden Essential Concepts
+
address@hidden
+* Project::
+* Category::
+* Computer Language::
+* Entity::
+* Interface::
+* IRC Network::
+* IRC Resource::
+* Keyword::
+* Legacy Category::
+* License::
+* Software Requirement::
+* Subprogram::
+* Version::
+* Network Resource::
address@hidden menu
+
address@hidden Project, Category, Essential Concepts, Essential Concepts
address@hidden Project
+
+The primary purpose of the Free Software Directory is to catalog free
+software projects, so the project is the central and most complex
+entity represented in the database. The most important attributes of
+a project are stored in the @code{directory_project} table
+(@pxref{directory_project}).
+
+Projects are organized in categories (@pxref{Category}). The
+information about which projects is filed in which category is stored
+in the @code{directory_project_categories} table
+(@pxref{directory_project_categories}).
+
+A project can be implemented using one or more computer languages
+(@pxref{Computer Language}). Which project is implemented in which
+language is stored in the @code{directory_project_computer_languages}
+(@pxref{directory_project_computer_languages}).
+
+To facilitate the search function, one or more keywords
+(@pxref{Keyword}) could be associated with a project. Those
+associations are stored in the @code{directory_project_keywords} table
+(@pxref{directory_project_keywords}).
+
+A project can relate to one or more other projects in the Free
+Software Directory. Those relations are stored in the
address@hidden table
+(@pxref{directory_project_related}).
+
+Various public network resources (@pxref{Network Resource}) could be
+published for a project.
+
address@hidden
+* directory_project::
+* directory_project_categories::
+* directory_project_computer_languages::
+* directory_project_keywords::
+* directory_project_related::
address@hidden menu
+
address@hidden directory_project, directory_project_categories, Project, Project
address@hidden @code{directory_project}
+
address@hidden Column directory_project id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_project name
+Human readable name of the project.
address@hidden defcv
+
address@hidden Column directory_project slug
+Short system name of the project, free of funny characters.
address@hidden defcv
+
address@hidden Column directory_project user_level
+Single character that denotes the experience level of the audience for
+which the project is suitable. Possible values are:
+
address@hidden @samp
address@hidden 0
+Unknown (user level is not set yet);
+
address@hidden 1
+Beginner;
+
address@hidden 2
+Intermediate;
+
address@hidden 3
+Advanced.
+
address@hidden table
address@hidden defcv
+
address@hidden Column directory_project short_description
+One-line short description of the project.
address@hidden defcv
+
address@hidden Column directory_project full_description
+Longer text description of the project. Paragraphs are marked up in
+HTML-like manner with surrounding @code{<p>} and @code{</p>}, except
+for the first paragraph, which need not to be marked this way.
address@hidden defcv
+
address@hidden Column directory_project entry_compiled_by
+Name and e-mail address of the person who filled this project record
+in the database.
address@hidden defcv
+
address@hidden Column directory_project updated
+Stamp of the last time when this project record was updated.
address@hidden defcv
+
address@hidden Column directory_project gnu
+Boolean value pointing whether this project is official part of the
+GNU project or not.
+
address@hidden @code
address@hidden true
+Part of the GNU project;
+
address@hidden false
+Not part of the GNU project.
+
address@hidden table
address@hidden defcv
+
address@hidden Column directory_project documentation
+Plain text containing pointers to various project documentation,
+available online (if any).
address@hidden defcv
+
address@hidden Column directory_project screen_shot
+Currently unused.
address@hidden defcv
+
address@hidden Column directory_project source_template
+Unknown purpose. (FIXME)
address@hidden defcv
+
address@hidden Column directory_project comments
+Free text with HTML markup. Usually contains a copyright notice.
+Currently this value is not displayed to users on the web.
address@hidden defcv
+
address@hidden Column directory_project status
+FIXME
+Possible values are:
+
address@hidden @samp
address@hidden 1
+Published. The project is visible to users.
+
address@hidden 2
+FIXME. The project is not visible to users.
+
address@hidden 3
+FIXME. The project is not visible to users.
+
address@hidden 4
+FIXME. The project is not visible to users.
address@hidden table
address@hidden defcv
+
address@hidden Column directory_project checkout_command
+Shell command used to checkout the current sources from the public
+source code repository (if any).
address@hidden defcv
+
address@hidden Column directory_project rating_count
+The number of users that took the action to rate the project.
address@hidden defcv
+
address@hidden Column directory_project avg_rating
+The average project rating in the scale 0-5.
address@hidden defcv
+
address@hidden Column directory_project internal_notes
+Free text reserved for notes by the directory maintainers. This text
+is not published on the web.
address@hidden defcv
+
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_project"
+ Column | Type |
Modifiers
+-------------------+-------------------------+----------------------------------------------------------------
+ id | integer | not null default
nextval('directory_project_id_seq'::regclass)
+ name | character varying(80) | not null
+ slug | character varying(80) | not null
+ user_level | character varying(1) | not null
+ short_description | character varying(350) | not null
+ full_description | text | not null
+ entry_compiled_by | character varying(60) | not null
+ updated | date | not null
+ gnu | boolean | not null
+ documentation | text |
+ screen_shot | character varying(100) |
+ source_template | character varying(200) |
+ comments | text |
+ status | character varying(1) | not null
+ checkout_command | character varying(1000) |
+ rating_count | integer | not null
+ avg_rating | numeric(4,2) | not null
+ internal_notes | text |
+Indexes:
+ "directory_project_pkey" PRIMARY KEY, btree (id)
+ "directory_project_slug_uniq" UNIQUE, btree (slug)
address@hidden verbatim
+
address@hidden directory_project_categories,
directory_project_computer_languages, directory_project, Project
address@hidden @code{directory_project_categories}
+
+Represents a relationship between a project (@pxref{Project}) and a
+category (@pxref{Category}).
+
address@hidden Column directory_project_caterogies id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_project_caterogies project_id
+The id of the project record (@pxref{directory_project}) associated
+with the category.
address@hidden defcv
+
address@hidden Column directory_project_categories category_id
+The id of the category record (@pxref{directory_category}) associated
+with the project.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_project_categories"
+ Column | Type | Modifiers
+-------------+---------+---------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_project_categories_id_seq'::regclass)
+ project_id | integer | not null
+ category_id | integer | not null
+Indexes:
+ "directory_project_categories_pkey" PRIMARY KEY, btree (id)
+ "directory_project_categories_project_id_key" UNIQUE, btree (project_id,
category_id)
+Foreign-key constraints:
+ "directory_project_categories_category_id_fkey" FOREIGN KEY (category_id)
REFERENCES directory_category(id) DEFERRABLE INITIALLY DEFERRED
+ "directory_project_categories_project_id_fkey" FOREIGN KEY (project_id)
REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden directory_project_computer_languages,
directory_project_keywords, directory_project_categories, Project
address@hidden @code{directory_project_computer_languages}
+
+Represents a relationship between project (@pxref{Project}) and
+computer language (@pxref{Computer Language}).
+
address@hidden Column directory_project_computer_languages id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_project_computer_languages project_id
+The id of the project record (@pxref{directory_project}) associated
+with the computer language.
address@hidden defcv
+
address@hidden Column directory_project_computer_languages computerlanguage_id
+The id of the computer language record
+(@pxref{directory_computerlanguage}) associated with the project.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table
"public.directory_project_computer_languages"
+ Column | Type | Modifiers
+---------------------+---------+-----------------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_project_computer_languages_id_seq'::regclass)
+ project_id | integer | not null
+ computerlanguage_id | integer | not null
+Indexes:
+ "directory_project_computer_languages_pkey" PRIMARY KEY, btree (id)
+ "directory_project_computer_languages_project_id_key" UNIQUE, btree
(project_id, computerlanguage_id)
+Foreign-key constraints:
+ "directory_project_computer_languages_computerlanguage_id_fkey" FOREIGN
KEY (computerlanguage_id) REFERENCES directory_computerlanguage(id) DEFERRABLE
INITIALLY DEFERRED
+ "directory_project_computer_languages_project_id_fkey" FOREIGN KEY
(project_id) REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden directory_project_keywords, directory_project_related,
directory_project_computer_languages, Project
address@hidden @code{directory_project_keywords}
+
+Represents an association between project (@pxref{Project}) and
+keyword (@pxref{Keyword}).
+
address@hidden Column directory_project_keywords id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_project_keywords project_id
+The id of the project record (@pxref{directory_project}) associated
+with the keyword.
address@hidden defcv
+
address@hidden Column directory_project_keywords keyword_id
+The id of the keyword record (@pxref{directory_keyword}) associated
+with the project.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_project_keywords"
+ Column | Type | Modifiers
+------------+---------+-------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_project_keywords_id_seq'::regclass)
+ project_id | integer | not null
+ keyword_id | integer | not null
+Indexes:
+ "directory_project_keywords_pkey" PRIMARY KEY, btree (id)
+ "directory_project_keywords_project_id_key" UNIQUE, btree (project_id,
keyword_id)
+Foreign-key constraints:
+ "directory_project_keywords_keyword_id_fkey" FOREIGN KEY (keyword_id)
REFERENCES directory_keyword(id) DEFERRABLE INITIALLY DEFERRED
+ "directory_project_keywords_project_id_fkey" FOREIGN KEY (project_id)
REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden directory_project_related, , directory_project_keywords, Project
address@hidden @code{directory_project_related}
+
+Represents a directed edge (arrow) from a (tail) project to another
+(head) project. The set of all records in this table form the edges
+of a directed graph, where project records (@pxref{directory_project})
+are graph's nodes.
+
address@hidden Column directory_project_related id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_project_related from_project_id
+The id of the tail project record (@pxref{directory_project}).
address@hidden defcv
+
address@hidden Column directory_project_related to_project_id
+The id of the head project record (@pxref{directory_project}).
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_project_related"
+ Column | Type | Modifiers
+-----------------+---------+------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_project_related_id_seq'::regclass)
+ from_project_id | integer | not null
+ to_project_id | integer | not null
+Indexes:
+ "directory_project_related_pkey" PRIMARY KEY, btree (id)
+ "directory_project_related_from_project_id_key" UNIQUE, btree
(from_project_id, to_project_id)
+Foreign-key constraints:
+ "directory_project_related_from_project_id_fkey" FOREIGN KEY
(from_project_id) REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
+ "directory_project_related_to_project_id_fkey" FOREIGN KEY (to_project_id)
REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Category, Computer Language, Project, Essential Concepts
address@hidden Category
+
+Project entries in the Free Software Directory are organized in
+categories. Category is a general topic of some sort (for example,
+Science, Education, Audio, etc.) that classifies a project. A single
+project can be filed in more than one category.
+
+Categories are organized to form a tree hierarchy, where every
+category (except one) must have exactly one parent category. There is
+a single category with slug @code{index} and name @code{Top} that has
+no parent and serves as a tree root. All other categories have the
address@hidden category as it's parent, either directly or indirectly.
+
+Categories are represented in the table @code{directory_category}
+(@pxref{directory_category}). Assosiations between projects and
+categories (information about which project is filled in which
+category) are stored in the table @code{directory_project_categories}
+(@pxref{directory_project_categories}).
+
address@hidden
+* directory_category::
address@hidden menu
+
address@hidden directory_category,,, Category
address@hidden @code{directory_category}
+
address@hidden Column directory_category id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_category name
+Human readable name of the category.
address@hidden defcv
+
address@hidden Column directory_category slug
+Short system name of the category, free of funny characters.
address@hidden defcv
+
address@hidden Column directory_category description
+Long, human readable description. Usually empty.
address@hidden defcv
+
address@hidden Column directory_category parent_category_id
+If not null, points to the @code{id} of the parent category. Thus,
+all categories in the database form a tree structure where root is
+this category for which @code{parent_category_id} is @code{NULL}.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_category"
+ Column | Type |
Modifiers
+--------------------+------------------------+-----------------------------------------------------------------
+ id | integer | not null default
nextval('directory_category_id_seq'::regclass)
+ name | character varying(60) | not null
+ slug | character varying(50) | not null
+ description | character varying(120) | not null
+ parent_category_id | integer |
+Indexes:
+ "directory_category_pkey" PRIMARY KEY, btree (id)
+ "directory_category_slug_uniq" UNIQUE, btree (slug)
+ "directory_category_parent_category_id" btree (parent_category_id)
+Foreign-key constraints:
+ "parent_category_id_refs_id_349faff9" FOREIGN KEY (parent_category_id)
REFERENCES directory_category(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Computer Language, Entity, Category, Essential Concepts
address@hidden Computer Language
+
+The Free Software Directory keeps a list of all computer languages
+used to implement free software projects. The list is represented in
+the table @code{directory_computerlanguage}
+(@pxref{directory_computerlanguage}).
+
+A project is usually implemented in one or more computer languages.
+For example, Emacs is written in C and Lisp, and GnuCash is written in
+C and Scheme. This relationship between projects and computer
+languages is represented in the table
address@hidden
+(@pxref{directory_project_computer_languages}).
+
address@hidden
+* directory_computerlanguage::
address@hidden menu
+
address@hidden directory_computerlanguage,,, Computer Language
address@hidden @code{directory_computerlanguage}
+
address@hidden Column directory_computerlanguage id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_computerlanguage name
+Common name of the language in human-readable form. For example
address@hidden, @code{Lisp}, etc.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_computerlanguage"
+ Column | Type | Modifiers
+--------+-----------------------+-------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_computerlanguage_id_seq'::regclass)
+ name | character varying(80) | not null
+Indexes:
+ "directory_computerlanguage_pkey" PRIMARY KEY, btree (id)
+ "directory_computerlanguage_name_uniq" UNIQUE, btree (name)
address@hidden verbatim
+
address@hidden Entity, Interface, Computer Language, Essential Concepts
address@hidden Entity
+
+FIXME
+
address@hidden
+* directory_entity::
+* directory_entityrole::
address@hidden menu
+
address@hidden directory_entity, directory_entityrole,, Entity
address@hidden @code{directory_entity}
+
address@hidden Column directory_entity id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_entity name
+Common name of the person, organisation or team.
address@hidden defcv
+
address@hidden Column directory_entity url
+Homepage of the entity. Currently is usually empty.
address@hidden defcv
+
address@hidden Column directory_entity email
+Email address for contact. Currently almost all entity records have
+an email filled in.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_entity"
+ Column | Type | Modifiers
+--------+------------------------+---------------------------------------------------------------
+ id | integer | not null default
nextval('directory_entity_id_seq'::regclass)
+ name | character varying(100) | not null
+ url | character varying(500) |
+ email | character varying(75) |
+Indexes:
+ "directory_entity_pkey" PRIMARY KEY, btree (id)
address@hidden verbatim
+
address@hidden directory_entityrole,, directory_entity, Entity
address@hidden @code{directory_entityrole}
+
+Represents a relationship between an entity (@pxref{Entity}) and a
+project (@pxref{Project}).
+
address@hidden Column directory_entityrole id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_entityrole project_id
+The id of the project record (@pxref{directory_project}) associated
+with the entity.
address@hidden defcv
+
address@hidden Column directory_entityrole entity_id
+The id of the entity record (@pxref{directory_entity}) associated with
+the project.
address@hidden defcv
+
address@hidden Column directory_entityrole role
address@hidden @samp
address@hidden 1
+Maintainer
+
address@hidden 2
+Contributor
+
address@hidden 3
+Developer
+
address@hidden 4
+Sponsor
address@hidden table
address@hidden defcv
+
address@hidden Column directory_entityrole private
+Boolean value pointing whether this role shouldn't be displayed on the
+web.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_entityrole"
+ Column | Type | Modifiers
+------------+----------------------+-------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_entityrole_id_seq'::regclass)
+ project_id | integer | not null
+ entity_id | integer | not null
+ role | character varying(1) | not null
+ private | boolean | default false
+Indexes:
+ "directory_entityrole_pkey" PRIMARY KEY, btree (id)
+ "directory_entityrole_entity_id" btree (entity_id)
+ "directory_entityrole_project_id" btree (project_id)
+Foreign-key constraints:
+ "directory_entityrole_project_id_fkey" FOREIGN KEY (project_id) REFERENCES
directory_project(id) DEFERRABLE INITIALLY DEFERRED
+ "entity_id_refs_id_463c73" FOREIGN KEY (entity_id) REFERENCES
directory_entity(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Interface, IRC Network, Entity, Essential Concepts
address@hidden Interface
+
+Computer programs are used directly by users or by other programs
+using interfaces. The Free Software Directory keeps a list of all
+interfaces provided by free software projects. The list is
+represented in the table @code{directory_interface}
+(@pxref{directory_interface}).
+
+FIXME: explain relationship between versions and interfaces.
address@hidden A project could provide one or more interfaces, for example
address@hidden graphical interface (using the X Window System) and a console
address@hidden interface.
+
address@hidden
+* directory_interface::
address@hidden menu
+
address@hidden directory_interface,,, Interface
address@hidden @code{directory_interface}
+
address@hidden Column directory_interface id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_interface id
+Common name of the interface in human-readable form. For example
address@hidden Line}, @code{X Window System}, @code{Web}, etc.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_interface"
+ Column | Type | Modifiers
+--------+-----------------------+------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_interface_id_seq'::regclass)
+ name | character varying(25) | not null
+Indexes:
+ "directory_interface_pkey" PRIMARY KEY, btree (id)
+ "directory_interface_name_uniq" UNIQUE, btree (name)
address@hidden verbatim
+
address@hidden IRC Network, IRC Resource, Interface, Essential Concepts
address@hidden IRC Network
+
+FIXME
+
address@hidden
+* directory_ircnetwork::
address@hidden menu
+
address@hidden directory_ircnetwork,,, IRC Network
address@hidden @code{directory_ircnetwork}
+
+FIXME
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_ircnetwork"
+ Column | Type | Modifiers
+---------+------------------------+-------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_ircnetwork_id_seq'::regclass)
+ network | character varying(100) | not null
+Indexes:
+ "directory_ircnetwork_pkey" PRIMARY KEY, btree (id)
+ "directory_ircnetwork_network_uniq" UNIQUE, btree (network)
address@hidden verbatim
+
address@hidden IRC Resource, Keyword, IRC Network, Essential Concepts
address@hidden IRC Resource
+
+FIXME
+
address@hidden
+* directory_ircresource::
address@hidden menu
+
address@hidden directory_ircresource,,, IRC Resource
address@hidden @code{directory_ircresource}
+
+FIXME
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_ircresource"
+ Column | Type | Modifiers
+------------+------------------------+--------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_ircresource_id_seq'::regclass)
+ channel | character varying(100) | not null
+ purpose | character varying(1) | not null
+ network_id | integer | not null
+ project_id | integer | not null
+Indexes:
+ "directory_ircresource_pkey" PRIMARY KEY, btree (id)
+ "directory_ircresource_network_id" btree (network_id)
+ "directory_ircresource_project_id" btree (project_id)
+Foreign-key constraints:
+ "directory_ircresource_network_id_fkey" FOREIGN KEY (network_id)
REFERENCES directory_ircnetwork(id) DEFERRABLE INITIALLY DEFERRED
+ "directory_ircresource_project_id_fkey" FOREIGN KEY (project_id)
REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Keyword, Legacy Category, IRC Resource, Essential Concepts
address@hidden Keyword
+
+Projects (@pxref{Project}) in the directory can be tagged with one or
+more keywords. This way, projects could be discovered not only by
+their name or category (@pxref{Category}), but also by association
+with a keyword.
+
+The list of all keywords is stored in the table
address@hidden (@pxref{directory_keyword}). Assosiations
+between projects and keywords are stored in the table
address@hidden
+(@pxref{directory_project_keywords}).
+
address@hidden
+* directory_keyword::
address@hidden menu
+
address@hidden directory_keyword,,, Keyword
address@hidden @code{directory_keyword}
+
address@hidden Column directory_keyword id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_keyword keyword
+The keyword (or phrase) itself in plantext.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_keyword"
+ Column | Type | Modifiers
+---------+-----------------------+----------------------------------------------------------------
+ id | integer | not null default
nextval('directory_keyword_id_seq'::regclass)
+ keyword | character varying(80) | not null
+Indexes:
+ "directory_keyword_pkey" PRIMARY KEY, btree (id)
+ "directory_keyword_keyword_uniq" UNIQUE, btree (keyword)
address@hidden verbatim
+
address@hidden Legacy Category, License, Keyword, Essential Concepts
address@hidden Legacy Category
+
+FIXME
+
address@hidden
+* directory_legacycategory::
address@hidden menu
+
address@hidden directory_legacycategory,,, Legacy Category
address@hidden @code{directory_legacycategory}
+
+FIXME
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_legacycategory"
+ Column | Type |
Modifiers
+-------------+------------------------+-----------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_legacycategory_id_seq'::regclass)
+ category_id | integer | not null
+ hierarchy | character varying(100) | not null
+Indexes:
+ "directory_legacycategory_pkey" PRIMARY KEY, btree (id)
+ "directory_legacycategory_category_id" btree (category_id)
+Foreign-key constraints:
+ "directory_legacycategory_category_id_fkey" FOREIGN KEY (category_id)
REFERENCES directory_category(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden License, Software Requirement, Legacy Category, Essential
Concepts
address@hidden License
+
+FIXME
+
address@hidden
+* directory_license::
address@hidden menu
+
address@hidden directory_license,,, License
address@hidden @code{directory_license}
+
+FIXME
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_license"
+ Column | Type | Modifiers
+--------------+-----------------------+----------------------------------------------------------------
+ id | integer | not null default
nextval('directory_license_id_seq'::regclass)
+ slug | character varying(50) | not null
+ display_name | character varying(80) | not null
+ full_text | text | not null
+Indexes:
+ "directory_license_pkey" PRIMARY KEY, btree (id)
+ "directory_license_slug_uniq" UNIQUE, btree (slug)
address@hidden verbatim
+
address@hidden Software Requirement, Subprogram, License, Essential Concepts
address@hidden Software Requirement
+
+FIXME
+
address@hidden
+* directory_softwarerequirement::
address@hidden menu
+
address@hidden directory_softwarerequirement,,, Software Requirement
address@hidden @code{directory_softwarerequirement}
+
+FIXME
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_softwarerequirement"
+ Column | Type |
Modifiers
+------------+------------------------+----------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_softwarerequirement_id_seq'::regclass)
+ name | character varying(200) | not null
+ project_id | integer | not null
+ purpose | character varying(1) | not null
+Indexes:
+ "directory_softwarerequirement_pkey" PRIMARY KEY, btree (id)
+ "directory_softwarerequirement_project_id" btree (project_id)
+Foreign-key constraints:
+ "directory_softwarerequirement_project_id_fkey" FOREIGN KEY (project_id)
REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Subprogram, Version, Software Requirement, Essential Concepts
address@hidden Subprogram
+
+FIXME
+
address@hidden
+* directory_subprogram::
address@hidden menu
+
address@hidden directory_subprogram,,, Subprogram
address@hidden @code{directory_subprogram}
+
+FIXME
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_subprogram"
+ Column | Type | Modifiers
+------------+-----------------------+-------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_subprogram_id_seq'::regclass)
+ name | character varying(80) |
+ project_id | integer | not null
+Indexes:
+ "directory_subprogram_pkey" PRIMARY KEY, btree (id)
+ "directory_subprogram_project_id" btree (project_id)
+Foreign-key constraints:
+ "directory_subprogram_project_id_fkey" FOREIGN KEY (project_id) REFERENCES
directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Version, Network Resource, Subprogram, Essential Concepts
address@hidden Version
+
+Over time, a typical software project (@pxref{Project}) makes one or
+more releases, or is available in more than one variant -- stable,
+testing or development, each suitable for specific audience. Those
+different releases of a project are called @emph{versions} in the
+terms of the Free Software Database. A project could have many
+versions, but one version belongs exactly to one project. The most
+important attributes of a version are stored in the
address@hidden table (@pxref{directory_version}).
+
+Each version could provide it's own set of interfaces
+(@pxref{Interface}). The information about what interfaces are
+provided by a version is stored in the
address@hidden table
+(@pxref{directory_version_interfaces}).
+
+Also, a version could come with it's own license (or set of licenses).
+(@pxref{License}). The information about which licences are
+applicable for a version is stored in the
address@hidden table
+(@pxref{directory_version_licenses}).
+
address@hidden
+* directory_version::
+* directory_version_interfaces::
+* directory_version_licenses::
address@hidden menu
+
address@hidden directory_version, directory_version_interfaces,, Version
address@hidden @code{directory_version}
+
address@hidden Column directory_version id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_version name
+Unique string that identifies the version among all other versions of
+the same project. Usually contains the so called version number, for
+example @samp{21.1} or @samp{1.0beta}. When such number is not
+available, this column contains the string literal
address@hidden
address@hidden defcv
+
address@hidden Column directory_version date
+The date when this version is released.
address@hidden defcv
+
address@hidden Column directory_version status
+Code maturity. Possible values are:
+
address@hidden @samp
address@hidden 2
+Alpha
+
address@hidden 3
+Beta
+
address@hidden 4
+Developmental
+
address@hidden 5
+Testing
+
address@hidden 6
+Unstable
+
address@hidden 7
+Stable
+
address@hidden 8
+Mature
+
address@hidden table
address@hidden defcv
+
address@hidden Column directory_version project_id
+The id of the project record (@pxref{directory_project}) which has
+released this version.
address@hidden defcv
+
address@hidden Column directory_version notes
+Arbitrary string, visualised on the web next to the version's
address@hidden
address@hidden defcv
+
address@hidden Column directory_version license_verified_by_id
+The id of the directory operator (FIXME: reference to auth_user) that
+is responsible for license verification.
address@hidden defcv
+
address@hidden Column directory_version license_verified_on
+The date on which the license verification is completed.
address@hidden defcv
+
address@hidden Column directory_version source_archive
+Currently unused.
address@hidden defcv
+
address@hidden Column directory_version source_code
+Provides means of retrieving the source code. Usually contains a
+public URL of the release tarball. If such an URL is not available
+for some reason, then the column contains notes explaining other means
+of retrieving the source code, like using source control system or
+person that should be contacted.
address@hidden defcv
+
address@hidden Column directory_version deb_system
+Currently unused.
address@hidden defcv
+
address@hidden Column directory_version rpm_system
+Currently unused.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_version"
+ Column | Type |
Modifiers
+------------------------+------------------------+----------------------------------------------------------------
+ id | integer | not null default
nextval('directory_version_id_seq'::regclass)
+ name | character varying(20) | not null
+ date | date | not null
+ status | character varying(1) | not null
+ project_id | integer | not null
+ notes | text |
+ license_verified_by_id | integer | not null
+ license_verified_on | date | not null
+ source_archive | character varying(100) |
+ source_code | character varying(500) | not null
+ deb_system | character varying(500) |
+ rpm_system | character varying(500) |
+Indexes:
+ "directory_version_pkey" PRIMARY KEY, btree (id)
+ "directory_version_license_verified_by_id" btree (license_verified_by_id)
+ "directory_version_project_id" btree (project_id)
+Foreign-key constraints:
+ "directory_version_license_verified_by_id_fkey" FOREIGN KEY
(license_verified_by_id) REFERENCES auth_user(id) DEFERRABLE INITIALLY DEFERRED
+ "directory_version_project_id_fkey" FOREIGN KEY (project_id) REFERENCES
directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden directory_version_interfaces, directory_version_licenses,
directory_version, Version
address@hidden @code{directory_version_interfaces}
+
+Represents a relationship between a version (@pxref{Version}) and an
+interface (@pxref{Interface}).
+
address@hidden Column directory_version_interfaces id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_version_interfaces version_id
+The id of the version record (@pxref{directory_version}) associated
+with the interface.
address@hidden defcv
+
address@hidden Column directory_version_interfaces interface_id
+The id of the interface record (@pxref{directory_interface})
+associated with the version.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_version_interfaces"
+ Column | Type | Modifiers
+--------------+---------+---------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_version_interfaces_id_seq'::regclass)
+ version_id | integer | not null
+ interface_id | integer | not null
+Indexes:
+ "directory_version_interfaces_pkey" PRIMARY KEY, btree (id)
+ "directory_version_interfaces_version_id_key" UNIQUE, btree (version_id,
interface_id)
+Foreign-key constraints:
+ "directory_version_interfaces_interface_id_fkey" FOREIGN KEY
(interface_id) REFERENCES directory_interface(id) DEFERRABLE INITIALLY DEFERRED
+ "directory_version_interfaces_version_id_fkey" FOREIGN KEY (version_id)
REFERENCES directory_version(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden directory_version_licenses,, directory_version_interfaces,
Version
address@hidden @code{directory_version_licenses}
+
+Represents a relationship between a version (@pxref{Version}) and a
+license (@pxref{License}).
+
address@hidden Column directory_version_licenses id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_version_licenses version_id
+The id of the version record (@pxref{directory_version}) associated
+with the license.
address@hidden defcv
+
address@hidden Column directory_version_licenses license_id
+The id of the license record (@pxref{directory_license}) associated
+with the version.
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_version_licenses"
+ Column | Type | Modifiers
+------------+---------+-------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_version_licenses_id_seq'::regclass)
+ version_id | integer | not null
+ license_id | integer | not null
+Indexes:
+ "directory_version_licenses_pkey" PRIMARY KEY, btree (id)
+ "directory_version_licenses_version_id_key" UNIQUE, btree (version_id,
license_id)
+Foreign-key constraints:
+ "directory_version_licenses_license_id_fkey" FOREIGN KEY (license_id)
REFERENCES directory_license(id) DEFERRABLE INITIALLY DEFERRED
+ "directory_version_licenses_version_id_fkey" FOREIGN KEY (version_id)
REFERENCES directory_version(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Network Resource, Not Interesting, Version, Essential Concepts
address@hidden Network Resource
+
+A typical free software project publishes various kinds of network
+resources -- like homepage, mailing list archives or newsgroups. Most
+of those various kinds of resources can be addressed to a specific
+audience. For example, a project could use two different mailing
+lists -- one intended for general users and another for developers.
+Such network resources are represented in the table
address@hidden
+(@pxref{directory_projectwebresource}).
+
address@hidden
+* directory_projectwebresource::
address@hidden menu
+
address@hidden directory_projectwebresource, , Network Resource, Network
Resource
address@hidden @code{directory_projectwebresource}
+
+The name of this table is somewhat misleading since it keeps records
+for various kind of network resources, not just web addresses.
+
address@hidden Column directory_projectwebresource id
+Primary key.
address@hidden defcv
+
address@hidden Column directory_projectwebresource link
+Network address. This may be an URL, email address, etc. according to
+the value of the @code{kind} column.
address@hidden defcv
+
address@hidden Column directory_projectwebresource project_id
+The id of the project record (@pxref{directory_project}) for which
+this resource is about.
address@hidden defcv
+
address@hidden Column directory_projectwebresource audience
+Intended audience that might find this resource useful. Possible
+values are:
+
address@hidden @samp
address@hidden 1
+Developers
+
address@hidden 2
+User Support
+
address@hidden 3
+Bug Tracking
+
address@hidden 4
+Announcement
+
address@hidden 5
+General
address@hidden table
address@hidden defcv
+
address@hidden Column directory_projectwebresource kind
+FIXME. Possible values are:
+
address@hidden @samp
address@hidden 1
+Mailing List Subscribe
+
address@hidden 2
+Mailing List Info/Archive
+
address@hidden 3
+Forum
+
address@hidden 4
+VCS Repository Webview
+
address@hidden 5
+Homepage
+
address@hidden 6
+Bug Tracker
+
address@hidden 7
+ChangeLog
+
address@hidden 8
+E-mail
+
address@hidden 9
+Newsgroup (NNTP)
+
address@hidden 10
+Paid support information. The link usually contains free text with
+inline URLs, for example: @samp{Paid technical support available from
+http://foo.com/support.html}.
+
address@hidden 11
+Download
address@hidden table
+
address@hidden defcv
+
address@hidden @command{psql} description
+
address@hidden
+ Table "public.directory_projectwebresource"
+ Column | Type |
Modifiers
+------------+-------------------------+---------------------------------------------------------------------------
+ id | integer | not null default
nextval('directory_projectwebresource_id_seq'::regclass)
+ link | character varying(1000) | not null
+ project_id | integer | not null
+ audience | character varying(2) | not null
+ kind | character varying(2) | not null
+Indexes:
+ "directory_projectwebresource_pkey" PRIMARY KEY, btree (id)
+ "directory_projectwebresource_project_id" btree (project_id)
+Foreign-key constraints:
+ "directory_projectwebresource_project_id_fkey" FOREIGN KEY (project_id)
REFERENCES directory_project(id) DEFERRABLE INITIALLY DEFERRED
address@hidden verbatim
+
address@hidden Not Interesting, Index, Network Resource, Top
address@hidden Tables that are not directly related to the FSD data
+
address@hidden
address@hidden
+auth_group
+
address@hidden
+auth_group_permissions
+
address@hidden
+auth_message
+
address@hidden
+auth_permission
+
address@hidden
+auth_user
+
address@hidden
+auth_user_groups
+
address@hidden
+auth_user_user_permissions
+
address@hidden
+django_admin_log
+
address@hidden
+django_content_type
+
address@hidden
+django_redirect
+
address@hidden
+django_session
+
address@hidden
+django_site
address@hidden itemize
+
address@hidden Index, Copying This Manual, Not Interesting, Top
address@hidden Index
+
address@hidden cp
+
address@hidden Copying This Manual, , Index, Top
address@hidden GNU Free Documentation License
+
+FIXME: Insert GFDL here.
+
address@hidden
Index: rec/pkgblurbs.rec
===================================================================
RCS file: rec/pkgblurbs.rec
diff -N rec/pkgblurbs.rec
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rec/pkgblurbs.rec 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,2855 @@
+# $Id: pkgblurbs.rec,v 1.1 2019/05/11 10:44:54 ineiev Exp $
+# Public domain.
+#
+# This file is maintained in the CVS repository of GNU womb,
+# http://cvs.savannah.gnu.org/viewvc/gnumaint/?root=womb
+#
+# This file specifies a short blurb for each GNU package. These are
+# used by www.gnu.org, GSRC, and Guix.
+
+%rec: Blurb
+%doc: Extended package descriptions
+%key: id
+%mandatory: package blurb
+# Unless the blurb is a redirect or null (e.g. for a new package), it
+# should be at least 70 characters long.
+%constraint: blurb ~ ".{70,}" || blurb ~ "^redirect" || blurb ~ "^null"
+
+
+id: 3dldf_blurb
+package: 3dldf
+blurb: GNU 3DLDF supports 3D drawing with output to the MetaPost format via
++ a language similar to Metafont. It is primarily
++ intended to provide a means of creating 3D content for TeX documents,
++ but it can also create animations containing text typeset by TeX.
+
+id: 8sync_blurb
+package: 8sync
+blurb: 8sync (pronounced "eight-sync") is an asynchronous programming library
++ for GNU Guile. It makes use of delimited continuations to avoid a mess of
++ callbacks, resulting in clean, easy-to-read, non-blocking code.
+
+id: a2ps_blurb
+package: a2ps
+blurb: GNU a2ps converts almost anything to a PostScript file, ready for
++ printing. It accomplishes this by being able to delegate files to
++ external handlers, such as Groff and Gzip. It handles as many steps
++ as is necessary to produce a pretty-printed file. It also includes
++ some extra abilities for special cases, such as pretty-printing
++ "--help" output.
+
+id: acct_blurb
+package: acct
+blurb: GNU acct provides a means for system administrators to determine
++ system usage patterns. It provides information on, for example,
++ connections, programs executed, and system resources used.
+
+id: acm_blurb
+package: acm
+blurb: GNU ACM is a flight simulator in which players can compete in aerial
++ combat from different computers, piloting well-equipped jet aircraft
++ similar to an F-16C Falcon or a MiG-29 Fulcrum.
+
+id: adns_blurb
+package: adns
+blurb: GNU adns is a C library that provides easy-to-use DNS resolution
++ functionality. The library is asynchronous, allowing several
++ concurrent calls. The package also includes several command-line
++ utilities for use in scripts.
+
+id: alive_blurb
+package: alive
+blurb: GNU Alive sends periodic pings to a server, generally to keep a
++ connection alive.
+
+id: anubis_blurb
+package: anubis
+blurb: Anubis is a daemon that sits between the Mail User Agent (MUA) and
++ the Mail Transfer Agent (MTA). When a mail is sent by a user in the
++ MUA, it is first passed to Anubis, which performs additional
++ processing to the message before passing it on for delivery by the
++ MTA. Anubis may, for example, modify the message headers or body, or
++ encrypt or sign the message.
+
+id: apl_blurb
+package: apl
+blurb: GNU APL is a free interpreter for the programming language APL. It is
++ an implementation of the ISO standard 13751.
+
+id: archimedes_blurb
+package: archimedes
+blurb: Archimedes is a free package for semiconductor device simulations.
++ It is intended to assist engineers in designing and simulating
++ submicron and mesoscopic semiconductor devices based on the Ensemble
++ Monte Carlo method. It is able to handle a wide variety of materials
++ and structures, which are described through simple scripts.
+
+id: aris_blurb
+package: aris
+blurb: Aris is a program for performing logical proofs. It supports
++ propositional and predicate logic, as well as Boolean algebra and
++ arithmetical logic. In addition to its predefined inference and
++ equivalence rules, Aris also supports references to older proofs.
++ Its use of standard logical symbols and its natural deduction
++ interface make it easy to use for beginners.
+
+id: artanis_blurb
+package: artanis
+blurb: GNU Artanis is a web application framework written in Guile
++ Scheme. A web application framework (WAF) is a software framework
++ that is designed to support the development of dynamic websites, web
++ applications, web services and web resources. The framework aims to
++ alleviate the overhead associated with common activities performed in
++ web development. Artanis provides several tools for web development:
++ database access, templating frameworks, session management,
++ URL-remapping for RESTful, page caching, and more.
+
+id: aspell_blurb
+package: aspell
+blurb: Aspell is a spell-checker which can be used either as a library or as
++ a standalone program. Notable features of Aspell include its full
++ support of documents written in the UTF-8 encoding and its ability to
++ use multiple dictionaries, including personal ones.
+
+id: auctex_blurb
+package: auctex
+blurb: AUCTeX is an integrated environment for producing TeX documents in
++ Emacs. It allows many different standard TeX macros to be inserted
++ with simple keystrokes or menu selection. It offers an interface to
++ external programs, enabling you to compile or view your documents
++ from within Emacs. AUCTeX also features the ability to place inline
++ previews of complex TeX statements such as mathematical formulae.
+
+id: autoconf_blurb
+package: autoconf
+blurb: Autoconf offers the developer a robust set of M4 macros which expand
++ into shell code to test the features of Unix-like systems and to
++ adapt automatically their software package to these systems. The
++ resulting shell scripts are self-contained and portable, freeing the
++ user from needing to know anything about Autoconf or M4.
+
+id: autoconf_archive_blurb
+package: autoconf-archive
+blurb: Autoconf Archive is a collection of over 450 new macros for Autoconf,
++ greatly expanding the domain of its functionality. These macros have
++ been contributed as free software by the community.
+
+id: autogen_blurb
+package: autogen
+blurb: AutoGen is a program to ease the maintenance of programs that contain
++ large amounts of repetitive text. It automates the construction of
++ these sections of the code, simplifying the task of keeping the
++ text in sync. It also includes an
++ add-on package called AutoOpts, which is specialized for the
++ maintenance and documentation of program options.
+
+id: automake_blurb
+package: automake
+blurb: Automake the part of the GNU build system for producing
++ standards-compliant Makefiles. Build requirements are entered in an
++ intuitive
++ format and then Automake works with Autoconf to produce a robust
++ Makefile, simplifying the entire process for the developer.
+
+id: avl_blurb
+package: avl
+blurb: libavl provides a large collection of binary search tree and balanced
++ tree routines for C. These trees offer at least O(log n) performance
++ for usually costly operations such as searching, inserting or
++ deleting items from a data structure.
+
+id: ballandpaddle_blurb
+package: ballandpaddle
+blurb: Ball and Paddle is a classic arcade game in which you use a paddle at
++ the bottom of the screen to bounce a ball against bricks in the upper
++ region, eliminating the bricks as they are hit. As a novel twist,
++ events and attributes of all the objects (bricks, ball, etc.) may be
++ scripted with GNU Guile.
+
+id: barcode_blurb
+package: barcode
+blurb: GNU Barcode is a flexible tool to produce printed barcodes from text
++ strings. It supports a variety of encoding standards and sizing
++ measurements. Barcodes can be output in PostScript or Encapsulated
++ PostScript formats.
+
+id: bash_blurb
+package: bash
+blurb: Bash is the shell, or command-line interpreter, of the GNU system. It
++ is compatible with the Bourne Shell, but it also integrates useful
++ features from the Korn Shell and the C Shell and new improvements of
++ its own. It allows command-line editing, unlimited command history,
++ shell functions and aliases, and job control while still allowing
++ most sh scripts to be run without modification.
+
+id: bayonne_blurb
+package: bayonne
+blurb: Bayonne is the telephony server of the GNU Telephony project. It
++ offers a scalable environment for the development and deployment of
++ telephony solutions, with a focus on SIP.
+
+id: bc_blurb
+package: bc
+blurb: bc is an arbitrary precision numeric processing language. It
++ includes an interactive environment for evaluating mathematical
++ statements. Its syntax is similar to that of C, so basic usage is
++ familiar. It also includes "dc", a reverse-polish calculator.
+
+id: bfd_blurb
+package: bfd
+blurb: redirect binutils
+
+id: binutils_blurb
+package: binutils
+blurb: GNU Binutils is a collection of tools for working with binary files.
++ Perhaps the most notable are "ld", a linker, and "as", an assembler.
++ Other tools include programs to display binary profiling
++ information, list the strings in a binary file,
++ and utilities for working with archives. The "bfd" library for
++ working with executable and object formats is also included.
+
+id: bison_blurb
+package: bison
+blurb: GNU Bison is a general-purpose parser generator. It can build a
++ deterministic or generalized LR parser from an annotated,
++ context-free grammar. It is versatile enough to have many
++ applications, from parsers for simple tools through complex
++ programming languages.
+
+id: bool_blurb
+package: bool
+blurb: GNU Bool is a utility to perform text searches on files using Boolean
++ expressions. For example, a search for "hello AND world" would
++ return a file containing the phrase "Hello, world!". It supports
++ both AND and OR statements, as well as the NEAR statement to search
++ for the occurrence of words in close proximity to each other. It
++ handles context gracefully, accounting for new lines and paragraph
++ changes. It also has robust support for parsing HTML files.
+
+id: bpel2owfn_blurb
+package: bpel2owfn
+blurb: GNU BPEL2oWFN translates a web service expressed in Web Service Business
++ Process Execution Language (WS-BPEL) into an open Workflow Net
++ (oWFN). It may additionally convert a BPEL4Chor choreography to a
++ Petri Net model. Properties of Petri Nets may be analyzed
++ efficiently, due to the use of static analysis to make the models
++ compact. Control and data flow analysis, as well as basic checks for
++ deadlocks and other such properties are available.
+
+id: bazaar_blurb
+package: bazaar
+blurb: GNU Bazaar is a version control system that allows
++ you to record changes
++ to project files over time.
++ It supports both a distributed workflow
++ as well as the classic centralized workflow.
+
+id: c_graph_blurb
+package: c-graph
+blurb: GNU C-Graph is a tool for demonstrating the theory of convolution.
Thus,
++ it can serve as an excellent aid to students of signal and systems
++ theory in visualizing the convolution process. Rather than forcing
++ the student to write code, the program offers an intuitive interface
++ with interactive dialogs to guide them.
+
+id: ccaudio_blurb
+package: ccaudio
+blurb: GNU ccAudio2 is a portable C++ class for working with audio data from
++ disk. The classes are both endian and content aware; rather than
++ treating audio as binary data, this library treats it as an sequence
++ of samples. It can also handle metadata information. ccAudio2
++ supports sun audio, raw samples, and RIFF encoded audio data.
+
+id: ccd2cue_blurb
+package: ccd2cue
+blurb: GNU ccd2cue is a preprocessor for CD burning software that allows
++ the conversion of the proprietary CCD format to the CUE format, which
++ is well-supported by free software. These files are commonly
++ distributed with CD images and are used to describe how tracks are
++ laid out on the image.
+
+id: ccide_blurb
+package: ccide
+blurb: GNU Ccide is a decision table code generator for the C language. This
++ helps to avoid unmanageable and error-prone chains of nested if-else
++ statements. Instead, decision tables are entered in an intuitive and
++ easy-to-read format, which is then expanded into portable C code.
+
+id: ccrtp_blurb
+package: ccrtp
+blurb: GNU ccRTP is an implementation of RTP, the real-time transport protocol
++ from the IETF. It is suitable both for high capacity servers and
++ personal client applications. It is flexible in its design, allowing
++ it to function as a framework for the framework, rather than just
++ being a packet-manipulation library.
+
+id: ccscript_blurb
+package: ccscript
+blurb: GNU ccScript3 is a library to add a virtual machine execution system for
++ use with/as a scripting or assembler language for real-time,
++ state-transition driven systems.
+
+id: cfengine_blurb
+package: cfengine
+blurb: Cfengine, or the configuration engine, is an agent/software robot to
++ configure and administer large computer networks. It also functions
++ as a high-level language for designing expert systems to perform such
++ tasks. It consists of a primitive intelligence for defining and
++ automating the configuration and maintenance of the system state.
+
+id: cflow_blurb
+package: cflow
+blurb: GNU cflow analyzes C source files and produces a graph charting the
++ control flow of the program. It can output the graph in several
++ styles and in either the POSIX format or in an extended GNU format.
++ cflow also includes a major mode for Emacs for examining the
++ flowcharts that it produces.
+
+id: cgicc_blurb
+package: cgicc
+blurb: GNU cgicc is an ANSI-compliant C++ library for writing CGI applications,
++ featuring support for FastCGI. The library supports several features,
++ including handling both GET and POST data, handling a variety of form
++ data types, and on-the-fly HTML generation.
+
+id: chess_blurb
+package: chess
+blurb: GNU Chess is a chess engine. It allows you to compete against the
++ computer in a game of chess, either through the default terminal
++ interface or via an external visual interface such as GNU XBoard.
+
+id: cim_blurb
+package: cim
+blurb: Cim is the GNU compiler for Simula, the first object-oriented
++ programming language.
+
+id: classpath_blurb
+package: classpath
+blurb: GNU Classpath provides essential libraries for Java virtual machines
++ and compilers. It is compatible with a large percentage of the
++ language API specifications and provides a wide array of
++ functionality.
+
+id: classpathx_blurb
+package: classpathx
+blurb: null (inactive, mostly merged into classpath)
+
+id: clisp_blurb
+package: clisp
+blurb: GNU CLISP is an implementation of ANSI Common Lisp. Common Lisp is a
++ high-level, object-oriented functional programming language. CLISP
++ includes an interpreter, a compiler, a debugger, and much more.
+
+id: combine_blurb
+package: combine
+blurb: GNU combine works to merge files based on a common key in a hash table.
++ It can be seen as similar to, albeit much more powerful than, the
++ standard "join" utility. Unlike "join", any number of files
++ may be merged based on the matches found. combine also has other
++ advanced features, such as date parsing and directory traversal.
+
+id: commoncpp_blurb
+package: commoncpp
+blurb: GNU Common C++ is an portable, optimized class framework for
++ threaded applications, supporting concurrent synchronization,
++ inter-process communications via sockets, and various methods for data
++ handling, such as serialization and XML parsing. It includes the uCommon
++ C++ library, a smaller reimplementation.
+
+id: complexity_blurb
+package: complexity
+blurb: GNU complexity provides tools for finding procedures that are
++ convoluted, overly long or otherwise difficult to understand. This
++ may help in learning or reviewing unfamiliar code or perhaps
++ highlighting your own code that seemed comprehensible when you wrote it.
+
+id: config_blurb
+package: config
+blurb: The "config.guess" script tries to guess a canonical system triple,
++ and "config.sub" validates and canonicalizes. These are used as part
++ of configuration in nearly all GNU packages (and many others).
+
+id: consensus_blurb
+package: consensus
+blurb: null (container for network work)
+
+id: coreutils_blurb
+package: coreutils
+blurb: GNU Coreutils includes all of the basic command-line tools that are
++ expected in a POSIX system. These provide the basic file, shell and
++ text manipulation functions of the GNU system. Most of these tools
++ offer extended functionality beyond that which is outlined in the
++ POSIX standard.
+
+id: cpio_blurb
+package: cpio
+blurb: GNU cpio copies files into or out of cpio or tar archives.
++ Indeed, many formats are supported, including legacy formats. The
++ format is determined automatically by the program and is handled
++ appropriately. Furthermore, the location of the archive is not
++ important. It can be another file on the drive, a tape, or data on a
++ pipe.
+
+id: cppi_blurb
+package: cppi
+blurb: GNU Cppi processes C source code files to properly indent the
++ preprocessor directives to reflect their nesting. It also performs
++ other standardizations, such as correcting the number of spaces
++ between directives and the text following them.
+
+id: cssc_blurb
+package: cssc
+blurb: GNU CSSC provides a replacement for the legacy Unix source code control
++ system SCCS. This allows old code still under that system to be
++ accessed and migrated on modern systems.
+
+id: cursynth_blurb
+package: cursynth
+blurb: GNU cursynth is a polyphonic synthesizer that runs graphically
++ in the terminal. It is built on a full-featured subtractive synthesis
++ engine. Notes and parameter changes may be entered via MIDI or the
++ computer's keyboard.
+
+id: dap_blurb
+package: dap
+blurb: GNU Dap is a statistics and graphics package. It can read programs
++ written for the proprietary statistics system SAS. Its syntax is
++ similar to, but simpler than C, making performing most tasks
++ relatively easy while still providing advanced graphical
++ capabilities.
+
+id: datamash_blurb
+package: datamash
+blurb: Perform basic numeric, textual and statistical operations on
++ plain text files. Designed to work within standard pipelines without
++ additional code.
+
+id: dc_blurb
+package: dc
+blurb: redirect bc
+
+id: dia_blurb
+package: dia
+blurb: redirect gnome
+
+id: direvent_blurb
+package: direvent
+blurb: A daemon that monitors directories for events, such as creating,
++ deleting or modifying files. It can monitor different sets of
++ directories for different events. When an event is detected, direvent
++ calls a specified external program with information about the event,
++ such as the location within the file system where it occurred. Thus,
++ "direvent" provides an easy way to react immediately if given files
++ undergo changes, for example, to track changes in important system
++ configuration files.
+
+id: djgpp_blurb
+package: djgpp
+blurb: null (DOS-only package)
+
+id: dr_geo_blurb
+package: dr-geo
+blurb: null (stale)
+
+id: ddd_blurb
+package: ddd
+blurb: GNU DDD, the Data Display Debugger, is a graphical front-end for
++ command-line debuggers. Many back-end debuggers are supported, notably
++ the GNU debugger, GDB. In addition to usual debugging features
++ such as viewing the source files, DDD has additional graphical,
++ interactive features to aid in debugging.
+
+id: ddrescue_blurb
+package: ddrescue
+blurb: GNU ddrescue is a fully automated data recovery tool. It copies data
++ from one file to another, working to rescue data in case of read
++ errors. The program also includes a tool for manipulating its
++ log files, which are used to recover data more efficiently by only
++ reading the necessary blocks.
+
+id: dejagnu_blurb
+package: dejagnu
+blurb: DejaGnu is a framework for testing software. In effect, it serves as
++ a front-end for all tests written for a program. Thus, each program
++ can have multiple test suites, which are then all managed by a
++ single harness.
+
+id: denemo_blurb
+package: denemo
+blurb: GNU Denemo is a music notation editor that provides a convenient
++ interface to the powerful music engraving program Lilypond. Music
++ can be typed in using the computer keyboard, played in using a MIDI
++ keyboard, or even input via a microphone connected to the sound card.
++ The final product is publication-quality music notation that is
++ continuously generated in the background while you work.
+
+id: dico_blurb
+package: dico
+blurb: GNU Dico implements a flexible dictionary server and client according
++ to RFC 2229 (DICT Server). It is able to access any database
++ available, regardless of format, thanks to its modular structure.
++ New modules may be written in C, Guile or Python. Dico also includes
++ a command-line client, which may be used to query remote dictionary
++ databases.
+
+id: diction_blurb
+package: diction
+blurb: A package providing two classic Unix commands, style and diction.
++ Diction is used to identify wordy and commonly misused phrases in a
++ body of text. Style instead analyzes surface aspects of a written
++ work, such as sentence length and other readability measures.
+
+id: diffutils_blurb
+package: diffutils
+blurb: GNU Diffutils is a package containing tools for finding the
++ differences between files. The "diff" command is used to show how two
++ files differ, while "cmp" shows the offsets and line numbers where they
++ differ. "diff3" allows you to compare three files. Finally, "sdiff"
++ offers an interactive means to merge two files.
+
+id: dionysus_blurb
+package: dionysus
+blurb: GNU Dionysus is a convenient system for quickly retrieving the values of
++ mathematical constants used in science and engineering. Values can
++ be searched using a simple command-line tool, choosing from three
++ databases: universal constants, atomic numbers, and constants related
++ to semiconductors.
+
+id: dominion_blurb
+package: dominion
+blurb: GNU Dominion is a multi-player world simulation game. In it,
++ each player rules a nation and must maintain their nation in the face
++ of competition from the other players. Players must make political,
++ economical, military and diplomatic decisions in order for their
++ nations to survive. This game is intended to be played by players all
++ with access to the same computer system.
+
+id: easejs_blurb
+package: easejs
+blurb: ease.js is a classical object-oriented framework for JavaScript,
++ intended to eliminate boilerplate code and ease the transition
++ to JavaScript from other object-oriented languages.
+
+id: ed_blurb
+package: ed
+blurb: Ed is a line-oriented text editor: rather than offering an overview
++ of a document, ed performs editing one line at a time. It can be
++ executed both interactively and via shell scripts. Its method of
++ command input allows complex tasks to be performed in an automated way.
++ GNU ed offers several extensions over the standard utility.
+
+id: edma_blurb
+package: edma
+blurb: GNU EDMA is a development environment that combines ideas from both
++ object-oriented programming and component-based systems. It is used
++ to build modular, evolving applications as well as reusable
++ components. EDMA provides a convenient means to build
++ object-oriented programs in C without requiring C++.
++ Also, it has a unique component system, unlike other free software
++ component-based systems which imitate the design of proprietary
++ counterparts. It includes a graphical wizard, gidfwizard,
++ a tool for building GNU EDMA Interface
++ definition files and to create skeleton files necessary to build
++ EDMA classes, and a graphical class browser, gecb.
+
+id: electric_blurb
+package: electric
+blurb: GNU Electric is a CAD program for designing electrical circuits,
++ handling custom IC layout, schematic drawing and hardware
++ description language specifications. Several CAD operations are
++ supported, such as rule checking and simulation. Many different
++ types of designs can be produced and input or output in a wide
++ variety of formats.
+
+id: emacs_blurb
+package: emacs
+blurb: GNU Emacs is an extensible and highly customizable text editor. It
++ is based on an Emacs Lisp interpreter with extensions for text
++ editing. Emacs has been extended in essentially all areas of
++ computing, giving rise to a vast array of packages supporting, e.g.,
++ email, IRC and XMPP messaging, spreadsheets, remote server editing,
++ and much more. Emacs includes extensive documentation on all
++ aspects of the system, from basic editing to writing large Lisp
++ programs. It has full Unicode support for nearly all human
++ languages.
+
+id: emacs_muse_blurb
+package: emacs-muse
+blurb: Muse is an authoring and publishing environment for GNU Emacs. It
++ supports entering text in a convenient and easy-to-learn format.
++ Later, your documents may be published in a variety of different
++ formats, such as HTML, LaTeX or PDF. Muse supports projects
++ consisting of several documents, which are properly merged according
++ to the output format.
+
+id: emms_blurb
+package: emms
+blurb: EMMS is the Emacs Multimedia System. It is a small front-end which
++ can control one of the supported external players. Thus, it supports
++ whatever formats are supported by your music player. It also
++ supports tagging and playlist management, all behind a clean and
++ light user interface.
+
+id: enscript_blurb
+package: enscript
+blurb: GNU Enscript is a program to convert ASCII text files to PostScript,
++ HTML or RTF formats, to be stored in files or sent immediately to a
++ printer. It also includes the capability to perform syntax
++ highlighting for several different programming languages.
+
+id: eprints_blurb
+package: eprints
+blurb: null (skip, no evidence of GNU on web site)
+
+id: epsilon_blurb
+package: epsilon
+blurb: null (stale)
+
+id: fdisk_blurb
+package: fdisk
+blurb: GNU fdisk provides a GNU version of the common disk partitioning tool
++ fdisk. fdisk is used for the creation and manipulation of disk
++ partition tables, and it understands a variety of different formats.
+
+id: ferret_blurb
+package: ferret
+blurb: GNU Ferret is a graphical data modeler for the Entity/Relationship
++ paradigm. It can automatically create relational schemas from the
++ data models and it can be used to generate SQL statements in a
++ variety of dialects.
+
+id: findutils_blurb
+package: findutils
+blurb: Findutils supplies the basic file directory searching utilities of
++ the GNU system. It consists of two primary searching utilities:
++ "find" recursively searches for files in a directory according to
++ given criteria and "locate" lists files in a database that match a
++ query. Two auxiliary tools are included: "updatedb" updates the file
++ name database and "xargs" may be used to apply commands with arbitrarily
++ long arguments.
+
+id: fisicalab_blurb
+package: fisicalab
+blurb: GNU FisicaLab is an educational application for solving physics
++ problems. Its main objective is allow the user to focus on physics
++ concepts, leaving aside the mathematical details.
+
+id: flex_manual_blurb
+package: flex manual
+blurb: null (stale)
+
+id: foliot_blurb
+package: foliot
+blurb: GNU Foliot is an application for keeping track of time spent working
++ on projects.
+
+id: fontopia_blurb
+package: fontopia
+blurb: Fontopia is an easy-to-use, text-based, console font editor. It's used
++ to edit the fonts that GNU/Linux uses to display text on text-based
terminals.
++ Fontopia works on both PSF 1 & 2, BDF, Code Paged (CP) fonts, and Raw font
++ files. It provides a user-friendly, easy-to-use glyph editor and it can
++ easily change font metrics (e.g. length, width, and height) and convert
++ between different font formats.
+
+id: fontutils_blurb
+package: fontutils
+blurb: GNU Fontutils is a collection of programs for handling fonts.
++ Bitmaps can be extracted from scanned images of characters, edited,
++ and converted into outline fonts. In general, Fontutils supports the
++ font formats supported by the TeX typesetting environment, including
++ PostScript Type 1 fonts.
+
+id: freedink_blurb
+package: freedink
+blurb: GNU FreeDink is a free and portable re-implementation of the engine
++ for the role-playing game Dink Smallwood. It supports not only the
++ original game data files but it also supports user-produced game
++ mods or "D-Mods". To that extent, it also includes a front-end for
++ managing all of your D-Mods.
+
+id: freefont_blurb
+package: freefont
+blurb: GNU FreeFont is a collection of scalable outline fonts that are
++ suitable for general computer use and for desktop publishing. A
++ serif, a sans serif and a monospace font are included, all available in both
++ TrueType and OpenType formats. The fonts support a broad
++ range of characters for many different writing systems, and have
++ excellent coverage of mathematical notation.
+
+id: freeipmi_blurb
+package: freeipmi
+blurb: GNU FreeIPMI is a collection of in-band and out-of-band IPMI software
++ in accordance with the IPMI v1.5/2.0 specification. These programs
++ provide a set of interfaces for platform management. Common
++ functionality includes sensor monitoring, system event monitoring,
++ power control and serial-over-LAN.
+
+id: freetalk_blurb
+package: freetalk
+blurb: GNU Freetalk is a command-line Jabber/XMPP chat client. It notably
++ uses the Readline library to handle input, so it features convenient
++ navigation of text as well as tab-completion of buddy names, commands
++ and English words. It is also scriptable and extensible via Guile.
+
+id: fribidi_blurb
+package: fribidi
+blurb: GNU FriBidi is an implementation of the Unicode Bidirectional
++ Algorithm. This algorithm is used to properly display text in
++ left-to-right or right-to-left ordering as necessary.
+
+id: ggolf_blurb
+package: g-golf
+blurb: G-Golf (Gnome: (Guile Object Library for)) is a library for developing
++ modern applications in Guile Scheme. It comprises a direct binding to the
++ GObject Introspection API and higher-level functionality for importing Gnome
++ libraries and making GObject classes (and methods) available in Guile's
++ object-oriented programming system, GOOPS.
+
+id: gama_blurb
+package: gama
+blurb: GNU Gama is a program for the adjustment of geodetic networks. It is
++ useful in measurements where Global Positioning System (GPS) is not
++ available, such as underground. It features the ability to adjust in
++ local Cartesian coordinates as well as partial support for
++ adjustments in global coordinate systems.
+
+id: garpd_blurb
+package: garpd
+blurb: GNU garpd broadcasts Gratuitous ARP (Address Resolution Protocol)
++ requests/replies for a list of MAC address <-> IP address mappings on
++ specified interfaces at regular intervals. Gratuitous ARP request
++ packets are those where the source and the destination IPs are both
++ the IP of the requesting machine. Gratuitous ARP replies are those
++ made without a corresponding request.
+
+id: gawk_blurb
+package: gawk
+blurb: Gawk is the GNU implementation of Awk, a specialized programming
++ language for the easy manipulation of formatted text, such as tables
++ of data. Gawk features many extensions beyond the traditional
++ implementation, including network access, sorting, and large
++ libraries.
+
+id: gbehistun_blurb
+package: gbehistun
+blurb: GNU Behistun consists of software and utilities for geological
++ and geophysical modeling and mapping of internal structures and
++ dynamics. Like the Behistun Multilingual Inscription, the Behistun
++ software utilities provide knowledge and functionality to work on
++ planetary systems and investigate their interior in freedom.
+
+id: gcal_blurb
+package: gcal
+blurb: Gcal is a program to calculate and print calendars on the
++ command-line. Calendars can be printed in 1-month, 3-month or whole-year
++ views. In addition, eternal holiday lists can be generated for many
++ countries, which can be complemented by user-made lists of fixed
++ dates to make an agenda. Gcal can also calculate astronomical data,
++ such as the phases of the moon, and supports alternative calendar
++ formats: Julian, Gregorian, Islamic, Chinese and more.
+
+id: gcc_blurb
+package: gcc
+blurb: GCC is the GNU Compiler Collection. It provides compiler front-ends
++ for several languages, including C, C++, Objective-C, Fortran, Java,
++ Ada, and Go. It also includes runtime support libraries for these
++ languages.
+
+id: gcide_blurb
+package: gcide
+blurb: GCIDE is a free dictionary based on a combination of sources. It can
++ be used via the GNU Dico program or accessed online at
++ http://gcide.gnu.org.ua/
+
+id: gcl_blurb
+package: gcl
+blurb: GCL is an implementation of the Common Lisp language. It features
++ the ability to compile to native object code and to load native
++ object code modules directly into its lisp core. It also features a
++ stratified garbage collection strategy, a source-level debugger and a
++ built-in interface to the Tk widget system.
+
+id: gcompris_blurb
+package: gcompris
+blurb: GCompris is a suite of educational software for children. It
++ features a variety of activities suitable for kids aged 2 to 10 years
++ old. The suite includes activities to introduce and develop skills
++ in computer use, algebra, science, reading and more. It also
++ features some games such as chess and sudoku.
+
+id: gdb_blurb
+package: gdb
+blurb: GDB is the GNU debugger. With it, you can monitor what a program is
++ doing while it runs or what it was doing just before a crash. It
++ allows you to specify the runtime conditions, to define breakpoints,
++ and to change how the program is running to try to fix bugs. It can
++ be used to debug programs written in C, C++, Ada, Objective-C, Pascal
++ and more.
+
+id: gdbm_blurb
+package: gdbm
+blurb: GDBM is a library for manipulating hashed databases. It is used to
++ store key/value pairs in a file in a manner similar to the Unix dbm
++ library and provides interfaces to the traditional file format.
+
+id: gengen_blurb
+package: gengen
+blurb: GNU Gengen is a program to generate text-generators, i.e., functions
++ producing text with variable sections. The text is first specified
++ by the user in a template file containing parameters, then processed by
++ gengen to create the text-generator. At runtime, the variable text is
++ defined by the rest of the program and passed to the text-generator,
++ which then substitutes it into the template parameters and returns the
++ result. Gengen can be used to generate C and C++ code.
+
+id: gengetopt_blurb
+package: gengetopt
+blurb: GNU Gengetopt is a program to generate a C/C++ function for parsing
++ command-line options using the getopt_long function found in GNU
++ libc, removing some of the tedium of this task for large programs
++ that accept many options. The options parsed by the generated
++ function may be in both short (e.g., "-h") and long ("--help")
++ formats, as specified by the GNU coding standards. Additionally, the
++ output of the standard options "--help" and "--version" is generated
++ automatically.
+
+id: gettext_blurb
+package: gettext
+blurb: GNU Gettext is a package providing a framework
++ for translating the textual output of programs into multiple
++ languages. It provides translators with the means to create message
++ catalogs, as well as an Emacs mode to work with them, and a runtime
++ library to load translated messages from the catalogs. Nearly all GNU
++ packages use Gettext.
+
+id: gforth_blurb
+package: gforth
+blurb: Gforth is a fast and portable implementation of the ANSI Forth
++ language. It includes an editing mode for Emacs and an interpreter
++ featuring completion and history. A generic virtual machine
++ environment, vmgen, is also included.
+
+id: gg_network_blurb
+package: gg-network
+blurb: null (group)
+
+id: ggradebook_blurb
+package: ggradebook
+blurb: GNU Gradebook is an application for teachers for tracking student
++ grades. It supports several grading styles, including American (A, B,
++ C, D, F) and European numeric scales.
+
+id: ghostscript_blurb
+package: ghostscript
+blurb: Ghostscript is an interpreter for the PostScript language and the PDF
++ file format. It also includes a C library that implements the
++ graphics capabilities of the PostScript language. It supports a wide
++ variety of output file formats and printers.
+
+id: gift_blurb
+package: gift
+blurb: The GNU Image-Finding Tool (GIFT) is a Content Based Image Retrieval
++ System. It uses the content of images to perform queries on a
++ collection, enabling you to query by example. Also, a tool to index
++ whole directory trees is included.
+
+id: gimp_blurb
+package: gimp
+blurb: GIMP is an application for image manipulation tasks such as photo
++ retouching, composition and authoring. It supports all common image
++ formats as well as specialized ones. It features a highly
++ customizable interface that is extensible via a plugin system.
+
+id: gimp_www_pages_blurb
+package: gimp www pages
+blurb: null (container)
+
+id: glean_blurb
+package: glean
+blurb: GNU glean is a modular system for self-study, considerably more
++ intricate than standard flash cards method. It is very
++ customizable, allowing the user to define subjects of interest and
++ activities to study them. For now, it has a text-based interface
++ inside the Guile REPL and an experimental web interface.
+
+id: gleem_blurb
+package: gleem
+blurb: GNU gleem is a library for Java and C++ offering a set of 3D
++ widgets that support direct user interaction with a 3D scene. These
++ widgets are used to translate along a line, translate in a plane, and
++ do three-dimensional translation and rotation.
+
+id: glib_blurb
+package: glib
+blurb: redirect gnome
+
+id: global_blurb
+package: global
+blurb: GNU GLOBAL is a source code tagging system that functions in the same
way
++ across a wide array of environments, such as different text editors,
++ shells and web browsers. The resulting tags are useful for quickly
++ moving around in a large, deeply nested project.
+
+id: glpk_blurb
+package: glpk
+blurb: GLPK is a C library for solving large-scale linear programming (LP),
++ mixed integer programming (MIP), and other related problems. It
++ supports the GNU MathProg modeling language, a subset of the AMPL
++ language, and features a translator for the language. In addition to
++ the C library, a stand-alone LP/MIP solver is included in the
++ package.
+
+id: glue_blurb
+package: glue
+blurb: null (stale)
+
+id: gmediaserver_blurb
+package: gmediaserver
+blurb: GMediaServer is a UPnP-compatible media server. It serves audio and
++ video files to network-connected media players via a command-line
++ program that runs in the background.
+
+id: gmp_blurb
+package: gmp
+blurb: GMP is a library for arbitrary precision arithmetic, operating on
++ signed integers, rational numbers and floating point numbers. The
++ precision is only limited by the available memory. The library is
++ highly optimized, with a design focus on execution speed. It is
++ aimed at use in, for example, cryptography and computational algebra.
+
+id: gnash_blurb
+package: gnash
+blurb: Gnash is a free Flash movie player. It supports SWF version v7 and
++ some of v8 and v9. It is possible to configure Gnash to use several
++ different audio or video backends, ensuring good performance.
+
+id: gnat_blurb
+package: gnat
+blurb: redirect gcc
+
+id: gnats_blurb
+package: gnats
+blurb: GNATS is a set of tools for tracking bugs and other user-reported
++ software issues. It is completely open-ended in how its database may
++ be queried, edited and maintained, featuring interfaces ranging from
++ the command-line to Emacs, though the main means of interaction is
++ via its web interface. It is also flexible enough to support
++ user-made utilities.
+
+id: gnatsweb_blurb
+package: gnatsweb
+blurb: redirect gnats
+
+id: gneuralnetwork_blurb
+package: gneuralnetwork
+blurb: Gneural Network implements a programmable neural network. It
++ currently supports feed-forward networks which can learn simple tasks such
++ as curve-fitting.
+
+id: gnome_blurb
+package: gnome
+blurb: GNOME is the graphical desktop for GNU. It includes a wide
++ variety of applications for browsing the web, editing text and images,
++ creating documents and diagrams, playing media, scanning, and much
++ more.
+
+id: gnowsys_blurb
+package: gnowsys
+blurb: null (stale)
+
+id: gnu_c_manual_blurb
+package: gnu-c-manual
+blurb: This is a reference manual for the C programming language, as
++ implemented by the GNU C Compiler (gcc). As a reference, it is not
++ intended to be a tutorial of the language. Rather, it outlines all
++ of the constructs of the language. Library functions are not
++ included.
+
+id: gnu_crypto_blurb
+package: gnu-crypto
+blurb: null (inactive, mostly merged in classpath)
+
+id: gnu_pw_mgr_blurb
+package: gnu-pw-mgr
+blurb: This program is designed to make it easy to reconstruct difficult
++ passwords when they are needed while limiting the risk of attack. The
++ user of this program inputs a self-defined transformation of a web
++ site URL and obtains the password and user name hint for that web
++ site.
+
+id: gnuae_blurb
+package: gnuae
+blurb: null (stale)
+
+id: gnuastro_blurb
+package: gnuastro
+blurb: null (newpkg/20150216)
+
+id: gnubatch_blurb
+package: gnubatch
+blurb: GNUbatch is an advanced batch scheduling system. It executes
++ computational jobs at specified dates and times or according to
++ interdependencies. The jobs may be completed on any number of
++ processors shared across a network. Full access-control of the jobs
++ is supported.
+
+id: gnubg_blurb
+package: gnubg
+blurb: The GNU backgammon application can be used for playing, analyzing
++ and teaching the game. It has an advanced evaluation engine based on
++ artificial neural networks suitable for both beginners and advanced
++ players. In addition to a command-line interface, it also features an
++ attractive, 3D representation of the playing board.
+
+id: gnubiff_blurb
+package: gnubiff
+blurb: GNUbiff is a program that checks for mail and notifies you when new
++ messages arrive. It supports multiple mailboxes which may be
++ accessed via a variety of methods such as POP3, IMAP, MH and
++ mailfiles. Graphical notifications are provided with GTK and
++ complete integration with GNOME is supported.
+
+id: gnubik_blurb
+package: gnubik
+blurb: GNUbik is a puzzle game in which you must manipulate a cube to make
++ each of its faces have a uniform color. The game is customizable,
++ allowing you to set the size of the cube (the default is 3x3) or to
++ change the colors. You may even apply photos to the faces instead of
++ colors. The game is scriptable with Guile.
+
+id: gnucap_blurb
+package: gnucap
+blurb: GNUcap is a circuit analysis package. It offers a general purpose
++ circuit simulator and can perform DC and transient analyses, fourier
++ analysis and AC analysis. The engine is designed to do true
++ mixed-mode simulation.
+
+id: gnucash_blurb
+package: gnucash
+blurb: GnuCash is personal and professional financial-accounting
++ software. It can be used to track bank accounts, stocks, income and
++ expenses, based on the double-entry accounting practice. It includes
++ support for QIF/OFX/HBCI import and transaction matching. It also
++ automates several tasks, such as financial calculations or scheduled
++ transactions.
+
+id: gnucobol_blurb
+package: gnucobol
+blurb: null (stale)
+
+id: gnucomm_blurb
+package: gnucomm
+blurb: Telecom subsystem of the GNU Project: umbrella project for
++ GNU Telephony software, currently Bayonne, SIP Witch, and their
++ supporting libraries (Common C++ / uCommon, ccAudio, ccScript,
++ ccRTP and ZRTP / ZRTP4J).
+
+id: gnudos_blurb
+package: gnudos
+blurb: GnuDOS is a set of programs designed to help new users of the GNU
++ system in growing accustomed to the system, particularly users who
++ might be coming from a DOS background. It consists of a file manager,
++ a text editor and a form designer for the console as well as a core
++ library for building similar utilities.
+
+id: gnue_blurb
+package: gnue
+blurb: GNU Enterprise supports enterprise planning. It includes an
++ application server, common development library, an IDE for designing
++ data forms, forms interface, navigator and menu system, and data
++ reporting system.
+
+id: gnufm_blurb
+package: gnufm
+blurb: null (stale)
+
+id: gnugo_blurb
+package: gnugo
+blurb: GNU Go is a program that plays the game of Go, in which players place
++ stones on a grid to form territory or capture other stones. While it
++ can be played directly from the terminal, rendered in ASCII
++ characters, it is also possible to play GNU Go with 3rd party
++ graphical interfaces or even in Emacs. It supports the standard
++ game storage format (SGF, Smart Game Format) and inter-process
++ communication format (GMP, Go Modem Protocol).
+
+id: gnuit_blurb
+package: gnuit
+blurb: The GNU Interactive Tools are a set of lightweight, interactive
++ command-line tools. They include an extensible, orthodox (two-pane)
++ file manager, an ASCII/hex file viewer, and a process viewer/killer.
++ The package also includes some related utilities and scripts, such as
++ a tool to decompress any type of archive file. All the
++ tools can be enhanced and extended through their configuration files
++ to perform new commands.
+
+id: gnujdoc_blurb
+package: gnujdoc
+blurb: null (container for Japanese translations)
+
+id: gnujump_blurb
+package: gnujump
+blurb: GNUjump is a simple, yet addictive game in which you must jump from
++ platform to platform to avoid falling, while the platforms drop at
++ faster rates the higher you go. The game features multiplayer,
++ unlimited FPS, smooth floor falling, themeable graphics and sounds,
++ and replays.
+
+id: gnukart_blurb
+package: gnukart
+blurb: null (stale)
+
+id: gnulib_blurb
+package: gnulib
+blurb: Gnulib is a central location for common infrastructure needed by
++ GNU packages. It provides a wide variety of functionality, e.g.,
++ portability across many systems, working with Unicode strings,
++ cryptographic computation, and much more. The code is intended to be
++ shared at the level of source files, rather than being a standalone
++ library that is distributed, built, and installed. The included
++ "gnulib-tool" script helps with using Gnulib code in other packages.
++ Gnulib also includes copies of licensing and maintenance-related
++ files, for convenience.
+
+id: gnumach_blurb
+package: gnumach
+blurb: redirect hurd
+
+id: gnumed_blurb
+package: gnumed
+blurb: GNUmed is Electronic Medical Record software, supporting
++ paperless medical practices. Several interface languages are supported.
+
+id: gnumeric_blurb
+package: gnumeric
+blurb: GNUmeric is a GNU spreadsheet application, running under
++ GNOME. It is interoperable with other spreadsheet applications. It
++ has a vast array of features beyond typical spreadsheet functionality,
++ such as support for linear and non-linear solvers, statistical
++ analysis, and telecommunication engineering.
+
+id: gnump3d_blurb
+package: gnump3d
+blurb: GNUMP3d is a streaming server for MP3 and Ogg Vorbis audio files,
++ movies, and other media formats. It is small and self-contained,
++ presenting a simple, themeable HTML interface. The audio files can
++ then be played in any player that supports streaming over HTTP.
+
+id: gnun_blurb
+package: gnun
+blurb: GNUnited Nations is a build system for translating the web site at
++ www.gnu.org. It works via template files, which allow changes to be
++ merged into individual translations of a page, from which the final
++ HTML is generated. In effect, this helps to keep all translations of
++ a page up-to-date.
+
+id: gnunet_blurb
+package: gnunet
+blurb: GNUnet is a framework for secure peer-to-peer networking. The
++ high-level goal is to provide a strong foundation of free software for a
++ global, distributed network that provides security and privacy. GNUnet
++ in that sense aims to replace the current internet protocol stack. Along
++ with an application for secure publication of files, it has grown to include
++ all kinds of basic applications for the foundation of a GNU internet.
+
+id: gnupg_blurb
+package: gnupg
+blurb: The GNU Privacy Guard is a complete implementation of the OpenPGP
++ standard. It is used to encrypt and sign data and communication. It
++ features powerful key management and the ability to access public key
++ servers. It includes several libraries: libassuan (IPC between GnuPG
++ components), libgpg-error (centralized GnuPG error values), and libskba
++ (working with X.509 certificates and CMS data).
+
+id: gnupod_blurb
+package: gnupod
+blurb: GNUpod is a collection of scripts for using iPods with GNU/Linux and
++ other operating systems. It can be used for transferring music and
++ cover art, searching files, removing files, editing tags,
++ creating playlists and more.
+
+id: gnuprologjava_blurb
+package: gnuprologjava
+blurb: GNU Prolog for Java is an implementation of the ISO Prolog standard
++ as a Java library (gnu.prolog). Thus, with it you can use Prolog
++ from within Java programs.
+
+id: gnuradio_blurb
+package: gnuradio
+blurb: GNU Radio is a toolkit for implementing software radios. Its signal
++ processing blocks can be combined with low-cost external RF hardware
++ to create software-defined radios. Without hardware, it can be used
++ for simulation. Radio applications are primarily written in Python,
++ with C++ support for performance-critical processing tasks.
+
+id: gnurobots_blurb
+package: gnurobots
+blurb: GNU Robots is a game in which you program a robot to explore a world
++ full of enemies that can hurt it, obstacles and food to be eaten.
++ The goal of the game is to stay alive and collect prizes. The robot
++ program conveniently may be written in a plain text file in the
++ Scheme programming language.
+
+id: gnuschool_blurb
+package: gnuschool
+blurb: GNUschool is a web application for students, teachers and school
++ administrators. With it, teachers can create tests for the students
++ to take online, give feedback and assign grades. School
++ administrators can use it to monitor student attendance and edit
++ student information.
+
+id: gnushogi_blurb
+package: gnushogi
+blurb: GNU Shogi is a program that plays the game Shogi (Japanese Chess).
++ It also includes a graphical interface to the game. While similar to
++ standard chess, this variant is far more complicated.
+
+id: gnusound_blurb
+package: gnusound
+blurb: GNUsound is a multitrack sound editor for GNOME 1 and 2. It can read
++ and write many audio file formats such as WAV, MP3 and FLAC. It can
++ work with the OSS, ALSA or JACK audio backends. It provides many
++ different built-in audio processing modules, such as fades in/out,
++ delay, and filters. GLADSPA plugins may also be used for further
++ processing.
+
+id: gnuspeech_blurb
+package: gnuspeech
+blurb: null (stale)
+
+id: gnuspool_blurb
+package: gnuspool
+blurb: GNUspool is an advanced print spooling system. In addition to the
++ functionality of the standard printing system, it provides
++ post-processing capabilities, form type handling, alignment pages and
++ other features. It functions transparently on a network, sharing jobs
++ on any host with printers on any other host. Several user different
++ interfaces are available.
+
+id: gnustandards_blurb
+package: gnustandards
+blurb: null (infrastructure doc)
+
+id: gnustep_blurb
+package: gnustep
+blurb: GNUstep is a fully-functional object-oriented development
++ environment; a number of user applications are also
++ included. It closely follows the Cocoa APIs but is
++ platform-independent.
+
+id: gnutls_blurb
+package: gnutls
+blurb: GnuTLS is a secure communications library implementing the SSL, TLS
++ and DTLS protocols. It is provided in the form of a C library to support
++ the protocols, as well as to parse and write X.5009, PKCS 12, OpenPGP
++ and other required structures.
+
+id: gnutrition_blurb
+package: gnutrition
+blurb: GNUtrition is a free nutrition analysis software. With it, one can
++ keep track of the nutritional information of food. The software uses
++ the Nutrient Database of Standard Reference of the US Department of
++ Agriculture as a source of food nutrient information.
+
+id: gnuzilla_blurb
+package: gnuzilla
+blurb: redirect icecat
+
+id: goptical_blurb
+package: goptical
+blurb: Goptical is a library for optical design and simulation in C++. It
++ provides model classes for optical components, surfaces and
++ materials. With it, one can simulate building an optical system by
++ creating and placing optical components in a 3d space, and visualize light
++ propagating through the system.
+
+id: gorm_blurb
+package: gorm
+blurb: redirect gnustep
+
+id: gpaint_blurb
+package: gpaint
+blurb: GNU Paint is a simple, easy-to-use paint program for the GNOME
++ environment. It supports drawing freehand as well as basic shapes
++ and text. It features cut-and-paste for irregular regions or
++ polygons.
+
+id: gperf_blurb
+package: gperf
+blurb: gperf is a perfect hash function generator. For a given list of
++ strings, it produces a hash function and hash table in C or C++ code.
++ That the hash function is perfect means that no collisions can exist
++ and that look-ups can be made by single string comparisons.
+
+id: gprolog_blurb
+package: gprolog
+blurb: GNU Prolog is a standards-compliant Prolog compiler with constraint
++ solving over finite domains. It accepts Prolog+ constraint programs
++ and produces a compiled, native binary which can function in a
++ stand-alone manner. It also features an interactive interpreter.
+
+id: grabcomics_blurb
+package: grabcomics
+blurb: phpGrabComics is a program that fetches and saves comic strips from
++ the web. It features both a server, which can download strips from
++ different sources, and ports, tiny applications which get the list of
++ available comics from the server.
+
+id: greg_blurb
+package: greg
+blurb: GNU Greg is a framework for testing programs and libraries. It provides
++ a single front-end for all tests of a package as well as a simple
++ framework for writing the tests. It is loaded as a Guile module into
++ any software with an embedded Guile interpreter. It also provides a
++ compiled module that may be dynamically linked into Guile to permit
++ testing external programs.
+
+id: grep_blurb
+package: grep
+blurb: grep is a tool for finding text inside files. Text is found by
++ matching a pattern provided by the user in one or many files. The
++ pattern may be provided as a basic or extended regular expression, or
++ as fixed strings. By default, the matching text is simply printed to
++ the screen, however the output can be greatly customized to include,
++ for example, line numbers. GNU grep offers many extensions over the
++ standard utility, including, for example, recursive directory
++ searching.
+
+id: gretl_blurb
+package: gretl
+blurb: GNU Gretl is a package for performing statistical computations for
++ econometrics. It consists of both a command-line client and a
++ graphical client. It features a variety of estimators such as
++ least-squares and maximum likelihood; several time series methods such
++ as ARIMA and GARCH; limited dependent variables such as logit,
++ probit and tobit; and a powerful scripting language. It can output
++ models as LaTeX files. It also may be linked to
++ GNU R and GNU Octave for further data analysis.
+
+id: groff_blurb
+package: groff
+blurb: Groff is a typesetting package that reads plain text and produces
++ formatted output based on formatting commands contained within the
++ text. It is usually the formatter of "man" documentation pages.
+
+id: grub_blurb
+package: grub
+blurb: GRUB is a multiboot bootloader. It is used for initially loading
++ the kernel of an operating system and then transferring control to
++ it. The kernel then goes on to load the rest of the operating system.
++ As a multiboot bootloader, GRUB handles the presence of multiple
++ operating systems installed on the same computer; upon booting the
++ computer, the user is presented with a menu to select one of the
++ installed operating systems.
+
+id: gsasl_blurb
+package: gsasl
+blurb: GNU SASL is an implementation of the Simple Authentication and
++ Security Layer framework. On network servers such as IMAP or SMTP
++ servers, SASL is used to handle client/server authentication. This
++ package contains both a library and a command-line tool to access the
++ library.
+
+id: gsegrafix_blurb
+package: gsegrafix
+blurb: GSEGrafix is an application which produces high-quality graphical
++ plots for science and engineering. Plots are specified via simple
++ ASCII parameter files and data files and are presented in an
++ anti-aliased GNOME canvas. The program supports rectangular
++ two-dimensional plots, histograms, polar-axis plots and three-dimensional
++ plots. Plots can be printed or saved to BMP, JPEG or PNG image
++ formats.
+
+id: gsl_blurb
+package: gsl
+blurb: The GNU Scientific Library is a library for numerical analysis in C
++ and C++. It includes a wide range of mathematical routines, with
++ over 1000 functions in total. Subject areas covered by the library
++ include: differential equations, linear algebra, Fast Fourier
++ Transforms and random numbers.
+
+id: gslip_blurb
+package: gslip
+blurb: GNU Slip is a functional extension of the capabilities provided
++ in the C++ Standard Template Library (STL) list and queue containers,
++ though SLIP is not a replacement for the STL containers. SLIP data
++ cells can be used in application-specific computations, among other
++ enhancements.
+
+id: gsrc_blurb
+package: gsrc
+blurb: GSRC supports installing the latest releases of GNU packages on
++ an existing system. New versions are installed in a separate
++ place so as not to interfere with the system versions. The goal is to
++ make it easier to work with the original, upstream, GNU sources, and
++ perhaps help with development and testing.
+
+id: gss_blurb
+package: gss
+blurb: The GNU Generic Security Service provides a free implementation of
++ the GSS-API specification. It provides a generic application
++ programming interface for programs to access security services.
++ Security services present a generic, GSS interface, with which the
++ calling application interacts via this library, freeing the
++ application developer from needing to know about the underlying
++ security implementation.
+
+id: gtick_blurb
+package: gtick
+blurb: GTick is a metronome application. It supports different meters, such
++ as 2/4, 3/4, 4/4, etc. It also supports a wide range of speeds, from
++ 10 to 1000 BPM. It provides a GTK+-based user interface and it can
++ use both OSS and ALSA as the audio back-end.
+
+id: gtk+_blurb
+package: gtk+
+blurb: redirect gnome
+
+id: gtypist_blurb
+package: gtypist
+blurb: GNU Typist is a universal typing tutor. It can be used to learn and
++ practice touch-typing. Several tutorials are included; in addition
++ to tutorials for the standard QWERTY layout, there are also tutorials
++ for the alternative layouts Dvorak and Colemak, as well as for the
++ numpad. Tutorials are primarily in English, however some in other
++ languages are provided.
+
+id: guile_blurb
+package: guile
+blurb: Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
++ official extension language of the GNU system. It is an
++ implementation of the Scheme language which can be easily embedded
++ in other applications to provide a convenient means of extending the
++ functionality of the application without requiring the source code to
++ be rewritten.
+
+id: guile_cv_blurb
+package: guile-cv
+blurb: Guile-CV is a Computer Vision functional programming library for the
++ Guile Scheme language. Guile-CV is based on Vigra (Vision with Generic
++ Algorithms). It comprises a direct binding to vigra_c (a C wrapper
++ to a subset of the Vigra library), and a higher level API written in
++ Guile Scheme.
+
+id: guile_dbi_blurb
+package: guile-dbi
+blurb: guile-dbi is a library for Guile that provides a convenient interface
++ to SQL databases. Database programming with guile-dbi is generic in
++ that the same programming interface is presented regardless of which
++ database system is used. It currently supports MySQL, Postgres and
++ SQLite3.
+
+id: guile_opengl_blurb
+package: guile-opengl
+blurb: Guile-OpenGL is a library for Guile that provides bindings to the
++ OpenGL graphics API.
+
+id: guile_gnome_blurb
+package: guile-gnome
+blurb: Includes guile-clutter, guile-gnome-gstreamer,
++ guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.
+
+id: guile_ncurses_blurb
+package: guile-ncurses
+blurb: guile-ncurses provides Guile language bindings for the ncurses library.
+
+id: guile_rpc_blurb
+package: guile-rpc
+blurb: null (stale)
+
+id: guile_sdl_blurb
+package: guile-sdl
+blurb: Guile-SDL is a set of bindings to the Simple DirectMedia Layer (SDL).
++ With them, Guile programmers can have easy access to graphics, sound
++ and device input (keyboards, joysticks, mice, etc.).
+
+id: guix_blurb
+package: guix
+blurb: GNU Guix is a functional package manager for the GNU system, and is
++ also a distribution thereof. It includes a virtual machine image.
++ Besides the usual package management features, it also supports
++ transactional upgrades and roll-backs, per-user profiles, and much more.
++ It is based on the Nix package manager.
+
+id: gurgle_blurb
+package: gurgle
+blurb: GURGLE produces database report listings from record and field
++ information from a file. It uses the report to produce
++ (La)TeX-formatted output, plain ASCII text, troff, PostScript, HTML, XML,
++ or any other ASCII-based output format. It may be used for producing
++ large bodies of text where small parts of the text are substituted
++ with information from the database. GURGLE supports GNUSQL,
++ PostgreSQL, MySQL and CA-Ingres databases.
+
+id: gv_blurb
+package: gv
+blurb: GNU GV is a graphical user interface to the Ghostscript interpreter.
++ With it, one can view and navigate through PostScript and PDF
++ documents in X Windows.
+
+id: gvpe_blurb
+package: gvpe
+blurb: The GNU Virtual Private Ethernet creates a virtual network
++ with multiple nodes using a variety of transport protocols. It works
++ by creating encrypted host-to-host tunnels between multiple
++ endpoints.
+
+id: gwl_blurb
+package: gwl
+blurb: GWL is a workflow language that extends Guix's declarative language
++ for package management to automate execution of programs. Additionally,
++ GWL can use Grid Engine to offload program execution.
+
+id: gxmessage_blurb
+package: gxmessage
+blurb: GNU gxmessage is a program that pops up dialog windows, which display a
++ message to the user and waits for their action. The program then
++ exits with an exit code corresponding to the response.
+
+id: gzip_blurb
+package: gzip
+blurb: GNU Gzip provides data compression and decompression utilities;
++ the typical extension is ".gz". Unlike the "zip" format, it
++ compresses a single file; as a result, it is often used in conjunction
++ with "tar", resulting in ".tar.gz" or ".tgz", etc.
+
+id: halifax_blurb
+package: halifax
+blurb: HaliFAX supports sending and viewing faxes, including
++ a wrapper around the "lpr" command.
+
+id: health_blurb
+package: health
+blurb: GNU Health is a free medical software system, including support
++ for electronic medical records (EMR), a hospital information system
++ (HIS), and health information system. It supports both Spanish and
++ English interfaces. It has been adopted by the United Nations
++ University for implementation and training, and several hospitals and
++ health ministries around the world.
+
+id: hello_blurb
+package: hello
+blurb: GNU Hello prints the message "Hello, world!" and then exits. It
++ serves as an example of standard GNU coding practices. As such, it
++ supports command-line arguments, multiple languages, and so on.
+
+id: help2man_blurb
+package: help2man
+blurb: GNU help2man is a program that converts the output of standard "--help"
++ and "--version" command-line arguments into a manual page
++ automatically.
+
+id: hp2xx_blurb
+package: hp2xx
+blurb: GNU hp2xx converts vector graphics specified in the HP-GL plotter
++ language into a variety of graphical formats, both vector- and
++ raster-based, including EPS, PCX, IMG, and formats intended for use
++ within TeX documents.
+
+id: html_info_blurb
+package: html-info
+blurb: null (does not exist yet)
+
+id: httptunnel_blurb
+package: httptunnel
+blurb: GNU httptunnel creates a bidirectional data path tunneled in HTTP
++ requests. This allows users behind firewalls to send and receive
++ data that would otherwise be blocked, such as telnet or ssh
++ connections.
+
+id: hurd_blurb
+package: hurd
+blurb: The Hurd is the kernel for the GNU system, a replacement and
++ augmentation of standard Unix kernels. It is a collection of
++ protocols for system interaction (file systems, networks,
++ authentication), and servers implementing them. Subprojects include Mach,
++ the microkernel on which the Hurd is based, which provides a basic
++ inter-process communication mechanism, and MIG, an interface generator
++ for Mach.
+
+id: hyperbole_blurb
+package: hyperbole
+blurb: Hyperbole is a programmable information and hypertext system for
++ GNU Emacs. It allows hypertext to be embedded within documents, mail
++ messages and news articles. This permits mouse-based control of
++ the displayed information.
+
+id: icecat_blurb
+package: icecat
+blurb: IceCat is the GNU version of the Firefox browser. It is entirely
++ free software, which does not recommend non-free plugins and addons.
++ It also features built-in privacy-protecting features.
+
+id: idutils_blurb
+package: idutils
+blurb: The GNU idutils package includes tools to create an index of
++ textual tokens used in a list of file names and then to query that
++ index. Thus, it allows the user to, for example, find all the uses of
++ a particular function in a large programming project. In addition to
++ handling textual tokens, it can also handle numeric constants and the
++ contents of character strings.
+
+id: ignuit_blurb
+package: ignuit
+blurb: Ignuit is a tool for aiding in the memorization of new information
++ based on the Leitner flashcard system. In this system, new cards are
++ studied with decreasing frequency as they grow older, unless you
++ encounter difficulty memorizing them, after which you encounter them
++ more often. Cards can include embedded audio, images and
++ mathematical formulae and a card collection can be exported to
++ several formats.
+
+id: indent_blurb
+package: indent
+blurb: Indent is a program that makes source code easier to read by
++ reformatting it in a consistent style. It can change the style to
++ one of several different styles such as GNU, BSD or K&R. It has some
++ flexibility to deal with incomplete or malformed syntax. GNU indent
++ offers several extensions over the standard utility.
+
+id: inetutils_blurb
+package: inetutils
+blurb: Inetutils is a collection of common network programs, such as an ftp
++ client and server, a telnet client and server, and an rsh client and
++ server.
+
+id: inklingreader_blurb
+package: inklingreader
+blurb: GNU InklingReader is a package to support the
++ Wacom Inkling device, including data conversion to various free formats,
++ basic editing features, and an Inkscape plugin.
+
+id: intlfonts_blurb
+package: intlfonts
+blurb: GNU intlfonts contains free X11 fonts in the BDF and TrueType formats.
++ They notably cover a large number of characters from different
++ writing systems: European, Asian, Chinese, Japanese, Korean, Ethiopic
++ and others.
+
+id: jacal_blurb
+package: jacal
+blurb: GNU JACAL is an interactive symbolic mathematics program based on
++ Scheme. It manipulate and simplify a range of mathematical
++ expressions such as equations, scalars, vectors, and matrices.
+
+id: java_getopt_blurb
+package: java-getopt
+blurb: java-getopt provides a Java port of the GNU getopt function from
++ glibc. It supports parsing both long and short command-line
++ arguments in a flexible manner, which is completely compatible with
++ the C version.
+
+id: jtw_blurb
+package: jtw
+blurb: GNU Java Training wheels provides a less steep learning curve
++ for learning to program in Java. The system is powered by
++ a preprocessor that adds features to Java such as a superfor
++ macro and a file inclusion system much like the C language's
++ preprocessor.
+
+id: jel_blurb
+package: jel
+blurb: GNU JEL is a library that lets a program accept user-defined expressions
++ to be entered and evaluated at runtime. In fact, the expressions are
++ compiled by JEL to Java bytecode to avoid the performance penalty of
++ adding interpreted expressions to an already-interpreted language.
+
+id: jwhois_blurb
+package: jwhois
+blurb: GNU jwhois is a client for the WHOIS protocol, which allows you to query
++ the owner of a domain name. The program uses an extensible
++ configuration file to determine the most appropriate server to query
++ and, upon success displays the result to the user, otherwise it can
++ optionally redirect the query to another server.
+
+id: kawa_blurb
+package: kawa
+blurb: GNU Kawa is an implementation of the Scheme programming language that is
++ built on top of the Java platform. It is thus conveniently
++ integrated with Java and benefits from this by having a compiler,
++ optional static typing, and so on. Kawa also serves as a framework for
++ implementing other programming languages on the Java platform.
++ Included in Kawa is qexo, a partial implementation of XQuery in Java.
+
+id: kopi_blurb
+package: kopi
+blurb: null (stale)
+
+id: leg_blurb
+package: leg
+blurb: GNU Leg is a set of libraries for game engines and game development.
++ In addition to the libraries, it also includes resource editors
++ designed to make game creation easier. The package is designed to be
++ generic and modular, supporting many different styles of games.
+
+id: less_blurb
+package: less
+blurb: GNU less is a pager, a program that allows you to view large amounts
++ of text in page-sized chunks. Unlike traditional pagers, it allows
++ both backwards and forwards movement through the document. It also
++ does not have to read the entire input file before starting, so it
++ starts faster than most text editors.
+
+id: libc_blurb
+package: libc
+blurb: The GNU C Library is the standard C library of the GNU system. It
++ defines the system calls and other basic functionality necessary to
++ write programs in the C language. It handles low-level functionality
++ that communicates with the kernel, such as process and file
++ management, as well as higher-level functionality such as string
++ manipulation or command-line argument handling.
+
+id: libcdio_blurb
+package: libcdio
+blurb: The GNU Compact Disc Input and Control Library (libcdio) is a library
++ for CD-ROM and CD image file access. It allows the developer to add
++ CD access to an application without having to worry about the OS- and
++ device-dependent properties of CD-ROM or the specific details of CD
++ image formats. It includes pycdio, a Python interface to libcdio, and
++ libcdio-paranoia, a library providing jitter-free and
++ error-free audio extraction from CDs.
+
+id: libdbh_blurb
+package: libdbh
+blurb: libdbh provides disk-based hash tables, providing quick lookup of
++ key-value pairs. While its usage is similar in general to that of
++ (G)DBM, it has a different design supporting advanced, atypical usage.
+
+id: liberty_eiffel_blurb
+package: liberty-eiffel
+blurb: Liberty Eiffel project is the GNU Eiffel Compiler. Eiffel is an
++ advanced object-oriented programming language that emphasizes the
++ design and construction of high-quality and reusable software. Liberty
++ Eiffel is a complete, small and fast Eiffel compiler, including an
++ Eiffel to C compiler, documentation tools, a pretty printer, a
++ debugger and various other tools. It also includes a large library of
++ classes as well as a comprehensive set of wrappers/bindings for
++ widespread Free-Software libraries.
+
+id: libextractor_blurb
+package: libextractor
+blurb: GNU libextractor is a library for extracting metadata from files. It
++ supports a very large number of file formats, including audio files,
++ document files, and archive files. Each file format is implemented
++ as a plugin, so new formats can be added easily. The package also
++ contains a command-line tool to extract metadata from a file and
++ print the results.
+
+id: libffcall_blurb
+package: libffcall
+blurb: null (stale)
+
+id: libgcrypt_blurb
+package: libgcrypt
+blurb: Libgcrypt is a general-purpose cryptographic library. It provides
++ the standard cryptographic building blocks such as symmetric ciphers,
++ hash algorithms, public key algorithms, large integer functions and
++ random number generation.
+
+id: libiconv_blurb
+package: libiconv
+blurb: libiconv provides an implementation of the iconv function for systems
++ that lack it. iconv is used to convert between character encodings
++ in a program. It supports a wide variety of different encodings.
+
+id: libidn_blurb
+package: libidn
+blurb: libidn is a library implementing of the Stringprep, Punycode
++ and IDNA specifications. These are used to encode and decode
++ internationalized domain names. It includes native C, C# and Java
++ libraries.
+
+id: libjit_blurb
+package: libjit
+blurb: null (stale)
+
+id: libmatheval_blurb
+package: libmatheval
+blurb: GNU libmatheval is a library to parse and evaluate symbolic
++ expressions input by the user as text. It can be loaded from both C
++ and Fortran. The interpreter is flexible, supporting any number of
++ variables of arbitrary names, decimal and symbolic constants, basic
++ unary and binary operators, and elementary mathematical functions.
++ It can also compute symbolic derivatives and output expressions to
++ strings.
+
+id: libmicrohttpd_blurb
+package: libmicrohttpd
+blurb: GNU libmicrohttpd is a small, embeddable HTTP server implemented as a C
++ library. It makes it easy to run an HTTP server as part of another
++ application. The library is fully HTTP 1.1 compliant. It can listen
++ on multiple ports, supports four different threading models, and
++ supports IPv6. It also features security features such as basic and
++ digest authentication and support for SSL3 and TLS.
+
+id: libredwg_blurb
+package: libredwg
+blurb: null (stale)
+
+id: librejs_blurb
+package: librejs
+blurb: LibreJS is an add-on for GNU Icecat and other Firefox-based browsers.
++ It detects non-trivial and non-free JavaScript code from being loaded
++ without your consent when you browse the web. JavaScript code that
++ is free or trivial is allowed to be loaded.
+
+id: libsigsegv_blurb
+package: libsigsegv
+blurb: GNU libsigsegv is a library to handle page faults, which occur when a
++ program tries to access an unavailable region of memory, in user
++ mode. By catching and handling page faults, the program can
++ implement pageable virtual memory, stack overflow handlers, and so
++ on.
+
+id: libtasn1_blurb
+package: libtasn1
+blurb: GNU libtasn1 is a library implementing the ASN.1 notation. It is used
++ for transmitting machine-neutral encodings of data objects in
++ computer networking, allowing for formal validation of data according
++ to some specifications.
+
+id: libtool_blurb
+package: libtool
+blurb: GNU Libtool helps in the creation and use of shared libraries, by
++ presenting a single consistent, portable interface that hides the
++ usual complexity of working with shared libraries across platforms.
+
+id: libunistring_blurb
+package: libunistring
+blurb: GNU libunistring is a library providing functions to manipulate Unicode
++ strings and for manipulating C strings according to the Unicode
++ standard.
+
+id: libxmi_blurb
+package: libxmi
+blurb: GNU libxmi is a library for rasterizing 2D vector graphics for C and
C++.
++ It supports drawing 2D primitives into a user-supplied matrix of
++ pixels. It also supports the specification of sophisticated line
++ styles such as multi-colored dashed patterns. Filling and texturing
++ polygons is also supported.
+
+id: lightning_blurb
+package: lightning
+blurb: GNU Lightning is a library that generates assembly language code at
++ run-time. Thus, it is useful in creating Just-In-Time compilers. It
++ abstracts over the target CPU by exposing a standardized RISC
++ instruction set to the clients.
+
+id: lilypond_blurb
+package: lilypond
+blurb: GNU LilyPond is a music typesetter, which produces high-quality sheet
++ music. Music is input in a text file containing control sequences
++ which are interpreted by LilyPond to produce the final document. It
++ is extendable with Guile.
+
+id: lims_blurb
+package: lims
+blurb: GNU LIMS is a laboratory information management system. It is
++ used for managing a scientific laboratory of any field. It consists
++ of a set of modules for the Tryton enterprise management framework,
++ so it is flexible to the specific needs of the laboratory. For
++ example, the system includes modules for sample management, lab
++ equipment integration, accounting and stock management.
+
+id: linux_libre_blurb
+package: linux-libre
+blurb: GNU Linux-Libre is a free (as in freedom) variant of the Linux kernel.
++ It has been modified to remove all non-free binary blobs.
+
+id: liquidwar6_blurb
+package: liquidwar6
+blurb: GNU Liquid War 6 is a fast-paced, unique action game. Each player
++ controls a blob of liquid with the goal of conquering the entire map.
++ It has 13 levels by default and over 100 more with a bonus pack; new
++ levels can be easily created using simple image files.
+
+id: lispintro_blurb
+package: lispintro
+blurb: redirect emacs
+
+id: lrzsz_blurb
+package: lrzsz
+blurb: GNU lrzsz is a communication package supporting the XMODEM, YMODEM and
++ ZMODEM file transfer protocols.
+
+id: lsh_blurb
+package: lsh
+blurb: GNU lsh is a free implementation of the SSH version 2 protocol. It is
++ used to create a secure line of communication between two computers,
++ providing shell access to the server system from the client. It
++ provides both the server daemon and the client application, as well
++ as tools for manipulating key files.
+
+id: m4_blurb
+package: m4
+blurb: GNU M4 is an implementation of the M4 macro language, which features
++ some extensions over other implementations, some of which are
++ required by GNU Autoconf. It is used as a macro processor, which
++ means it processes text, expanding macros as it encounters them. It
++ also has some built-in functions, for example to run shell commands
++ or to do arithmetic.
+
+id: macchanger_blurb
+package: macchanger
+blurb: GNU MAC Changer is a utility for viewing and changing MAC addresses
++ of networking devices. New addresses may be set explicitly or
++ randomly. They can include MAC addresses of the same or other
++ hardware vendors or, more generally, MAC addresses of the same
++ category of hardware.
+
+id: mailman_blurb
+package: mailman
+blurb: GNU Mailman is software for managing email discussion and mailing
++ lists. Both users and administrators generally perform their actions
++ in a web interface, although email and command-line interfaces are
++ also provided. The system features built-in archiving, automatic
++ bounce processing, content filtering, digest delivery, and more.
+
+id: mailutils_blurb
+package: mailutils
+blurb: GNU Mailutils is a collection of programs for managing, viewing
++ and processing electronic mail. It contains both utilities and server
++ daemons and all operate in a protocol-agnostic way. The underlying
++ libraries are also available, simplifying the addition of mail
++ capabilities to new software.
+
+id: make_blurb
+package: make
+blurb: Make is a program that is used to control the production of
++ executables or other files from their source files. The process is
++ controlled from a Makefile, in which the developer specifies how
++ each file is generated from its source. It has powerful dependency
++ resolution and the ability to determine when files have to be
++ regenerated after their sources change. GNU make offers many powerful
++ extensions over the standard utility.
+
+id: marst_blurb
+package: marst
+blurb: GNU MARST is an Algol-to-C translator. The package consists of the
++ translator itself, a library that contains the necessary Algol 60
++ procedures, and a converter that converts existing Algol 60 programs
++ from other representations to the MARST representation.
+
+id: maverik_blurb
+package: maverik
+blurb: GNU MAVERIK is a development toolkit that supports 3D virtual
++ environments and interaction with those environments. It sits on top
++ of a low-level rendering engine that uses OpenGL or Mesa, and
++ provides mechanisms to render different kinds of objects, to manage
++ environments and to provide support for 3D interaction.
+
+id: mc_blurb
+package: mc
+blurb: GNU Midnight Commander is a command-line file manager laid out in a
++ common two-pane format. In addition to standard file management
++ tasks such as copying and moving, Midnight Commander also supports
++ viewing the contents of RPM package files and other archives and
++ managing files on other computers via FTP or FISH. It also includes
++ a powerful text editor for opening text files.
+
+id: mcron_blurb
+package: mcron
+blurb: GNU Mcron is a complete replacement for Vixie cron. It is used to run
++ tasks on a schedule, such as every hour or every Monday. Mcron is
++ written in Guile, so its configuration can be written in Scheme;
++ the original cron format is also supported.
+
+id: mcsim_blurb
+package: mcsim
+blurb: GNU MCSim is a package to perform simulations. It supports statistical
++ or deterministic simulation models via Monte Carlo stochastic
++ simulations or dynamic, ODE-based simulations. It also can do
++ Bayesian inference through Markov Chain Monte Carlo simulations.
+
+id: mempool_blurb
+package: mempool
+blurb: The MemPool library is a stand-alone memory allocation library.
++ It is a block allocator library that uses a single fixed size memory
++ pool to allocate variable sized memory blocks, and exports functions
++ similar to malloc, realloc and free.
++ It is intended to either simulate low memory targets on GNU/Linux and
++ other systems, or to completely replace the system memory management.
+
+id: mdk_blurb
+package: mdk
+blurb: GNU MDK is the Mix Development Kit, an emulation of the pedagogical
++ computer MIX and its assembly language MIXAL. MIX has a virtual CPU
++ with standard features such as registers, memory cells, an overflow
++ toggle, comparison flags, input-output devices, and a set of binary
++ instructions. The package includes a compiler, a virtual machine, a
++ GUI for the virtual machine, and more.
+
+id: mediagoblin_blurb
+package: mediagoblin
+blurb: GNU MediaGoblin is a free media publishing platform. It runs in a
++ federalized manner, freeing the user from centralized web services.
++ It supports pictures, videos and audio.
+
+id: melting_blurb
+package: melting
+blurb: GNU MELTING computes the enthalpy, entropy and melting temperature of
++ helix-coil transitions of a nucleic acid duplex.
+
+id: mes_blurb
+package: mes
+blurb: GNU Mes aims to help create full source bootstrapping for GNU/Linux
++ systems such as GuixSD. It features a mutual self-hosting Scheme
++ interpreter written in a simple C, and a Nyacc-based C compiler written in
++ GNU Guile-compatible Scheme. The Mes C library supports bootstrapping gcc.
+
+id: metaexchange_blurb
+package: metaexchange
+blurb: null (stale)
+
+id: metahtml_blurb
+package: metahtml
+blurb: GNU MetaHTML is a server-side programming language designed for the
++ World Wide Web. It has a syntax that is similar to HTML and Lisp.
++ It provides a large function library, including support for sockets,
++ image creation and connections to other programs.
+
+id: metalogic_inference_blurb
+package: metalogic-inference
+blurb: null (newpkg/20170419)
+
+id: mifluz_blurb
+package: mifluz
+blurb: GNU mifluz is a C++ library to store a full-text inverted index. It
++ stores the occurrences of words in a set of texts in such a way that
++ they can later be searched. Upon searching for a word, the index
++ returns the list of documents which contain that word.
+
+id: mig_blurb
+package: mig
+blurb: redirect hurd
+
+id: miscfiles_blurb
+package: miscfiles
+blurb: GNU Miscfiles is a collection of common data files. They
++ include, for example, country abbreviations, names and capital cities;
++ currency abbreviations and names; a Best Current Practices index; a map
++ of the ASCII character set; a list of three-letter airport codes; and
++ an English word list.
+
+id: mit_scheme_blurb
+package: mit-scheme
+blurb: GNU/MIT Scheme is an implementation of the Scheme programming
++ language. It provides an interpreter, a compiler and a debugger. It
++ also features an integrated Emacs-like editor and a large runtime
++ library.
+
+id: moe_blurb
+package: moe
+blurb: GNU Moe is a powerful-but-simple-to-use text editor. It works in a
++ modeless manner, and features an intuitive set of key-bindings that
++ assign a degree of severity to each key; for example, key
++ combinations with the Alt key are for harmless commands like cursor
++ movements while combinations with the Control key are for commands
++ that will modify the text. Moe features multiple windows, unlimited
++ undo/redo, unlimited line length, global search and replace, and
++ more.
+
+id: motti_blurb
+package: motti
+blurb: GNU Motti is a simple multiplayer strategy game played in a terminal.
++ The objective of the game is to conquer enemy capitals by occupying and
++ encircling territory.
+
+id: mpc_blurb
+package: mpc
+blurb: GNU MPC is a C library for performing arithmetic on complex numbers.
++ It supports arbitrarily high precision and it correctly rounds the
++ results.
+
+id: mpfr_blurb
+package: mpfr
+blurb: GNU MPFR is a C library for performing multiple-precision,
++ floating-point computations with correct rounding.
+
+id: mpria_blurb
+package: mpria
+blurb: GNU MPRIA is a C library for performing rational arithmetic
++ computations with arbitrarily high precision. It builds on
++ the GMP library.
+
+id: mtools_blurb
+package: mtools
+blurb: GNU Mtools is a set of utilities for accessing MS-DOS disks from
++ a GNU or Unix system. It supports long file names and multiple disk
++ formats. It also supports some FAT-specific features such as volume
++ labels and FAT-specific file attributes.
+
+id: nana_blurb
+package: nana
+blurb: GNU Nana is a framework for adding assertion checking, logging and
++ performance measurement to C and C++ programs. Operations can either
++ be implemented directly in C or by generating debugger commands.
++ Checking and logging features can be enabled or disabled at compile
++ or runtime.
+
+id: nano_blurb
+package: nano
+blurb: GNU nano is a small and simple text editor for use in a terminal.
++ Besides basic editing, it supports: undo/redo, syntax highlighting,
++ spell checking, justifying, auto-indentation, bracket matching,
++ interactive search-and-replace (with regular expressions), and the
++ editing of multiple files.
+
+id: nano_archimedes_blurb
+package: nano-archimedes
+blurb: nano-archimedes is a free package for the simulation of quantum
++ systems. It is based on the Wigner equation, a formulation of quantum
++ mechanics in terms of a phase-space which is mathematically equivalent
++ to the Schroedinger equation. nano-archimedes implements the Wigner
++ Monte Carlo method. The code can be easily extended to density
++ functional theory (DFT) and time-dependent ab-initio simulations.
+
+id: ncurses_blurb
+package: ncurses
+blurb: GNU Ncurses is a library which provides capabilities to write text to a
++ terminal in a terminal-independent manner. It supports pads and
++ color as well as multiple highlights and forms characters. It is
++ typically used to implement user interfaces for command-line
++ applications. The accompanying ncursesw library provides wide character
++ support.
+
+id: nettle_blurb
+package: nettle
+blurb: GNU Nettle is a low-level cryptographic library. It is designed to fit
++ in easily in almost any context. It can be easily included in
++ cryptographic toolkits for object-oriented languages or in
++ applications themselves.
+
+id: network_blurb
+package: network
+blurb: null (container for network work)
+
+id: ocrad_blurb
+package: ocrad
+blurb: GNU Ocrad is an optical character recognition program based on a feature
++ extraction method. It can read images in PBM, PGM or PPM formats and
++ it produces text in 8-bit or UTF-8 formats.
+
+id: octave_blurb
+package: octave
+blurb: GNU Octave is a high-level interpreted language that is specialized
++ for numerical computations. It can be used for both linear and
++ non-linear applications and it provides great support for visualizing
++ results. Work may be performed both at the interactive command-line
++ as well as via script files.
+
+id: oleo_blurb
+package: oleo
+blurb: GNU Oleo is a spreadsheet program. It offers both a terminal interface
++ and a LessTif-based graphical user interface. It features familiar,
++ Emacs-like keybindings. It supports many standard spreadsheet
++ features such as macros and functions.
+
+id: oo_browser_blurb
+package: oo-browser
+blurb: null (newpkg/20160810)
+
+id: orgadoc_blurb
+package: orgadoc
+blurb: GNU OrgaDoc is a system for easily maintaining a pool of documents
++ between computers. Documents are synchronized by rsync or unison; no
++ database or HTTP server is required.
+
+id: osip_blurb
+package: osip
+blurb: GNU oSIP is an implementation of the SIP protocol. It is used to
provide
++ multimedia and telecom software developers with an interface to
++ initiate and control SIP sessions.
+
+id: panorama_blurb
+package: panorama
+blurb: GNU Panorama is a framework for producing 3D graphics. It can perform
++ various effects, such as focal blur, arbitrary light sources, bump
++ mapping, and several lighting effects.
+
+id: parallel_blurb
+package: parallel
+blurb: GNU Parallel is a tool for executing shell jobs in parallel using one
++ or more computers. Jobs can consist of single commands or of scripts
++ and they are executed on lists of files, hosts, users or other items.
+
+id: parted_blurb
+package: parted
+blurb: GNU Parted is a package for creating and manipulating disk
++ partition tables. It includes a library and command-line utility.
+
+id: pascal_blurb
+package: pascal
+blurb: null (stale)
+
+id: patch_blurb
+package: patch
+blurb: Patch is a program that applies changes to files based on differences
++ laid out as by the program "diff". The changes may be applied to one or
++ more files depending on the contents of the diff file. It accepts
++ several different diff formats. It may also be used to revert
++ previously applied differences.
+
+id: paxutils_blurb
+package: paxutils
+blurb: GNU paxutils is a suite of archive utilities. It contains versions
++ of the cpio, tar and pax archivers.
+
+id: pcb_blurb
+package: pcb
+blurb: GNU PCB is an interactive tool for editing printed circuit board
layouts.
++ It features a rats-nest implementation, schematic/netlist import, and
++ design rule checking. It also includes an autorouter and a trace
++ optimizer; and it can produce photorealistic and design review
++ images.
+
+id: pdf_blurb
+package: pdf
+blurb: null (stale)
+
+id: pem_blurb
+package: pem
+blurb: GNU Pem is a simple tool for tracking personal income and
++ expenses. It operates from the command line and it stores its data
++ in a basic text format in your home directory. It can easily print
++ reports of your spending on different expenses via a basic search
++ feature.
+
+id: pexec_blurb
+package: pexec
+blurb: GNU pexec is a program for executing commands or shell scripts in
++ parallel on one or many computers. As it works, execution parameters
++ such as the environment variables or standard input, output and
++ error can be varied.
+
+id: pgccfd_blurb
+package: pgccfd
+blurb: null (stale)
+
+id: home_blurb
+package: phantom_home
+blurb: null (stale)
+
+id: pies_blurb
+package: pies
+blurb: GNU pies is a program that supervises the invocation and execution of
++ other programs. It reads the list of programs to be started from its
++ configuration file, executes them, and then monitors their status,
++ re-executing them as necessary.
+
+id: pipo_blurb
+package: pipo
+blurb: null (stale)
+
+id: plotutils_blurb
+package: plotutils
+blurb: GNU Plotutils is a package for plotting and working with
++ 2D graphics. It includes a library, "libplot", for C and C++ for
++ exporting 2D vector graphics in many file formats. It also has
++ support for 2D vector graphics animations. The package also contains
++ command-line programs for plotting scientific data.
+
+id: polyxmass_blurb
+package: polyxmass
+blurb: null (stale)
+
+id: powerguru_blurb
+package: powerguru
+blurb: null (stale)
+
+id: proxyknife_blurb
+package: proxyknife
+blurb: GNU proxyknife is a tool to validate free proxies from behind a
++ firewall. The validation process is fully customizable to meet your
++ needs.
+
+id: pspp_blurb
+package: pspp
+blurb: GNU PSPP is a statistical analysis program. It can perform descriptive
++ statistics, T-tests, linear regression and non-parametric tests. It
++ features both a graphical interface as well as command-line input.
++ PSPP is designed to interoperate with Gnumeric, LibreOffice and
++ OpenOffice. Data can be imported from spreadsheets, text files and
++ database sources and it can be output in text, PostScript, PDF or
++ HTML.
+
+id: psychosynth_blurb
+package: psychosynth
+blurb: GNU Psychosynth is an interactive, modular soft-synth. It emulates a 3D
++ surface on which modules are placed and manipulated, generating and
++ altering music. Psychosynth consists of a C++ library, a 3D
++ interface and a command-line interface.
+
+id: pythonwebkit_blurb
+package: pythonwebkit
+blurb: null (stale)
+
+id: pth_blurb
+package: pth
+blurb: GNU Pth is a portable library providing non-preemptive, priority-based
++ scheduling for multiple execution threads. Each thread has its own
++ program-counter, run-time stack, signal mask and errno variable.
++ Threads are scheduled in a cooperative way, rather than in the
++ standard preemptive way, such that they are managed according to
++ priority and events. However, Pth also features emulation of
++ POSIX.1c threads ("pthreads") for backwards compatibility.
+
+id: pyconfigure_blurb
+package: pyconfigure
+blurb: GNU pyconfigure provides template files for easily implementing
++ standards-compliant configure scripts and Makefiles for Python-based
++ packages. It is designed to work alongside existing Python setup
++ scripts, making it easy to integrate into existing projects. Powerful
++ and flexible Autoconf macros are available, allowing you to easily
++ make adjustments to the installation procedure based on the
++ capabilities of the target computer.
+
+id: qexo_blurb
+package: qexo
+blurb: redirect kawa
+
+id: quickthreads_blurb
+package: quickthreads
+blurb: null (stale)
+
+id: r_blurb
+package: r
+blurb: R is a language and environment for statistical computing and
++ graphics. It provides a variety of statistical techniques, such as
++ linear and nonlinear modeling, classical statistical tests,
++ time-series analysis, classification and clustering. It also provides
++ robust support for producing publication-quality data plots. A large
++ amount of 3rd-party packages are available, greatly increasing its
++ breadth and scope.
+
+id: radius_blurb
+package: radius
+blurb: Radius is a server for remote user authentication and accounting.
++ It is generally useful for networks that require a centralized
++ authentication and accounting services for its workstations.
++ Authentication can be performed in a variety of ways, such as via
++ "/etc/passwd" or credentials stored in an SQL database.
+
+id: rcs_blurb
+package: rcs
+blurb: RCS is the original Revision Control System. It works on a
++ file-by-file basis, in contrast to subsequent version control systems
++ such as CVS, Subversion, and Git. This can make it suitable for
++ system administration files, for example, which are often inherently
++ local to one machine.
+
+id: readline_blurb
+package: readline
+blurb: The GNU readline library allows users to edit command lines as they
++ are typed in. It can maintain a searchable history of previously
++ entered commands, letting you easily recall, edit and re-enter past
++ commands. It features both Emacs-like and vi-like keybindings,
++ making its usage comfortable for anyone.
+
+id: recutils_blurb
+package: recutils
+blurb: GNU Recutils is a set of tools and libraries for creating and
++ manipulating text-based, human-editable databases. Despite being
++ text-based, databases created with Recutils carry all of the expected
++ features such as unique fields, primary keys, time stamps and more.
++ Many different field types are supported, as is encryption.
+
+id: reftex_blurb
+package: reftex
+blurb: GNU RefTex is a package for implementing labels, references, citations
++ and indices in LaTeX documents. It works by wrapping around four
++ LaTeX macros: label, ref, cite and index. It automates the common
++ tasks that normally are required when using these macros.
+
+id: jami_blurb
+package: jami
+blurb: Jami is a program for universal communication which respects freedoms
++ and privacy of its users. Jami uses distributed hash tables for
++ establishing communication. This avoids keeping centralized registries
++ of users and storing personal data.
+
+id: remotecontrol_blurb
+package: remotecontrol
+blurb: GNU Remotecontrol is a web application for managing IP-enabled HVAC
++ thermostats and other building automation devices. The application
++ can read data from and write data to multiple such devices.
+
+id: rottlog_blurb
+package: rottlog
+blurb: GNU Rot[t]log is a program for managing log files. It is used to
++ automatically rotate out log files when they have reached a given
++ size or according to a given schedule. It can also be used to
++ automatically compress and archive such logs. Rot[t]log will mail
++ reports of its activity to the system administrator.
+
+id: rpge_blurb
+package: rpge
+blurb: The GNU Role Playing Game Engine provides an engine for
++ creating two-dimensional, graphical role-playing games, providing,
++ for example, a sprite-tiling grid, sprite rendering, and event
++ handling.
+
+id: rush_blurb
+package: rush
+blurb: GNU Rush is a restricted user shell, for systems on which users
++ are to be provided with only limited functionality or resources.
++ Administrators set user rights via a configuration file which can be
++ used to limit, for example, the commands that can be executed, CPU
++ time, or virtual memory usage.
+
+id: sather_blurb
+package: sather
+blurb: GNU Sather is an object-oriented programming language similar to Eiffel.
++ It is designed to be simple, efficient, safe, and non-proprietary.
++ It features garbage collection, statically-checked strong typing,
++ multiple inheritance, parameterized classes and more. This package
++ consists of a compiler, a class library, the language specification
++ and programming manual, and a browser for displaying sources and
++ directed graphs of class inheritance.
+
+id: scm_blurb
+package: scm
+blurb: GNU SCM is an implementation of Scheme. This implementation includes
++ Hobbit, a Scheme-to-C compiler, which can generate C files whose
++ binaries can be dynamically or statically linked with a SCM
++ executable.
+
+id: screen_blurb
+package: screen
+blurb: GNU Screen is a terminal window manager that multiplexes a single
++ terminal between several processes. The virtual terminals each
++ provide features such as a scroll-back buffer and a copy-and-paste
++ mechanism. Screen then manages the different virtual terminals,
++ allowing you to easily switch between them, to detach them from the
++ current session, or even splitting the view to show two terminals at
++ once.
+
+id: sed_blurb
+package: sed
+blurb: Sed is a non-interactive, text stream editor. It receives a text
++ input from a file or from standard input and it then applies a series
++ of text editing commands to the stream and prints its output to
++ standard output. It is often used for substituting text patterns in
++ a stream. The GNU implementation offers several extensions over the
++ standard utility.
+
+id: serveez_blurb
+package: serveez
+blurb: GNU Serveez is a server framework providing the routines necessary to
++ easily implement IP-based servers in your application. It
++ demonstrates aspects of network programming in a portable manner,
++ making it convenient for both simplifying the process of adding a
++ server to your application or for learning about how network services
++ work. Several example servers are provided already, such as an HTTP
++ server and an IRC server.
+
+id: sharutils_blurb
+package: sharutils
+blurb: GNU sharutils is a package for creating and manipulating shell
++ archives that can be readily emailed. A shell archive is a file
++ that can be processed by a Bourne-type shell to unpack the original
++ collection of files. This package is mostly for compatibility and
++ historical interest.
+
+id: shepherd_blurb
+package: shepherd
+blurb: The GNU Shepherd is a daemon-managing daemon, meaning that it
++ supervises the execution of system services, replacing similar
++ functionality found in typical init systems. It provides
++ dependency-handling through a convenient interface and is based on
++ GNU Guile.
+
+id: shishi_blurb
+package: shishi
+blurb: GNU Shishi is a free implementation of the Kerberos 5 network security
++ system. It is used to allow non-secure network nodes to communicate
++ in a secure manner through client-server mutual authentication via
++ tickets.
+
+id: shmm_blurb
+package: shmm
+blurb: GNU SHMM is a shared memory manager. It can read or write to shared
++ memory. It also supports other commands such as locking or unlocking
++ a block of shared memory identified by key and size.
+
+id: shtool_blurb
+package: shtool
+blurb: GNU shtool is a multipurpose shell tool. It can perform the
++ functions of many different commands, in order to provide a single
++ tool to distribute with a source distribution in order to ensure
++ portability of shell scripts. For example, shtool can perform the
++ jobs of the common commands "install", "mkdir" or "echo" on systems
++ that lack them.
+
+id: sipwitch_blurb
+package: sipwitch
+blurb: GNU SIP Witch is a peer-to-peer Voice-over-IP server that uses the
++ SIP protocol. Calls can be made from behind NAT firewalls and
++ without the need for a service provider. Its peer-to-peer design
++ ensures that there is no central point for media intercept or capture
++ and thus it can be used to construct a secure telephone system that
++ operates over the public internet.
+
+id: slib_blurb
+package: slib
+blurb: GNU SLIB is a portable common library for the Scheme programming
++ language. It supports a large variety of different Scheme
++ implementations, offering them a framework for using packages of
++ Scheme procedures and syntax.
+
+id: smalltalk_blurb
+package: smalltalk
+blurb: GNU Smalltalk is a free implementation of the Smalltalk language. It
++ implements the ANSI standard for the language and also includes extra
++ classes such as ones for networking and GUI programming.
+
+id: social_blurb
+package: social
+blurb: null (stale)
+
+id: solfege_blurb
+package: solfege
+blurb: GNU Solfege is a program for practicing musical ear-training. With it,
++ you can practice your recognition of various musical intervals and
++ chords. It features a statistics overview so you can monitor your
++ progress across several sessions. Solfege is also designed to be
++ extensible so you can easily write your own lessons.
+
+id: spacechart_blurb
+package: spacechart
+blurb: GNU SpaceChart lets you view how the stars are distributed in
++ three-dimensional space. It allows you, for example, to determine
++ the distances between stars, to view them from any point of view, or
++ to filter your view by spectral class and luminosity.
+
+id: speex_blurb
+package: speex
+blurb: GNU Speex is a patent-free audio compression codec specially
++ designed for speech. It is well-adapted to internet applications,
++ such as VoIP. It features compression of different bands in the same
++ bitstream, intensity stereo encoding, and voice activity detection.
+
+id: spell_blurb
+package: spell
+blurb: Spell is a command-line spell-checking program. It reads through a
++ text input and prints each misspelled word on a line of its own. It
++ is implemented as a wrapper for GNU aspell or ispell.
+
+id: sqltutor_blurb
+package: sqltutor
+blurb: GNU Sqltutor is a web-based, interactive SQL tutorial. It features
++ multiple tutorials available in different languages. The tutorials
++ present a series of questions in a dialog and, when complete, they
++ display a final evaluation including correct answers for wrong
++ solutions.
+
+id: ssw_blurb
+package: ssw
+blurb: A Gtk+ widget providing a 2 dimensional array to view and manipulate
++ tabular data similar to that provided by popular spread sheet programs.
++ The design follows the model-view-controller paradigm and is O(1) in both
++ time and space, providing very fast and efficient operation even on very
++ large data. Features such as cut and paste, drag and drop etc are
++ included.
+
+id: src_highlite_blurb
+package: src-highlite
+blurb: GNU source-highlight reads in a source code file and produces an output
++ file in which the keywords are highlighted in different colors to
++ designate their syntactic role. It supports over 150 different
++ languages and it can output to 8 different formats, including HTML,
++ LaTeX and ODF. It can also output to ANSI color escape sequences,
++ so that highlighted source code can be seen in a terminal.
+
+id: stalkerfs_blurb
+package: stalkerfs
+blurb: null (stale)
+
+id: stow_blurb
+package: stow
+blurb: GNU Stow is a symlink manager. It generates symlinks to directories of
++ data and makes them appear to be merged into the same directory. It
++ is typically used for managing software packages installed from source,
++ by letting you install them apart in distinct directories and then
++ create symlinks to the files in a common directory such as
++ /usr/local.
+
+id: stump_blurb
+package: stump
+blurb: GNU STUMP is a robomoderator program for USENET newsgroups and mailing
++ lists, featuring web-based moderation. It supports group moderation
++ via multiple human moderators. It can also automatically reject
++ non-conforming messages without human intervention. It includes a web
++ interface.
+
+id: superopt_blurb
+package: superopt
+blurb: GNU Superopt is a function sequence generator for superoptimization. It
++ uses an exhaustive generate-and-test approach to find the shortest
++ instruction sequence for a given function.
+
+id: swbis_blurb
+package: swbis
+blurb: Swbis is a software administration system specified by POSIX. It
++ features network-transparent management of software packages for
++ system administrators. For example, entire file system directories
++ can be copied host-to-host across a network in a transparent manner.
++ The package also features advanced tarball creation methods and
++ integrity checking mechanisms.
+
+id: sysutils_blurb
+package: sysutils
+blurb: null (stale)
+
+id: taler_blurb
+package: taler
+blurb: null (newpkg/20150206)
+
+id: talkfilters_blurb
+package: talkfilters
+blurb: The GNU Talk Filters are programs that convert English text into
++ stereotyped or otherwise humorous dialects. The filters are provided
++ as a C library, so they can easily be integrated into other programs.
+
+id: tar_blurb
+package: tar
+blurb: Tar provides the ability to create tar archives, as well as the
++ ability to extract, update or list files in an existing archive. It
++ is useful for combining many files into one larger file, while
++ maintaining directory structure and file information such as
++ permissions and creation/modification dates. GNU tar offers many
++ extensions over the standard utility.
+
+id: termcap_blurb
+package: termcap
+blurb: GNU termcap is a library and a database that are used to enable the use
++ of display terminals in a terminal-independent manner. The database
++ describes the capabilities of many different display terminals. The
++ library can then adapt generalized instructions given by a program to
++ the specific capabilities of the display terminal as found in the
++ database.
+
+id: termutils_blurb
+package: termutils
+blurb: The GNU Termutils package contains two programs, "tput" and
++ "tabs". "tput" is used in shell scripts to manipulate the terminal
++ display, for example by clearing it or moving the cursor to a specific
++ point, centering text or underlining text. "tabs" is used to specify
++ and set hardware tab stops on terminals that support it.
+
+id: teseq_blurb
+package: teseq
+blurb: GNU Teseq is a program that analyzes files that contain control
++ sequences. It converts the sequences that it encounters into a
++ human-readable description of what actions those sequences perform.
++ It can also translate its output back into machine-readable control
++ sequences.
+
+id: teximpatient_blurb
+package: teximpatient
+blurb: TeX for the Impatient is a ~350 page book on TeX, plain TeX and
++ Eplain, written by Paul Abrahams, Kathryn Hargreaves and Karl Berry.
+
+id: texinfo_blurb
+package: texinfo
+blurb: Texinfo is the official documentation format of the GNU project. It
++ uses a single source file using explicit commands to
++ produce a final document in any of several supported output formats,
++ such as HTML or PDF. This package includes both the tools necessary
++ to produce Info documents from their source and the
++ command-line Info reader. The emphasis of the language is on
++ expressing the content semantically, avoiding physical markup commands.
+
+id: texmacs_blurb
+package: texmacs
+blurb: GNU TeXmacs is a text editing platform which is specialized for
++ scientists. It is ideal for editing structured documents with
++ different types of content. It has robust support for mathematical
++ formulas and plots. It can also act as an interface to external
++ mathematical programs such as R and Octave. TeXmacs is completely
++ extensible via Guile.
+
+id: thales_blurb
+package: thales
+blurb: GNU Thales provides macros for performing unit testing in Guile
++ and for checking the stability of the public interface of your
++ modules.
+
+id: time_blurb
+package: time
+blurb: Time is a command that displays information about the resources that
++ a program uses. The display output of the program can be customized
++ or saved to a file.
+
+id: tramp_blurb
+package: tramp
+blurb: TRAMP is a GNU Emacs package that allows you to access files on remote
++ machines as though they were local files. This includes editing
++ files, performing version control tasks and modifying directory
++ contents with dired. Access is performed via ssh, rsh, rlogin,
++ telnet or other similar methods.
+
+id: trans_coord_blurb
+package: trans-coord
+blurb: redirect gnun
+
+id: trueprint_blurb
+package: trueprint
+blurb: GNU Trueprint translates C source code files as PostScript files.
++ In addition to the basic source code output, it can also perform
++ diff-marking, indentation counting, function and file indices and
++ more.
+
+id: unifont_blurb
+package: unifont
+blurb: GNU Unifont is a bitmap font covering essentially all of
++ Unicode's Basic Multilingual Plane. The package also includes
++ utilities to ease adding new glyphs to the font.
+
+id: units_blurb
+package: units
+blurb: GNU Units converts numeric quantities between units
++ of measure. It can handle scale changes through adaptive usage of
++ standard scale prefixes (micro-, kilo-, etc.). It can also
++ handle nonlinear conversions such as Fahrenheit to Celsius. Its
++ interpreter is powerful enough to be used effectively as a scientific
++ calculator.
+
+id: unrtf_blurb
+package: unrtf
+blurb: GNU UnRTF converts text documents from RTF to HTML,
++ LaTeX, or troff. It supports changes in font characteristics,
++ underlines and strikethroughs, superscripts and subscripts, and more.
+
+id: userv_blurb
+package: userv
+blurb: GNU Userv is a utility that allows one program to invoke another even
++ when only limited trust exists between them. This prevents the need
++ from having to first switch to a different user account to perform
++ certain tasks.
+
+id: uucp_blurb
+package: uucp
+blurb: Taylor UUCP is the GNU implementation of UUCP (Unix-to-Unix Copy), a
++ set of utilities for remotely transferring files, email and net news
++ between computers.
+
+id: vc_dwim_blurb
+package: vc-dwim
+blurb: The vc-dwim package contains two tools, "vc-dwim" and "vc-chlog".
++ vc-dwim is a tool that simplifies the task of maintaining a ChangeLog
++ and using version control at the same time, for example by printing
++ a reminder when a file change has been described in the ChangeLog but
++ the file has not been added to the VC. vc-chlog scans changed files
++ and generates standards-compliant ChangeLog entries based on the
++ changes that it detects.
+
+id: vcdimager_blurb
+package: vcdimager
+blurb: GNU VCDImager is a suite of programs for working with Video CDs
++ and Super Video CDs. It can be used for authoring, disassembling and
++ analyzing discs. It supports full playback control, segment play
++ items, automatic padding of MPEG streams on the fly, and extraction of
++ Video CDs into files.
+
+id: vera_blurb
+package: vera
+blurb: V.E.R.A. (Virtual Entity of Relevant Acronyms) is a list of computing
++ acronyms distributed as an info document.
+
+id: vmgen_blurb
+package: vmgen
+blurb: redirect gforth
+
+id: wb_blurb
+package: wb
+blurb: GNU WB is a disk-based, sorted, associative-array database
++ package for C, Scheme, Java and C#. Rather than being implemented via
++ hashing, WB uses B-trees, which are optimized for using the minimum
++ number of disk operations.
+
+id: wdiff_blurb
+package: wdiff
+blurb: GNU Wdiff is a front-end to the diff program from Diffutils that allows
++ you to compare files on a word-by-word basis, where a word is
++ anything between whitespace.
+
+id: websocket4j_blurb
+package: websocket4j
+blurb: GNU Websocket4j is a Java library implementing the WebSocket protocol.
++ With it, you can build web applications that interact with Java
++ applications. The library includes both server- and client-side
++ functionality.
+
+id: webstump_blurb
+package: webstump
+blurb: redirect stump
+
+id: wget_blurb
+package: wget
+blurb: GNU Wget is a non-interactive tool for fetching files using the HTTP,
++ HTTPS and FTP protocols. It can resume interrupted downloads, use
++ file name wild cards, supports proxies and cookies, and it can convert
++ absolute links in downloaded documents to relative links.
+
+id: which_blurb
+package: which
+blurb: The which program finds the location of executables in PATH, with
++ a variety of options. It is an alternative to the shell "type"
++ built-in command.
+
+id: womb_blurb
+package: womb
+blurb: null (infrastructure randomness)
+
+id: xaos_blurb
+package: xaos
+blurb: GNU XaoS is a graphical program that generates fractal patterns and
++ allows you to zoom in and out of them infinitely in a fluid,
++ continuous manner. It also includes tutorials that help to explain
++ how fractals are built. It can generate many different fractal types
++ such as the Mandelbrot set.
+
+id: xboard_blurb
+package: xboard
+blurb: GNU XBoard is a graphical board for all varieties of chess, including
++ international chess, xiangqi (Chinese chess), shogi (Japanese chess)
++ and Makruk. Several lesser-known variants are also supported. It
++ presents a fully interactive graphical interface and it can load and
++ save games in the Portable Game Notation.
+
+id: xlogmaster_blurb
+package: xlogmaster
+blurb: GNU Xlogmaster is a program with a graphical user interface that lets
you
++ monitor your system logs in a convenient way. The logs can be
++ displayed with filters for highlighting or hiding lines. The program
++ can also be used to automate taking actions upon user-defined events.
+
+id: xmlat_blurb
+package: xmlat
+blurb: null (stale)
+
+id: xnee_blurb
+package: xnee
+blurb: GNU Xnee is a program that can record, replay and distribute user
++ actions in X11. It can be used to automate user interactions for
++ testing or demonstration purposes.
+
+id: xorriso_blurb
+package: xorriso
+blurb: GNU Xorriso is a tool for copying files to and from ISO 9660 Rock
++ Ridge, a.k.a. Compact Disc File System, filesystems and it allows
++ session-wise manipulation of them. It features a formatter and burner
++ for CD, DVD and BD. It can operate on existing ISO images or it can
++ create new ones. xorriso can then be used to copy files directly into
++ or out of ISO files.
+
+id: zile_blurb
+package: zile
+blurb: GNU Zile is a lightweight Emacs clone. It usage is similar to
++ the default Emacs configuration, but it carries a much lighter feature set.
+
+# Local Variables:
+# compile-command: "recfix pkgblurbs.rec"
+# End:
Index: rec/nonpackages.rec
===================================================================
RCS file: rec/nonpackages.rec
diff -N rec/nonpackages.rec
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rec/nonpackages.rec 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,21 @@
+# $Id: nonpackages.rec,v 1.1 2019/05/11 10:44:54 ineiev Exp $
+# Public domain.
+#
+# This file records information about software that is not an official
+# GNU package on its own, but we want to automatically generate entries
+# about it anyway. There is nothing private in this file.
+
+%rec: Package rec/package-descriptor.rec
+%doc: Packages which are not official or independent
+
+package: gnus
+doc_category: Email
+doc_summary: Emacs-based mail and news reader.
+activity_status: nonpkg
+
+package: mh-e
+doc_category: Email
+doc_summary: Emacs interface to the MH mail system.
+activity_status: nonpkg
+
+# End. (Do not remove this line or the blank line before it. Thanks.)
Index: rec/oldpackages.rec
===================================================================
RCS file: rec/oldpackages.rec
diff -N rec/oldpackages.rec
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rec/oldpackages.rec 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,618 @@
+# $Id: oldpackages.rec,v 1.1 2019/05/11 10:44:54 ineiev Exp $
+# Public domain.
+#
+# This file is maintained in the CVS repository of GNU womb,
+# http://cvs.savannah.gnu.org/viewvc/gnumaint/?root=womb
+#
+# This file records information and the old gnupackages entries for
+# packages which we have decommissioned.
+#
+# There is nothing private in this file.
+
+%rec: Package rec/package-descriptor.rec
+%doc: Decommissioned GNU packages
+%mandatory: gone
+## In all cases, the last_activity date is the date of decommissioning
+## (if known). The "gone" field provides the reason for
+## decommissioning, however in some cases this was never recorded.
+
+package: cobol
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: COBOL for GCC
+doc_url: none
+blurb_id: cobol_blurb
+download_url: http://sourceforge.net/project/showfiles.php?group_id=5709
+gplv3_status: next-release
+last_release: 0.1.2
+last_release_date: 20000812
+last_contact: 26oct08 replied
+note: dedicated maintainer, but will not be able to resume full-time work
+note: for 4-5 years (after 6 months full-time work). But it's a Cobol
+note: compiler, hardly likely to find other implementors, and lots and lots
+note: of work has been done. Mail from tej, 26 Oct 2008 12:42:10 +1100.
+activity_status: moribund
+last_activity: 20000812
+
+package: libreboot
+copyright_holder: notfsf
+logo: https://libreboot.org/logo/logo.png
+language: shell,c
+doc_category: Sysadmin
+doc_summary: A free BIOS/UEFI replacement
+doc_url: none
+gplv3_status: ok
+activity_status: newpkg
+last_activity: 20160514
+
+package: dmd
+copyright_holder: fsf-no-reply-individual-name-in-files
+doc_category: Sysadmin
+doc_summary: Daemon managing daemons
+doc_url: none
+gplv3_status: not-done-in-0.5
+download_url: http://www.wt-lorsch.de/dmd--0.5.tar.gz
+last_release: 0.5
+note: exact last release date unknown
+last_release_date: 20030101
+activity_status: decommissioned
+last_activity: 20160117
+gone: per maintainer: renamed to shepherd
+
+package: sovix
+copyright_holder: notfsf
+doc_category: Web
+doc_summary: Emacs-like website revision system
+doc_url: none
+gplv3_status: done-in-0.0.1.5 (agplv3)
+last_release: 0.0.1.7
+last_release_date: 20081215
+activity_status: decommissioned
+last_activity: 20150312
+gone: per englund; maintainer long since took it from GNU
+
+package: myserver
+copyright_holder: fsf-ok-with-dependencies-libxml-libevent-#786724
+language: c++
+logo: /software/myserver/logo.png
+doc_category: Internet
+doc_summary: Multi-threaded web server
+doc_url: none
+gplv3_status: done-as-of-0.9.2
+last_release: 0.11
+last_release_date: 20110716
+activity_status: decommissioned
+last_activity: 20140314
+note: doc_url was htmlxref, but gone now, author working 11mar12
+gone: per maintainer
+
+package: fcrypt
+copyright_holder: fsf-ok-#786630
+doc_category: Sysadmin
+doc_summary: on-the-fly encrypted filesystems, including secret partitions
+doc_url: none
+gplv3_status: should-be-ok
+activity_status: decommissioned
+note: no-release
+last_activity: 20131005
+gone: strange behavior by maintainer
+
+package: w3
+copyright_holder: fsf-no-reply
+doc_category: Internet
+doc_summary: Web browser written entirely in Emacs Lisp
+doc_url: none
+gplv3_status: not-done-since-stale
+activity_status: decommissioned
+note: no-release
+gone: now http://elpa.gnu.org/packages/w3.html
+
+package: dismal
+copyright_holder: fsf-no-reply
+doc_category: Spreadsheets
+doc_summary: Emacs spreadsheet mode
+doc_url: none
+download_url: http://acs.ist.psu.edu/dismal/
+gplv3_status: working (gnumaint-reply 22 Aug 2007 01:16:36)
+last_release: 1.4
+last_release_date: 20130528
+activity_status: decommissioned
+last_activity: 20130809
+note: copyright.list says fsf, but actual copyrights don't
+note: http://acs.ist.psu.edu/dismal/dismal-1.4.tar.gz
+last_contact: 25jan11 replied soon, 17nov10, 29oct08 asked
+gone: now http://elpa.gnu.org/packages/dismal.html (M-x list-packages)
+
+package: gnu-arch
+mundane_name: Arch
+copyright_holder: notfsf-#786554
+doc_category: Version
+doc_summary: Distributed version control system
+doc_url: htmlxref
+logo: /software/gnu-arch/graphics/octopus-a-small.png
+gplv3_status: decommissioning-since-no-changes (atai 17 Dec 2007 10:00:18
-0800)
+last_release: 1.3.5
+last_release_date: 20060720
+activity_status: decommissioned
+last_activity: 20130529
+last_contact: 1jul12 asked, 10oct11,2dec08 replied
+gone: inaction, have bazaar
+
+package: jdresolve
+language: perl
+doc_category: Internet
+doc_summary: Fast, recursive DNS name resolver for log files
+doc_url: none
+gplv3_status: not-done-since-stale
+activity_status: decommissioned
+last_activity: 20130522
+note: no-release
+gone: vaporware
+
+package: phpgroupware
+mundane_name: phpGroupWare
+copyright_holder: fsf-no-reply
+logo: http://www.phpgroupware.org/templates/new/images/logo.png
+doc_category: Business
+doc_summary: Multi-user groupware suite
+doc_url: none
+download_url: http://sourceforge.net/projects/phpgroupware/files/phpgroupware/
+gplv3_status: in-dev-sources-maybe
+last_release: 0.9.16.017
+last_release_date: 20100707
+activity_status: decommissioned
+last_activity: 20130522
+gone: inaction, hardly ever GNU
+
+package: gmorph
+doc_category: Graphics
+doc_summary: Image morphing program
+doc_url: none
+#download_url-of-xmorph:
http://sourceforge.net/project/showfiles.php?group_id=11808
+gplv3_status: not-done-since-stale
+last_release: 20060817
+last_release_date: 20060817
+activity_status: decommissioned
+last_activity: 20130522
+last_contact: 16feb13 asked, 24jan12 replied to jmd but doing nothing, 4jan11
asked
+note: renamed from xmorph, which continues to be non-GNU.
+gone: inaction, still have xmorph
+
+package: gnuskies
+doc_category: Science
+doc_summary: Stargazing
+doc_url: none
+gplv3_status: not-done-since-no-release
+activity_status: decommissioned
+last_activity: 20130413
+note: no-release
+last_contact: 20mar13 brandon asked, 24jun09 asked, 2011 copyright finally done
+gone: never anything done, have celestia, per maintainer and rms
+
+package: vmslib
+doc_category: Software
+doc_summary: Help porting GNU software to VMS
+doc_url: none
+gplv3_status: not-done-since-nomaint
+activity_status: decommissioned
+last_activity: 20130528
+gone: too stale and have GNV, per maintainer and rms
+
+package: packaging
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: Packaging for GNU
+doc_url: none
+logo: /software/packaging/packaging.png
+gplv3_status: not-done-since-mia
+activity_status: decommissioned
+last_activity: 20130328
+note: no-release
+gone: too stale and have guix and gsrc, per maintainer and rms
+
+package: aetherspace
+doc_category: Games
+doc_summary: Massively multiplayer online (MMO) game
+doc_url: none
+gplv3_status: in-dev-sources (18jun08) # stated on web pages too
+activity_status: decommissioned
+last_activity: 20130324
+note: no-release
+last_contact: 20mar13 brandon asked, 12nov10 asked, 14dec09 replied, "spring
2010"
+gone: nonexistent, per maintainer and rms
+
+package: sourceinstall
+copyright_holder: fsf-no-reply
+doc_category: Sysadmin
+doc_summary: Managing distribution sources as packages
+doc_url: /software/sourceinstall/manual/
+gplv3_status: done-in-2.5rc1 (11may08)
+last_release: 2.5
+last_release_date: 20080719
+activity_status: decommissioned
+last_activity: 20130319
+gone: gsrc + guix do the job, per maintainer and rms
+
+package: guile-gtk
+copyright_holder: fsf-no-reply
+doc_category: Libraries
+doc_summary: Guile bindings to GTK libraries
+doc_url: htmlxref
+gplv3_status: done-as-of-2.1
+last_release: 2.1
+last_release_date: 20071230
+activity_status: decommissioned
+last_activity: 20130310
+gone: replaced by guile-gnome, per maintainer and rms
+
+package: paperclips
+logo: /software/paperclips/Paperclips-GNU-small.jpg
+language: java
+doc_category: Internet
+doc_summary: Java Servlet engine with EEP! template language support
+doc_url: none
+gplv3_status: not-done-since-no-release
+activity_status: decommissioned
+last_activity: 20130213
+note: no-release
+last_contact: 11feb13 asked, 3mar10 asked
+gone: never any release, per maintainer and rms
+
+package: snakecharmer
+doc_category: Graphics
+doc_summary: Image finding with GNU GIFT
+doc_url: none
+gplv3_status: not-done-since-nomaint
+activity_status: decommissioned
+last_activity: 20130209
+note: no-release
+last_contact: see gift
+gone: never any release, no volunteers, raw sources on web page
+
+package: vc-changelog
+doc_category: Version
+doc_summary: ChangeLog management especially with distributed version control
+doc_url: none
+gplv3_status: in-dev-sources
+activity_status: decommissioned
+last_activity: 20130201
+gone: no active developers, never any release, can be under vc-dwim
+
+package: dotgnu
+mundane_name: DotGNU
+doc_category: Software
+doc_summary: Web services and C#
+doc_url: none
+gplv3_status: ok-since-container
+container: for-dotgnu-pnet-etc.
+activity_status: decommissioned
+last_activity: 20121218
+gone: no development
+
+package: dotgnu-forum
+doc_category: Internet
+doc_summary: Web site revision system for DotGNU
+doc_url: none
+gplv3_status: not-done-since-stale
+activity_status: decommissioned
+last_activity: 20121218
+note: copyright.list seems clear
+gone: no development
+
+package: dotgnu-pnet
+copyright_holder: notfsf
+doc_category: Software
+doc_summary: DotGNU Portable.NET support for .NET applications
+doc_url: http://dotgnu.org/pnetlib-doc/index.html
+download_url: ftp://ftp.gnu.org/gnu/dotgnu/
+gplv3_status: not-done-in-0.1.2
+last_release: 0.8
+last_release_date: 20070308
+last_release: libjit-0.1.2
+last_release_date: 20081210
+activity_status: decommissioned
+last_activity: 20121218
+gone: no development
+
+package: gnu-queue
+mundane_name: Queue
+copyright_holder: address@hidden and other authors
+doc_category: Sysadmin
+doc_summary: Allocate jobs to nodes in a cluster
+doc_url: none
+gplv3_status: under-discussion partly at GPLv1, but should be updatable
+last_release: 1.30.1
+last_release_date: 20001101
+activity_status: decommissioned
+last_activity: 20120811
+gone: parallel does the job
+
+package: goldwater
+doc_category: Business
+doc_summary: Middleware server
+doc_url: none
+gplv3_status: not-done-since-dotgnu-nomaint
+activity_status: decommissioned
+last_activity: 20120811
+last_contact: 31jan10 replied
+note: cvs -d:pserver:address@hidden:/sources/dgee co goldwater
+note: download_url: ftp.gnu.org:gnu/dotgnu -- taken offline, though
+gone: 11aug12
+
+package: goodbye
+doc_category: Software
+doc_summary: Kiosk management
+doc_url: none
+gplv3_status: not-done-since-no-release
+activity_status: decommissioned
+last_activity: 20120725
+note: no-release
+gone: per rms on gnu-prog-discuss
+
+package: aeneas
+doc_category: Science
+doc_summary: Design and simulation of submicron semiconductor devices
+doc_url: /software/aeneas/#documentation
+gplv3_status: done-in-1.2 (14jul08)
+last_release: 1.2
+last_release_date: 20080714
+activity_status: decommissioned
+last_activity: 20120513
+gone: subsumed into archimedes
+
+package: sxml
+download_url: http://medialab.di.unipi.it/Project/SXML/resources.html
+doc_category: Web
+doc_summary: Simple XML for defining and implementing markup languages
+doc_url: none
+gplv3_status: not-done-since-stale
+last_release: 0.96
+last_release_date: 20010829
+activity_status: decommissioned
+last_activity: 20120512
+last_contact: 14nov10 stepped down
+gone: replaced by xmlat
+
+package: proto
+copyright_holder: confused
+note: copyright.list says fsf, sources don't
+doc_category: Software
+doc_summary: Find prototypes in header files
+doc_url: none
+download_url: http://www.oualline.com/sw/
+gplv3_status: done-since-public-domain
+activity_status: decommissioned
+last_activity: 20110319
+last_contact: 3mar11 to rms, 14mar10 replied, no plans to work on it
+gone: maintainer not interested, rms ok with decommissioning it
+
+package: libiberty
+copyright_holder: fsf
+gplv3_status: under-discussion
+activity_status: decommissioned
+last_activity: 20101202
+note: released-in-combination
+gone: redundant with gcc
+
+package: gnotary
+mundane_name: GNotary
+doc_category: Business
+doc_summary: Digitally sign electronic health records
+doc_url: none
+gplv3_status: not-done-since-stale
+last_release: 0.1.rc1
+last_release_date: 20050827
+activity_status: decommissioned
+last_activity: 20101128
+last_contact: see gnumed
+gone: never got off the ground, maintainers have no time for it
+
+package: songanizer
+copyright_holder: fsf
+doc_category: Audio
+doc_summary: Organize collections of audio files
+doc_url: none
+gplv3_status: not-done-in-1.0
+last_release: 1.0
+last_release_date: 20070326
+activity_status: decommissioned
+last_activity: 20101122
+last_contact: 19nov10 wrote, 10feb09 wrote
+gone: maintainer resigned, never caught on
+
+package: dictionary
+download_url: ftp://ftp.gnu.org/gnu/gcide
+gplv3_status: not-done-since-moribund
+last_release: 0.46
+last_release_date: 20020101
+activity_status: decommissioned
+last_activity: 20101117
+last_contact: 21jun10 replied
+note: exact last release date not known
+note: renamed to/from gcide
+note: gray will make an interface and spruce it up as part of dico.
+gone: no need to be separate from dico
+
+package: beacon
+gplv3_status: not-done-since-no-release
+activity_status: decommissioned
+last_activity: 20101114
+note: nonesuch
+note: no-release
+last_contact: see aroundme
+gone: like aroundme, but never existed
+
+package: aroundme
+mundane_name: AROUNDMe
+download_url: http://www.barnraiser.org/aroundme/
+doc_category: Web
+gplv3_status: done-in-aroundme_pi_20080116a
+activity_status: decommissioned
+last_activity: 20101114
+last_contact: 200808 wrote author, working
+gone: discovered resignation
+
+package: libopts
+gplv3_status: not-done-in-27.6
+last_release: 27.6
+last_release_date: 20070127
+activity_status: decommissioned
+last_activity: 20101109
+last_contact: 15feb10 wrote
+gone: effectively part of autogen, unused on its own.
+
+package: zebra
+download_url: ftp://ftp.zebra.org/pub/zebra/
+logo: http://www.zebra.org/zebralogo.jpg
+gplv3_status: not-done-since-stale
+last_release: 0.95a
+last_release_date: 20050908
+activity_status: decommissioned
+last_activity: 20101108
+last_contact: 10feb10 wrote
+note: 18dec09 quagga unlikely replacement, some developers anti-gplv3.
+note: see also http://www.zebra.org
+gone: maintainer disappeared for years, quagga fork is active.
+
+package: isofsmk
+gplv3_status: not-done-in-1.11.3
+last_release: 1.13
+last_release_date: 20100108
+activity_status: decommissioned
+last_activity: 20100708
+gone: per author, replaced by xorriso.
+
+package: toutdoux
+doc_url: http://www.gnu.org/software/toutdoux/en/documentation.html
+activity_status: decommissioned
+last_activity: 20090420
+gone: per author.
+
+package: octal
+doc_url: http://www.gnu.org/software/octal/ox_api_main/
+activity_status: decommissioned
+last_activity: 20090409
+gone: per author.
+
+package: abcsh
+activity_status: decommissioned
+gone: per author, #332187.
+
+package: gnufi
+activity_status: decommissioned
+last_activity: 20100213
+gone: 13feb10
+
+package: cons
+activity_status: decommissioned
+last_activity: 20100103
+gone: 3jan10
+
+package: radar
+activity_status: decommissioned
+last_activity: 20081013
+gone: 13oct08
+
+package: recode
+activity_status: decommissioned
+last_activity: 20081013
+gone: 13oct08
+
+package: balsa
+activity_status: decommissioned
+last_activity: 20080304
+gone: 4mar08
+
+package: hydrant
+activity_status: decommissioned
+last_activity: 20080218
+gone: 18feb08
+
+package: cfs-el
+activity_status: decommissioned
+last_activity: 20070831
+gone: 31aug07 or so
+
+package: music
+activity_status: decommissioned
+last_activity: 20070828
+gone: 28aug07
+
+package: mana
+activity_status: decommissioned
+last_activity: 20070817
+gone: 17aug07
+
+package: leonardo
+activity_status: decommissioned
+last_activity: 20070512
+gone: 12may07
+
+package: hegemonie
+activity_status: decommissioned
+last_activity: 20070329
+gone: 29mar07
+
+package: gnusql
+activity_status: decommissioned
+last_activity: 20060316
+gone: 16mar06
+
+package: free
+activity_status: decommissioned
+last_activity: 20021025
+gone: 25oct02
+
+package: dld
+activity_status: decommissioned
+last_activity: 20010711
+gone: 11jul01 or so
+
+package: rx
+activity_status: decommissioned
+gone: long ago
+
+package: doschk
+activity_status: decommissioned
+gone: always nongnu
+
+package: emacs-wiki
+activity_status: decommissioned
+gone: never dubbed
+
+package: adhoc
+activity_status: decommissioned
+gone: never dubbed
+
+package: fileutils
+activity_status: decommissioned
+gone: long ago merged into coreutils
+
+package: textutils
+activity_status: decommissioned
+gone: long ago merged into coreutils
+
+package: sh-utils
+activity_status: decommissioned
+gone: long ago merged into coreutils
+
+package: finger
+activity_status: decommissioned
+gone: long ago merged into inetutils
+
+package: gfe
+activity_status: decommissioned
+gone: long ago
+
+package: gts
+mundane_name: G Transaction Server (?)
+activity_status: decommissioned
+gone: long ago
+note: Todd Lewis
+note: http://archives.postgresql.org/pgsql-hackers/1999-03/msg00200.php
+
+package: winboard
+activity_status: decommissioned
+gone: part of xboard
+
+# End. (Do not remove this line or the blank line before it. Thanks.)
Index: rec/gnupackages2txt.awk
===================================================================
RCS file: rec/gnupackages2txt.awk
diff -N rec/gnupackages2txt.awk
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rec/gnupackages2txt.awk 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,204 @@
+# $Id: gnupackages2txt.awk,v 1.1 2019/05/11 10:44:54 ineiev Exp $
+# gnupackages.rec to old gnupackages.txt
+#
+# Copyright (C) 2018 Mike Gerwitz
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# This script converts the gnupackages.rec recfile into the old txt format
+# that used to be committed directly to the repository. The txt format
+# will eventually be entirely removed; this is intended to allow that
+# transition to proceed incrementally.
+
+BEGIN {
+ FS = OFS = ": "
+}
+
+{
+ if ( ( substr( $1, 1, 1 ) == "+" ) && ( key != "" ) ) {
+ # next line of a multiline record
+ sub( /^[+] */, "", $0 )
+ add_key( key, $0 )
+ next
+ }
+ key = is_key() ? $1 : ""
+ value = $2
+}
+
+# recfile headers (replace the first one with a warning)
+/^%rec:/ {
+ print "# THIS FILE IS NOW GENERATED FROM rec/gnupackages.rec;"
+ print "# DO NOT MODIFY DIRECTLY!"
+}
+/^%/ { next }
+
+is_key_assign() {
+ add_key( key, value )
+}
+
+# A number of keys are handled differently in the recfile
+key == "package" { package = value }
+key == "blurb_id" { next }
+key == "activity_status" { next }
+key == "last_activity" { next }
+key == "container" { next }
+key == "last_contact" { next } # output at end (reorder)
+key == "next_contact" { next } # output at end (reorder)
+key == "note" { next } # output at end (reorder)
+key ~ /^last_release/ { next }
+
+# End of package block
+eob() {
+ print "activity-status", mkactivity()
+ printkey( "last_contact" )
+ printkey( "next_contact" )
+ printnotes()
+
+ package = ""
+ delete pkginfo
+ delete pkginfon
+}
+
+{
+ # recfiles use snake case and gnupackages.txt uses dashes
+ gsub( /_/, "-", $1 )
+ print
+}
+
+
+# Key abstractions and predicates
+function is_key() { return $1 ~ /^[a-z_]+$/ }
+function is_key_assign() { return is_key() && value }
+function eob() { return $0 ~ /^$/ && package }
+function is_symnote() { return get_key( "note" ) ~ /^[a-z-]+$/ }
+
+
+# Print a "key: value" line for each value of key K
+#
+# K may have multiple values if `add_key' was called multiple times for
+# the same K.
+function printkey( k, n, i )
+{
+ n = keylen( k )
+
+ for ( i = 0; i < n; i++ ) {
+ print gensub( /_/, "-", "g", k ), get_key( k, i )
+ }
+}
+
+# Print note unless it is a symbolic note
+#
+# Symbolic notes have special meaning and are concatenated with the
+# activity status in the output. Note that `is_symnote` only checks
+# the first key value, and so this may not work correctly given multiple
+# notes; it just hasn't been a problem yet, as of this time of writing.
+function printnotes()
+{
+ if ( is_symnote() ) {
+ return
+ }
+
+ printkey( "note" )
+}
+
+
+# Generate activity status line
+function mkactivity()
+{
+ return mkstatus() mkrelease()
+}
+
+
+# Generate status portion of activity status
+#
+# The status may be suffixed by a date and a symbolic note.
+function mkstatus( status, last_act )
+{
+ status = get_key( "activity_status" )
+ last_act = get_key( "last_activity" )
+
+ switch ( status )
+ {
+ case "newmaint":
+ case "newcomaint":
+ case "newpkg":
+ case "nomaint":
+ status = status "/" last_act
+ break;
+
+ case "container":
+ status = status " " get_key( "container" )
+ break;
+ }
+
+ # notes that look like symbols were taken from the
+ # old activity-status, so re-add them
+ if ( is_symnote() ) {
+ status = status " " get_key( "note" )
+ }
+
+ return status;
+}
+
+
+# Generate release portion of activity status
+#
+# If there are multiple release versions, then all but the first will
+# have a date suffixed with the form "%s/%d".
+function mkrelease( last_date, last_ver, release, i )
+{
+ i = keylen( "last_release" ) - 1
+
+ if ( i == -1 ) {
+ return ""
+ }
+
+ # begin string with latest version number (last index)
+ release = sprintf( " %d (%s",
+ get_key( "last_release_date", i ),
+ get_key( "last_release", i ) )
+
+ # all other releases, if any
+ while ( i-- > 0 ) {
+ release = sprintf( "%s, %s/%d",
+ release,
+ get_key( "last_release", i ),
+ get_key( "last_release_date", i ) )
+ }
+
+ return release ")"
+}
+
+
+# Append a value V for key K
+#
+# If K already has a value, another will be added; values are
+# never replaced by this function.
+function add_key( k, v, i )
+{
+ i = pkginfon[k]++;
+ pkginfo[k][i] = v
+}
+
+# Get value of key K at index I (default 0)
+function get_key( k, i )
+{
+ return pkginfo[k][ or( i, 0 ) ]
+}
+
+# Get number of values for key K
+function keylen( k )
+{
+ return pkginfon[k]
+}
Index: rec/pkgblurbs2txt.awk
===================================================================
RCS file: rec/pkgblurbs2txt.awk
diff -N rec/pkgblurbs2txt.awk
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rec/pkgblurbs2txt.awk 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,43 @@
+# $Id: pkgblurbs2txt.awk,v 1.1 2019/05/11 10:44:54 ineiev Exp $
+# pkgblurbs.rec to old pkgblurbs.txt
+#
+# Copyright (C) 2018 Mike Gerwitz
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# This script converts the pkgblurbs.rec recfile into the old txt format
+# that used to be committed directly to the repository.
+
+BEGIN {
+ print "# Public domain."
+ print "#"
+ print "# This source code for this file is maintained in GNU womb:"
+ print "# http://cvs.savannah.gnu.org/viewvc/gnumaint/?root=womb"
+ print "#"
+ print "# This file specifies a short blurb for each GNU package. These are"
+ print "# used by www.gnu.org, GSRC, and Guix."
+ print "#"
+ print "# THIS FILE IS NOW GENERATED FROM rec/pkgblurbs.rec;"
+ print "# DO NOT MODIFY DIRECTLY!"
+ print ""
+}
+
+# essentially just omits ^id: and %rec headers
+/^package:/,/^$/ { print }
+
+END {
+ print "# Local Variables:"
+ print "# compile-command: \"make pkgblurbs.txt\""
+ print "# End:"
+}
Index: rec/gnupackages.rec
===================================================================
RCS file: rec/gnupackages.rec
diff -N rec/gnupackages.rec
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rec/gnupackages.rec 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,5036 @@
+# $Id: gnupackages.rec,v 1.1 2019/05/11 10:44:54 ineiev Exp $
+# Public domain.
+#
+# This file is maintained in the CVS repository of GNU womb,
+# http://cvs.savannah.gnu.org/viewvc/gnumaint/?root=womb
+#
+# This file records information about GNU packages on a per-package
+# basis, *not* including the maintainers (that's in
+# /gd/gnuorg/maintainers). There is nothing private in this file.
+#
+# Since some things are unique to the package and other things are
+# unique to the maintainer(s), it seems cleanest to have two files.
+#
+# This file is in GNU Recutils' format, meaning it is easiest to query
+# the content via that software. This file contains one record type,
+# Package, and uses the package name as the record key.
+#
+# Info/constraints about the fields:
+# - The package name should always be all-lowercase.
+#
+# - When mundane_name is not specified, default is to capitalize the first
+# letter of the package identifier.
+#
+# - Default for download_url is http://ftp.gnu.org/gnu/PKGNAME.
+#
+# - A doc_url value of "none" means no specific documentation page (home
+# page is used).
+# "htmlxref" means to extract a list of additional manuals from the
+# Texinfo htmlxref.cnf file.
+# Otherwise, it can be a url, which can be used together with htmlxref,
+# but multiple explicit urls or other combinations are not supported.
+#
+# - doc_category values are in doc-categories.txt (following FSD).
+# (doc stuff is used to generate gnu.org/manual.)
+#
+# - each package should always have an activity_status
+#
+# - allowed activity_status values:
+# ok;
+# newmaint,newcomaint (newly-appointed);
+# newpkg (newly-dubbed);
+# nomaint (no maintainer);
+# container (doesn't get released);
+# subpkg (released as part of another package);
+# stable (no current release, but none needed);
+# stale (needs release);
+# moribund (needs release, but not likely to ever get one).
+# alpha (alpha-only releases so far)
+#
+# - most activity statuses must have an associated date of last
+# activity
+#
+# - as a consistency check, the last activity should always be at
+# least the last release date
+#
+# The home page is not a field because that *always* is (should be)
+# /software/PACKAGE, even if that does nothing but redirect. Any other
+# method leads to redundant (hence inevitably inconsistent) information.
+#
+# Finally, this file as a whole is more or less sorted by package
+# identifier, for human convenience. However, software reading this
+# file should accept any order of packages or fields.
+
+# See the file pkg-descriptor.rec in this directory for the full
+# definition of the Package record type.
+
+%rec: Package rec/package-descriptor.rec
+%doc: Current GNU packages
+
+
+package: 3dldf
+mundane_name: 3DLDF
+copyright_holder: notfsf
+doc_category: Graphics
+doc_summary: 3D drawing with MetaPost output
+doc_url: /software/3dldf/manual/
+blurb_id: 3dldf_blurb
+logo: /software/3dldf/graphics/dhnlogo.png
+gplv3_status: in-dev-sources (gnumaint-reply 29 Aug 2007 19:26:27)
+last_release: 2.0.3
+last_release_date: 20131213
+activity_status: stale
+last_activity: 20131213
+
+package: 8sync
+copyright_holder: notfsf
+doc_category: Libraries
+doc_summary: An asynchronous programming library for Guile
+doc_url: /software/8sync/manual/
+blurb_id: 8sync_blurb
+gplv3_status: done
+last_release: 0.4.1
+last_release_date: 20170108
+activity_status: ok
+last_activity: 20170108
+
+package: a2ps
+mundane_name: a2ps
+copyright_holder: notfsf
+doc_category: Printing
+doc_summary: Any file to PostScript, including pretty-printing
+doc_url: none
+blurb_id: a2ps_blurb
+gplv3_status: done-in-4.14
+last_release: 4.14
+last_release_date: 20071228
+activity_status: newcomaint
+last_activity: 20170421
+
+package: acct
+copyright_holder: fsf-ok-#786467
+doc_category: Sysadmin
+doc_summary: Standard login and process accounting utilities
+doc_url: /software/acct/manual/accounting.html
+blurb_id: acct_blurb
+gplv3_status: done-as-of-6.5
+last_release: 6.6.2
+last_release_date: 20141107
+activity_status: ok
+last_activity: 20141107
+
+package: acm
+doc_category: Games
+doc_summary: Multiplayer aerial combat simulation
+doc_url: none
+blurb_id: acm_blurb
+download_url: http://www.websimulations.com/download.htm
+gplv3_status: done-in-5.1
+last_release: 5.1
+last_release_date: 20101205
+last_contact: 16nov10 replied, soon
+activity_status: stale
+last_activity: 20101205
+
+package: adns
+doc_category: Libraries
+doc_summary: Asynchronous DNS client library and utilities
+doc_url: none
+blurb_id: adns_blurb
+download_url: http://www.chiark.greenend.org.uk/~ian/adns/ftp/
+gplv3_status: done-in-1.5.0
+last_release: 1.5.1
+last_release_date: 20160812
+activity_status: ok
+last_activity: 20160812
+
+package: alive
+doc_category: Internet
+doc_summary: Autologin and keep-alive daemon
+doc_url: /software/alive/manual/
+blurb_id: alive_blurb
+download_url: http://download.savannah.gnu.org/releases/alive/
+gplv3_status: not-done-in-1.4.0-nomaint
+last_release: 2.0.2
+last_release_date: 20120908
+activity_status: stale
+last_activity: 20120908
+
+package: anubis
+doc_category: Email
+doc_summary: SMTP message submission daemon
+doc_url: /software/anubis/manual/
+blurb_id: anubis_blurb
+gplv3_status: done-in-4.1.1
+last_release: 4.2
+last_release_date: 20140523
+activity_status: ok
+last_activity: 20140523
+
+package: apl
+mundane_name: APL
+doc_category: Software
+doc_summary: APL interpreter
+doc_url: none
+blurb_id: apl_blurb
+gplv3_status: done-in-1.0
+last_release: 1.6
+last_release_date: 20160828
+activity_status: ok
+last_activity: 20160828
+
+package: archimedes
+doc_category: Science
+doc_summary: Semiconductor device simulator
+doc_url: /software/archimedes/manual/
+blurb_id: archimedes_blurb
+gplv3_status: done-in-0.8.0 (14jul08)
+last_release: 2.0.1
+last_release_date: 20130429
+activity_status: stale
+last_activity: 20130429
+
+package: aris
+doc_category: Mathematics
+doc_summary: Natural deduction first-order logic interface
+doc_url: none
+blurb_id: aris_blurb
+gplv3_status: ok
+last_release: 2.2
+last_release_date: 20140306
+activity_status: ok
+last_activity: 20140306
+
+package: artanis
+language: guile
+doc_category: Internet
+doc_summary: Web application framework written in Guile
+doc_url: htmlxref
+blurb_id: artanis_blurb
+gplv3_status: ok
+activity_status: newpkg
+last_activity: 20150118
+
+package: aspell
+doc_category: Text
+doc_summary: Spell checker
+doc_url: htmlxref
+blurb_id: aspell_blurb
+gplv3_status: under-discussion-library (gnumaint-reply 20 Aug 2007 20:31:07)
+last_release: 0.60.6.1
+last_release_date: 20110604
+activity_status: stale
+last_activity: 20110604
+
+package: auctex
+copyright_holder: fsf-maybe-ok-remaining-few-in-process-#786529
+logo: /software/auctex/img/auctex-logo.png
+mundane_name: AUCTeX
+doc_category: Text
+doc_summary: Emacs environment for editing (all flavors of) TeX files
+doc_url: /software/auctex/manual/
+blurb_id: auctex_blurb
+gplv3_status: done-in-11.85
+last_release: 11.90
+last_release_date: 20170110
+activity_status: ok
+last_activity: 20170110
+
+package: autoconf
+copyright_holder: fsf-ok-#786485
+doc_category: Software
+doc_summary: Create source code configuration scripts
+doc_url: /software/autoconf/manual/
+blurb_id: autoconf_blurb
+gplv3_status: done-in-2.65-with-exception-#349136
+last_release: 2.69
+last_release_date: 20120424
+activity_status: stale
+last_activity: 20120424
+
+package: autoconf-archive
+language: autoconf
+doc_category: Software
+doc_summary: Collection of freely reusable Autoconf macros
+doc_url: none
+blurb_id: autoconf_archive_blurb
+gplv3_status: not-applicable
+last_release: 2016.09.16
+last_release_date: 20160916
+activity_status: ok
+last_activity: 20160916
+
+package: autogen
+copyright_holder: notfsf
+logo: /software/autogen/pix/autogen_back.png
+doc_category: Software
+doc_summary: Automated program generator
+doc_url: /software/autogen/manual/
+blurb_id: autogen_blurb
+gplv3_status: done-in-5.9.5
+last_release: 5.18.10
+last_release_date: 20160524
+activity_status: ok
+last_activity: 20160524
+
+package: automake
+copyright_holder: fsf-no-reply
+language: perl
+doc_category: Software
+doc_summary: Making GNU standards-compliant Makefiles
+doc_url: /software/automake/manual/
+blurb_id: automake_blurb
+gplv3_status: done-with-exception-#349136
+last_release: 1.15
+last_release_date: 20150105
+activity_status: ok
+last_activity: 20150105
+
+package: avl
+copyright_holder: fsf-ok-#786498
+doc_category: Libraries
+doc_summary: Binary and balanced search trees
+doc_url: htmlxref
+blurb_id: avl_blurb
+gplv3_status: done-in-2.0.3
+last_release: 2.0.3
+last_release_date: 20070825
+activity_status: stable
+last_activity: 20070825
+
+package: ballandpaddle
+mundane_name: Ball and Paddle
+doc_category: Games
+doc_summary: Ball and paddle game extensible with Guile
+doc_url: none
+blurb_id: ballandpaddle_blurb
+gplv3_status: done-in-0.7.1
+last_release: 0.8.1
+last_release_date: 20090715
+last_contact: 11feb13 replied soon
+activity_status: stale
+last_activity: 20090715
+
+package: barcode
+doc_category: Business
+doc_summary: Convert text strings to printed bars in various standards
+doc_url: none
+blurb_id: barcode_blurb
+gplv3_status: under-discussion (3nov09)
+last_release: 0.99
+last_release_date: 20130329
+activity_status: stale
+last_activity: 20130329
+
+package: bash
+copyright_holder: fsf-ok-with-examples-#790945
+doc_category: Software
+doc_summary: The GNU Bourne-Again SHell
+doc_url: /software/bash/manual/
+blurb_id: bash_blurb
+gplv3_status: done-in-4.0
+last_release: 4.4
+last_release_date: 20160917
+activity_status: ok
+last_activity: 20160917
+
+package: bayonne
+copyright_holder: notfsf
+doc_category: Telephony
+doc_summary: Telephony server
+doc_url: /software/bayonne/bayonne.html#documentation
+blurb_id: bayonne_blurb
+gplv3_status: next-release-early-2009 (licensing #373278)
+last_release: bayonne-2.99+3.0apionly2
+last_release_date: 20111218
+activity_status: stale
+last_activity: 20111218
+
+package: bazaar
+search_alias: bzr
+savannah: none
+copyright_holder: notfsf
+logo: //planet.bazaar.canonical.com/images/logo.png
+language: c,xpython
+doc_category: Version
+doc_summary: Version control system supporting both distributed and
centralized workflows
+doc_url: http://doc.bazaar.canonical.com/en/
+blurb_id: bazaar_blurb
+download_url: http://bazaar-vcs.org/Download
+gplv3_status: not-done-in-2.02/14dec09-asked-rms, doc-license-is-gpl-too
https://bugs.edge.launchpad.net/bzr/+bug/433734
+last_release: 2.7.0
+last_release_date: 20160131
+note: the bazaar project on savannah is not this; not on savannah at all
+activity_status: ok
+last_activity: 20160131
+
+package: bc
+copyright_holder: fsf-no-reply
+doc_category: Mathematics
+doc_summary: Arbitrary precision numeric processing language
+doc_url: /software/bc/manual/bc.html
+blurb_id: bc_blurb
+gplv3_status: next-release
+last_release: 1.06
+last_release_date: 20001115
+last_contact: 7may12 ken replied, 6may12 phil replied, 22may08 pizzini replied
+activity_status: stale
+last_activity: 20001115
+
+package: bfd
+mundane_name: BFD
+copyright_holder: fsf-ok-#787030
+doc_category: Libraries
+doc_summary: Binary File Descriptor library
+doc_url: htmlxref
+blurb_id: bfd_blurb
+gplv3_status: unknown
+container: is-binutils
+activity_status: container
+
+package: binutils
+copyright_holder: fsf-ok-#787031
+doc_category: Software
+doc_summary: Binary utilities: bfd gas gprof ld
+doc_url: /software/binutils/manual/
+blurb_id: binutils_blurb
+doc_url: htmlxref
+gplv3_status: done-in-binutils-2.18
+last_release: 2.27
+last_release_date: 20160825
+activity_status: ok
+last_activity: 20160825
+
+package: bison
+copyright_holder: fsf-ok-#786486,#786486
+doc_category: Software
+doc_summary: Parser generator
+doc_url: /software/bison/manual/
+blurb_id: bison_blurb
+doc_shop: The Bison Manual
+doc_shop: http://shop.fsf.org/product/bison-manual/
+gplv3_status: done-in-2.4-without-exception-#502111
+last_release: 3.0.4
+last_release_date: 20150123
+activity_status: ok
+last_activity: 20150123
+
+package: bool
+copyright_holder: fsf-no-reply
+doc_category: Text
+doc_summary: Finding text and HTML files that match boolean expressions
+doc_url: none
+blurb_id: bool_blurb
+gplv3_status: done-in-bool-0.2.2
+last_release: 0.2.2
+last_release_date: 20150511
+last_contact: 5sep08,17dec09 asked
+activity_status: ok
+last_activity: 20150511
+
+package: bpel2owfn
+mundane_name: BPEL2oWFN
+logo: /software/bpel2owfn/ressource/bpel2owfn.png
+doc_category: Business
+doc_summary: Translating web service in BPEL to Open Workflow Nets
+doc_url: htmlxref
+blurb_id: bpel2owfn_blurb
+download_url: https://github.com/nlohmann/bpel2owfn
+gplv3_status: done-in-2.0.4
+last_release: 2.4
+last_release_date: 20100124
+last_contact: 9apr10 replied
+activity_status: stable
+last_activity: 20100124
+
+package: c-graph
+logo: /software/c-graph/images/c-graph.png
+doc_category: Mathematics
+doc_summary: Visualizing and demonstrating convolution
+doc_url: /software/c-graph/manual/
+blurb_id: c_graph_blurb
+gplv3_status: done
+last_release: 2.0
+last_release_date: 20120426
+activity_status: stale
+last_activity: 20120426
+
+package: ccaudio
+mundane_name: ccAudio
+doc_category: Telephony
+doc_summary: Standalone C++ class framework for manipulating audio data
+doc_url: /software/ccaudio/ccaudio.html#documentation
+blurb_id: ccaudio_blurb
+gplv3_status: done-in-1.0.0
+last_release: ccaudio2-2.2.0
+last_release_date: 20151213
+activity_status: ok
+last_activity: 20151213
+
+package: ccd2cue
+doc_category: Audio
+doc_summary: CCD to CUE sheet conversion
+doc_url: /software/ccd2cue/manual/
+blurb_id: ccd2cue_blurb
+gplv3_status: done
+last_release: 0.5
+last_release_date: 20150313
+activity_status: ok
+last_activity: 20150313
+
+package: ccide
+doc_category: Software
+doc_summary: Decision table code generator
+doc_url: none
+blurb_id: ccide_blurb
+gplv3_status: done
+download_url: http://sourceforge.net/projects/ccide/files/
+last_release: 0.6.6
+last_release_date: 20120905
+activity_status: stale
+last_activity: 20120905
+
+package: ccrtp
+mundane_name: ccRTP
+copyright_holder: notfsf
+doc_category: Telephony
+doc_summary: Implementation of RTP (real-time transport protocol)
+doc_url: /software/ccrtp/ccrtp.html#documentation
+blurb_id: ccrtp_blurb
+gplv3_status: not-done-in-1.6.2, gplv3 done in libzrtpcpp-1.1.0
+last_release: libzrtpcpp-2.3.4
+last_release_date: 20130701
+last_release: 2.1.2
+last_release_date: 20150329
+activity_status: ok
+last_activity: 20140414
+
+package: ccscript
+mundane_name: ccScript
+doc_category: Telephony
+doc_summary: C++ class framework for virtual machine execution
+doc_url: /software/ccscript/ccscript.html#documentation
+blurb_id: ccscript_blurb
+gplv3_status: done-in-4.0.0
+last_release: ccscript3-1.1.7
+last_release_date: 20090214
+last_release: 5.1.0
+last_release_date: 20151213
+activity_status: ok
+last_activity: 20151213
+
+package: cfengine
+copyright_holder: fsf-no-reply
+logo: //cfengine.com/wp-content/uploads/2014/06/logo_with_box.png
+doc_category: Sysadmin
+doc_summary: Configuration engine for system and network administration
+doc_url: /software/cfengine/docs/cfdocs.html
+blurb_id: cfengine_blurb
+download_url: http://www.cfengine.org/pages/download
+gplv3_status: done-in-v3-but-no-longer-gnu
+last_release: 2.2.8
+last_release_date: 20080805
+last_contact: feb10 gscrivano prepared patches for rms
+activity_status: stale
+last_activity: 20080805
+
+package: cflow
+doc_category: Software
+doc_summary: Create a graph of control flow within a program
+doc_url: /software/cflow/manual/
+blurb_id: cflow_blurb
+gplv3_status: done-in-1.3
+last_release: 1.5
+last_release_date: 20160517
+activity_status: ok
+last_activity: 20160517
+
+package: cgicc
+copyright_holder: notfsf
+doc_category: Libraries
+doc_summary: C++ class library for writing CGI applications
+doc_url: none
+blurb_id: cgicc_blurb
+gplv3_status: done-in-3.2.5
+logo: /software/cgicc/images/cgicc.png
+last_release: 3.2.16
+last_release_date: 20141207
+activity_status: ok
+last_activity: 20141207
+
+package: chess
+copyright_holder: fsf-ok-#786709-also-#786476,794064,795361
+doc_category: Games
+doc_summary: Full chess implementation
+doc_url: /software/chess/manual/
+blurb_id: chess_blurb
+gplv3_status: done-in-6.0.0
+last_release: 6.2.4
+last_release_date: 20161029
+activity_status: ok
+last_activity: 20161029
+
+package: cim
+doc_category: Software
+doc_summary: Simula compiler
+doc_url: none
+blurb_id: cim_blurb
+gplv3_status: not-done-in-3.30
+last_release: 5.1
+last_release_date: 20140518
+activity_status: ok
+last_activity: 20140518
+
+package: classpath
+copyright_holder: fsf-no-reply
+#logowithtoomuchquoting:
//developer.classpath.org/mediation/ClasspathBanners?action=AttachFile&do=get&target=GNU_Classpath_badge-180x180.png
+doc_category: Libraries
+doc_summary: Core class libraries for Java
+doc_url: /software/classpath/docs/
+blurb_id: classpath_blurb
+gplv3_status: needs-exception-not-done-in-0.98-#530926
+last_release: inetlib-1.1.2
+last_release_date: 20100325
+last_release: 0.99
+last_release_date: 20120316
+activity_status: stale
+last_activity: 20120316
+
+package: classpathx
+copyright_holder: fsf-ok-#786644
+logo: /software/classpathx/classpathx-logo.jpg
+language: java
+doc_category: Libraries
+doc_summary: Classpath extensions: javax.* libraries
+doc_url: none
+blurb_id: classpathx_blurb
+gplv3_status: not-done-worry-about-classpath-first
+last_release: activation-1.1.2
+last_release_date: 20131112
+note: jaxp module is not copyright fsf?
+note: mostly merged into classpath
+activity_status: stale
+last_activity: 20131112
+
+package: clisp
+mundane_name: CLISP
+logo: /software/clisp/clisp.png
+doc_category: Software
+doc_summary: A Common Lisp implementation
+doc_url: /software/clisp/impnotes/clisp.html
+blurb_id: clisp_blurb
+gplv3_status: not-done-gplv2-only-in-2.4.5-bruno:24oct07-asked-rms:oct09
+last_release: 2.49
+last_release_date: 20100707
+last_contact: #773646 4oct12 asked bruno, 3jan11-rms-talking,
+activity_status: stale
+last_activity: 20100707
+
+package: combine
+doc_category: Text
+doc_summary: Extensible file matching and filtering
+doc_url: /software/combine/manual/
+blurb_id: combine_blurb
+gplv3_status: in-dev-sources (gnumaint-reply 20 Aug 2007 20:11:22)
+last_release: 0.4.0
+last_release_date: 20130729
+activity_status: stale
+last_activity: 20130729
+
+package: commoncpp
+mundane_name: [u]Common C++
+doc_category: Libraries
+doc_summary: [u]Common C++ framework for threaded applications
+doc_url: /software/commoncpp/commoncpp.html#documentation
+blurb_id: commoncpp_blurb
+gplv3_status: not-done-commoncpp2-1.6.3.tar.gz, done-ucommon-1.9.1
+last_release: commoncpp2-1.8.0
+last_release_date: 20100224
+last_release: ucommon-7.0.0
+last_release_date: 20151213
+activity_status: ok
+last_activity: 20151213
+
+package: complexity
+doc_category: Software
+doc_summary: Analyze complexity of C functions
+doc_url: /software/complexity/manual/
+blurb_id: complexity_blurb
+gplv3_status: done
+last_release: 1.10
+last_release_date: 20160309
+activity_status: ok
+last_activity: 20160309
+
+package: config
+copyright_holder: fsf-ok-#786463
+doc_category: Software
+doc_summary: Ubiquitious config.guess and config.sub scripts
+doc_url: none
+blurb_id: config_blurb
+gplv3_status: done-with-exception-#341945 (gnumaint-reply 21 Aug 2007 18:39:06)
+note: released-through-vc
+activity_status: ok
+
+package: consensus
+doc_category: Internet
+doc_summary: Coordinate free software social networking projects
+doc_url: none
+blurb_id: consensus_blurb
+gplv3_status: not-done-since-no-release
+activity_status: newpkg
+last_activity: 20121227
+
+package: coreutils
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: Core GNU utilities (file, text, shell)
+doc_url: /software/coreutils/manual/
+blurb_id: coreutils_blurb
+gplv3_status: done-in-7.1
+last_release: 8.26
+last_release_date: 20161130
+activity_status: ok
+last_activity: 20161130
+
+package: cpio
+copyright_holder: fsf-ok-#793767
+doc_category: Archiving
+doc_summary: Manage cpio and tar file archives
+doc_url: /software/cpio/manual/
+blurb_id: cpio_blurb
+gplv3_status: done-in-2.9
+last_release: 2.12
+last_release_date: 20150912
+activity_status: ok
+last_activity: 20150912
+
+package: cppi
+copyright_holder: fsf-no-reply
+gplv3_status: done-in-1.14
+doc_category: Software
+doc_summary: Indent C preprocessor directives to reflect nesting and more
+doc_url: /software/cppi/manual/
+blurb_id: cppi_blurb
+last_release: 1.17
+last_release_date: 20130316
+activity_status: stale
+last_activity: 20130316
+
+package: cssc
+mundane_name: CSSC
+copyright_holder: fsf-ok-with-sccs-bsd-#786553
+doc_category: Version
+doc_summary: File-based version control like SCCS
+doc_url: htmlxref
+blurb_id: cssc_blurb
+gplv3_status: done-in-1.1.0-plus-bsd
+last_release: CSSC-1.4.0
+last_release_date: 20140711
+activity_status: ok
+last_activity: 20140711
+
+package: cursynth
+doc_category: Music
+doc_summary: Polyphonic and MIDI subtractive music synthesizer using curses
+doc_url: none
+blurb_id: cursynth_blurb
+gplv3_status: done-initially
+last_release: 1.5
+last_release_date: 20140413
+activity_status: ok
+last_activity: 20140413
+
+package: dap
+copyright_holder: fsf-no-reply
+language: c
+doc_category: Mathematics
+doc_summary: Statistics and graphics package
+doc_url: none
+blurb_id: dap_blurb
+gplv3_status: not-done-maintainer-wants-volunteer (4 Sep 2007 22:37:48, 28 Jan
2008 20:23:40)
+last_release: 3.10
+last_release_date: 20140416
+activity_status: ok
+last_activity: 20140416
+
+package: datamash
+copyright_holder: notfsf
+doc_category: Mathematics
+doc_summary: Scriptable statistics and data calculation
+doc_url: none
+blurb_id: datamash_blurb
+last_release: 1.1.1
+last_release_date: 20170120
+activity_status: ok
+last_activity: 20170120
+
+package: dc
+copyright_holder: see-bc
+doc_category: Mathematics
+doc_summary: Arbitrary precision numeric processing with reverse-polish
notation
+doc_url: /software/bc/manual/dc-1.05/
+blurb_id: dc_blurb
+gplv3_status: see-bc
+note: merged into the bc package (dc.README)
+last_contact: see bc
+activity_status: subpkg
+
+package: ddd
+copyright_holder: fsf-no-reply
+mundane_name: DDD
+copyright_holder: notfsf
+doc_category: Software
+doc_summary: Graphical front-end for GDB and other debuggers
+doc_url: htmlxref
+blurb_id: ddd_blurb
+logo: /graphics/dddlogo.jpg
+gplv3_status: done-as-of-3.3.12
+last_release: 3.3.12
+last_release_date: 20090211
+activity_status: newmaint
+last_activity: 20130118
+
+package: ddrescue
+mundane_name: ddrescue
+doc_category: Sysadmin
+doc_summary: Data recovery utility
+doc_url: htmlxref
+blurb_id: ddrescue_blurb
+gplv3_status: done-in-1.5
+last_release: 1.21
+last_release_date: 20160321
+activity_status: ok
+last_activity: 20160321
+
+package: dejagnu
+mundane_name: DejaGnu
+copyright_holder: fsf-ok-#786474,#786759
+logo: /software/dejagnu/images/logo.png
+doc_category: Software
+doc_summary: GNU software testing framework
+doc_url: /software/dejagnu/manual/
+blurb_id: dejagnu_blurb
+doc_source_format: docbook
+gplv3_status: done?-in-1.5
+last_release: 1.6
+last_release_date: 20160416
+activity_status: ok
+last_activity: 20160416
+
+package: denemo
+doc_category: Music
+doc_summary: Graphical music notation, front-end to GNU Lilypond
+doc_url: none
+blurb_id: denemo_blurb
+logo: //denemo.sourceforge.net/images/logo1.png
+gplv3_status: not-done-as-of-0.8.16-old-authors?
+last_release: 2.0.14
+last_release_date: 20161130
+activity_status: ok
+last_activity: 20161130
+
+package: dia
+logo: //static.gnome.org/img/dialogo.jpg
+doc_category: Graphics
+doc_summary: Diagram creation for GNOME
+doc_url: http://wiki.gnome.org/Apps/Dia/Documentation
+blurb_id: dia_blurb
+download_url: http://ftp.gnome.org/pub/gnome/sources/dia/
+gplv3_status: not-done-in-0.97-awaiting-gnome-in-general-i-suppose
+last_release: 0.97.2
+last_release_date: 20111218
+note: not clear if this is really a GNU package
+activity_status: stale
+last_activity: 20111218
+
+package: dico
+doc_category: Dictionaries
+doc_summary: Implementation of DICT server (RFC 2229)
+doc_url: http://dico.man.gnu.org.ua/
+blurb_id: dico_blurb
+gplv3_status: done-as-of-2.0
+last_release: 2.4
+last_release_date: 20161121
+activity_status: ok
+last_activity: 20161121
+
+package: diction
+doc_category: Text
+doc_summary: Identifies wordy and commonly misused phrases
+doc_url: none
+blurb_id: diction_blurb
+gplv3_status: done-in-1.11
+last_release: 1.11
+last_release_date: 20070917
+activity_status: stable
+last_activity: 20070917
+
+package: diffutils
+copyright_holder: fsf-ok-#786489
+doc_category: Text
+doc_summary: Comparing and merging files
+doc_url: htmlxref
+blurb_id: diffutils_blurb
+gplv3_status: done-in-2.9
+last_release: 3.5
+last_release_date: 20160821
+activity_status: ok
+last_activity: 20160821
+
+package: dionysus
+doc_category: Science
+doc_summary: Local search for universal constants and scientific values
+doc_url: none
+blurb_id: dionysus_blurb
+gplv3_status: done-as-of-1.1.0
+last_release: 1.3.0
+last_release_date: 20100829
+activity_status: stale
+last_activity: 20100829
+
+package: direvent
+doc_category: Sysadmin
+doc_summary: Daemon to monitor directories for events such as file removal
+doc_url: none
+blurb_id: direvent_blurb
+gplv3_status: done
+last_release: 5.1
+last_release_date: 20160706
+activity_status: ok
+last_activity: 20160706
+
+package: djgpp
+mundane_name: DJGPP
+copyright_holder: notfsf (DJ Delorie and others)
+doc_category: Software
+doc_summary: Development system and GNU utilities for DOS on x86 hardware
+doc_url: none
+blurb_id: djgpp_blurb
+gplv3_status: needs-exception-#342079 (gnumaint-reply 20 Aug 2007 21:43:02)
+download_url: http://www.delorie.com/pub/djgpp/current/v2gnu/?M=A
+last_release: 2.03
+last_release_date: 20130205
+note: not clear how to download "djgpp" as a whole.
+last_contact: eliz, in bug-gnulib 26 Jan 2011 20:56:24, says no more releases
+activity_status: stable
+last_activity: 20130205
+
+package: dominion
+doc_category: Games
+doc_summary: Multi-player world simulation and role-playing game
+doc_url: none
+blurb_id: dominion_blurb
+gplv3_status: not-done-since-stale
+last_release: 2.8.2
+last_release_date: 20050217
+last_contact: 8jan10 asked
+activity_status: stale
+last_activity: 20050217
+
+package: dr-geo
+mundane_name: Dr. Geo
+doc_category: Education
+doc_summary: Interactive geometry software
+doc_url: https://www.gnu.org/software/dr-geo/doc/
+blurb_id: dr_geo_blurb
+download_url:
http://sourceforge.net/project/showfiles.php?group_id=13320&package_id=91900
+gplv3_status: not-done-since-nomaint
+last_release: 16.10a
+last_release_date: 20160911
+activity_status: ok
+last_activity: 20160911
+
+package: easejs
+copyright_holder: fsf-ok
+doc_category: Web
+doc_summary: Classical object-oriented framework for JavaScript
+doc_url: http://www.gnu.org/software/easejs/manual.html
+blurb_id: easejs_blurb
+gplv3_status: done-in-0.1.0
+last_release: 0.2.8
+last_release_date: 20160715
+activity_status: ok
+last_activity: 20160715
+
+package: ed
+copyright_holder: notfsf-#786696
+doc_category: Text
+doc_summary: Line-oriented text editor
+doc_url: htmlxref
+blurb_id: ed_blurb
+gplv3_status: done-in-1.0
+last_release: 1.14.1
+last_release_date: 20170112
+activity_status: ok
+last_activity: 20170112
+
+package: edma
+mundane_name: EDMA
+doc_category: Software
+doc_summary: Object-oriented component-based development environment
+doc_url: none
+blurb_id: edma_blurb
+gplv3_status: in-dev-sources
+last_release: 0.18.6, gecb-0.8.4, gidfwizard-0.6.4
+last_release_date: 20130314
+activity_status: stale
+last_activity: 20130314
+
+package: electric
+copyright_holder: fsf-ok-with-dependencies-#786479
+logo: /software/electric/electric.jpg
+doc_category: Science
+doc_url: http://www.staticfreesoft.com/jmanual/
+blurb_id: electric_blurb
+doc_summary: Electrical CAD system
+gplv3_status: in-dev-sources (gnumaint-reply 20 Aug 2007 18:50:41 -0700)
+last_release: 9.07
+last_release_date: 20161123
+activity_status: ok
+last_activity: 20161123
+
+package: emacs
+copyright_holder: fsf-maybe-ok-with-external-#786663
+#logowithtoomuchquoting:
http://cvs.savannah.gnu.org/viewvc/*checkout*/emacs/etc/images/icons/emacs_48.png?root=emacs&revision=1.3
+doc_category: Editors
+doc_summary: The extensible, customizable, self-documenting text editor
+doc_url: /software/emacs/#Manuals
+blurb_id: emacs_blurb
+doc_url: htmlxref
+doc_shop: Emacs Reference Cards
+doc_shop: https://shop.fsf.org/books-docs/emacs-reference-card-v25
+doc_shop: GNU Emacs Manual
+doc_shop: https://shop.fsf.org/books/gnu-emacs-manual-18th-edition-v-261
+gplv3_status: done-in-22.3
+last_release: 25.1
+last_release_date: 20160917
+activity_status: ok
+last_activity: 20160917
+
+package: emacs-muse
+copyright_holder: fsf-ok-#786499
+doc_category: Web
+doc_summary: Authoring and publishing environment for Emacs
+doc_url: /software/emacs-muse/manual/
+blurb_id: emacs_muse_blurb
+download_url:
https://web.archive.org/web/20160507124048/http://download.gna.org/muse-el/
+gplv3_status: done-in-3.10
+last_release: 3.12
+last_release_date: 20080128
+activity_status: stale
+last_activity: 20080128
+
+package: emms
+copyright_holder: fsf-no-reply
+mundane_name: EMMS
+doc_category: Audio
+doc_summary: Emacs Multimedia System
+doc_url: htmlxref
+blurb_id: emms_blurb
+logo: /software/emms/emms-logo-small-2.png
+gplv3_status: done-as-of-3.0
+last_release: 4.2
+last_release_date: 20161108
+activity_status: ok
+last_activity: 20161108
+
+package: enscript
+copyright_holder: fsf-no-reply
+doc_category: Printing
+doc_summary: Generating PostScript, including pretty-printing
+doc_url: none
+blurb_id: enscript_blurb
+gplv3_status: done-in-1.6.5
+last_release: 1.6.6
+last_release_date: 20120925
+activity_status: newmaint
+last_activity: 20140305
+
+package: eprints
+logo: //www.eprints.org/style/eprintslogo.gif
+doc_category: Education
+doc_summary: Web-based repository software, with a default setup for research
papers
+doc_url: http://wiki.eprints.org/w/EPrints_Manual
+blurb_id: eprints_blurb
+download_url: http://files.eprints.org/view/type/release.html
+gplv3_status: not-done-in-3.1.3
+last_release: 3.3.12
+last_release_date: 20130724
+last_contact: 23nov09 replied, no gplv3 decision
+note: explicit ok from rms that this is hosted remotely.
+note: explicitly don't want to release via ftp.gnu.org (11mar10->karl)
+activity_status: stale
+last_activity: 20130724
+
+package: epsilon
+copyright_holder: notfsf-#786552,#374046
+doc_category: Software
+doc_summary: A purely functional programming language
+doc_url: /software/epsilon/manual/
+blurb_id: epsilon_blurb
+gplv3_status: done-per-agreement-#374046
+note: no-release
+last_contact: 12dec12 replied "alpha soon"
+activity_status: stale
+
+package: fdisk
+copyright_holder: fsf-no-reply
+doc_category: Sysadmin
+doc_summary: Low-level disk partitioning and formatting
+doc_url: none
+blurb_id: fdisk_blurb
+gplv3_status: done-in-1.0
+last_release: 2.0.0a1
+last_release_date: 20111204
+activity_status: stale
+last_activity: 20111204
+
+package: ferret
+logo: /software/ferret/ferret.png
+doc_category: Database
+doc_summary: Entity/relationship based data modeler
+doc_url: none
+blurb_id: ferret_blurb
+gplv3_status: done-in-0.7
+last_release: 0.7
+last_release_date: 20081116
+activity_status: newmaint
+last_activity: 20130414
+
+package: findutils
+copyright_holder: fsf-ok-#786556
+doc_category: Software
+doc_summary: Operating on files matching given criteria
+doc_url: /software/findutils/manual/
+blurb_id: findutils_blurb
+gplv3_status: in-dev-sources (gnumaint-reply 23 Aug 2007 10:14:01 +0100)
+last_release: 4.6.0
+last_release_date: 20151228
+last_contact: 1may12-replied-four-blocking-bugs
+activity_status: ok
+last_activity: 20151228
+
+package: fisicalab
+mundane_name: FisicaLab
+copyright_holder: notfsf
+doc_category: Education
+doc_summary: Educational application for solving physics problems
+doc_url: none
+blurb_id: fisicalab_blurb
+gplv3_status: done-in-0.3.3
+last_release: 0.3.5
+last_release_date: 20150530
+activity_status: ok
+last_activity: 20150530
+
+package: flex manual
+doc_summary: null
+blurb_id: flex_manual_blurb
+gplv3_status: doc
+note: no-release
+activity_status: stale
+
+package: foliot
+copyright_holder: notfsf
+doc_category: Business
+doc_summary: An application for tracking time spent on projects
+doc_url: none
+blurb_id: foliot_blurb
+gplv3_status: done-in-0.9.5
+last_release: 0.9.6
+last_release_date: 20160308
+activity_status: ok
+last_activity: 20160308
+
+package: fontopia
+copyright_holder: notfsf
+doc_category: Fonts
+doc_summary: A console font editor
+doc_url: none
+gplv3_status: done-in-1.0
+activity_status: newpkg
+last_activity: 20160426
+
+package: fontutils
+copyright_holder: fsf-ok-#788255
+doc_category: Fonts
+doc_summary: Scanned image, bitmap, outline font manipulation
+doc_url: http://www.delorie.com/gnu/docs/fontutils/fontu_toc.html
+blurb_id: fontutils_blurb
+gplv3_status: not-done-since-stale
+last_release: 0.7
+last_release_date: 20000401
+last_contact: 12feb13 not soon
+activity_status: stale
+last_activity: 20000401
+
+package: freedink
+mundane_name: FreeDink
+search_alias: FreeDink DFArc frontend
+doc_category: Games
+doc_summary: Twisted adventures of young pig farmer Dink Smallwood
+doc_url: http://www.freedink.org/doc/
+blurb_id: freedink_blurb
+copyright_holder: notfsf
+gplv3_status: done-in-1.08 (gnumaint-reply 24 Aug 2007 19:47:56 +0200)
+last_release: 108.4, dfarc-3.10/20120427
+last_release_date: 20141022
+activity_status: ok
+last_activity: 20141022
+
+package: freefont
+mundane_name: Free UCS Outline Fonts
+doc_category: Fonts
+doc_summary: Unicode-encoded outline fonts
+doc_url: none
+blurb_id: freefont_blurb
+gplv3_status: done-in-20090104
+last_release: freefont-src
+last_release_date: 20120503
+activity_status: stale
+last_activity: 20120503
+
+package: freeipmi
+mundane_name: FreeIPMI
+doc_category: Libraries
+doc_summary: Platform management, including sensor and power monitoring
+doc_url: /software/freeipmi/documentation.html
+blurb_id: freeipmi_blurb
+logo: /software/freeipmi/images/freeipmi-logo-small.jpg
+gplv3_status: in-dev-sources
+last_contact: 14jan10 replied, next major release
+last_release: 1.5.4
+last_release_date: 20160930
+activity_status: ok
+last_activity: 20160930
+
+package: freetalk
+doc_category: Internet
+doc_summary: Extensible console-based Jabber client
+doc_url: /software/freetalk/freetalk.html
+blurb_id: freetalk_blurb
+download_url: http://download.savannah.gnu.org/releases/freetalk/
+gplv3_status: done-as-of-3.2
+last_release: 4.1
+last_release_date: 20141220
+activity_status: nomaint
+last_activity: 20161114
+
+package: fribidi
+mundane_name: FriBiDi
+doc_category: Localization
+doc_summary: Implementation of the Unicode bidirectional algorithm
+doc_url: none
+blurb_id: fribidi_blurb
+download_url: http://fribidi.org/download/
+gplv3_status: under-discussion-with-brett (gnumaint-reply 3 Oct 2007 11:06:24)
+last_release: 0.19.2
+last_release_date: 20090326
+activity_status: stale
+last_activity: 20090326
+
+package: g-golf
+mundane_name: G-Golf
+doc_category: Interface
+doc_summary: Guile bindings for GObject Introspection
+doc_url: none
+gplv3_status: not-done
+activity_status: newpkg
+last_activity: 20160725
+
+package: gama
+doc_category: Science
+doc_summary: Adjustment of geodetic networks
+doc_url: /software/gama/manual/
+logo: /software/gama/g-logo.png
+blurb_id: gama_blurb
+gplv3_status: done-in-1.9.04
+last_release: 1.18
+last_release_date: 20160816
+activity_status: ok
+last_activity: 20160816
+
+package: garpd
+mundane_name: Gratuitous ARP Daemon
+doc_category: Internet
+doc_summary: Broadcast gratuitous ARP requests for IPMI and more
+doc_url: none
+blurb_id: garpd_blurb
+gplv3_status: done-in-0.2.0
+last_release: 0.2.0
+last_release_date: 20101206
+last_contact: 21nov10 reply, "soon"
+activity_status: stale
+last_activity: 20101206
+
+package: gawk
+copyright_holder: fsf-maybe-ok-just-doc/macros-#787150
+doc_category: Text
+doc_summary: Text scanning and processing language
+doc_url: /software/gawk/manual/
+blurb_id: gawk_blurb
+doc_url: htmlxref
+gplv3_status: done-in-3.1.6
+last_release: 4.1.4
+last_release_date: 20160825
+activity_status: ok
+last_activity: 20160825
+
+package: gbehistun
+copyright_holder: notfsf
+doc_category: Science
+doc_summary: Planetary Science tools
+doc_url: none
+gplv3_status: unknown
+activity_status: newpkg
+last_activity: 20170129
+
+package: gcal
+copyright_holder: notfsf
+doc_category: Business
+doc_summary: Calculating and printing a wide variety of calendars
+doc_url: /software/gcal/manual/
+blurb_id: gcal_blurb
+gplv3_status: done-in-3.5
+last_release: 4.1
+last_release_date: 20170122
+activity_status: ok
+last_activity: 20170122
+
+package: gcc
+mundane_name: GCC
+copyright_holder: fsf-ok-with-external-#786963
+doc_category: Software
+doc_summary: GNU Compiler Collection
+doc_url: /software/gcc/
+blurb_id: gcc_blurb
+doc_url: htmlxref
+doc_shop: Using GCC: The GNU Compiler Collection Reference Manual
+doc_shop:
http://shop.fsf.org/product/using-gcc-gnu-compiler-collection-reference-manual/
+logo: /software/gcc/img/gccegg-65.png
+gplv3_status: done
+last_release: 4.9.4
+last_release_date: 20160803
+last_release: 5.3
+last_release_date: 20151204
+last_release: 6.3
+last_release_date: 20161221
+activity_status: ok
+last_activity: 20161221
+
+package: gcide
+doc_category: Dictionaries
+doc_summary: GNU Collaborative International Dictionary of English
+doc_url: none
+blurb_id: gcide_blurb
+gplv3_status: unknown
+last_release: 0.51
+last_release_date: 20120304
+activity_status: stale
+last_activity: 20120304
+
+package: gcl
+mundane_name: GNU Common Lisp
+doc_category: Software
+doc_summary: A Common Lisp implementation
+doc_url: none
+blurb_id: gcl_blurb
+gplv3_status: not-done-is-lgplv2+-has-gplv2-only-users-9nov10-asked-rms
+last_release: 2.6.12
+last_release_date: 20141028
+activity_status: ok
+last_activity: 20141028
+
+package: gcompris
+mundane_name: GCompris
+doc_category: Education
+doc_summary: Educational games for small children
+doc_url: http://gcompris.net/wiki/Manual
+blurb_id: gcompris_blurb
+gplv3_status: done-in-8.4beta2 (gnumaint-reply 22 Aug 2007 02:04:12)
+download_url: http://sourceforge.net/project/showfiles.php?group_id=6865
+last_release: 15.02
+last_release_date: 20150224
+activity_status: ok
+last_activity: 20150224
+
+package: gdb
+mundane_name: GDB
+copyright_holder: fsf-not-completely-#786588
+doc_category: Software
+doc_summary: The GNU debugger
+doc_url: /software/gdb/documentation/
+blurb_id: gdb_blurb
+doc_url: htmlxref
+doc_shop: Debugging with GDB: The GNU Source-Level Debugger
+doc_shop:
http://shop.fsf.org/product/debugging-gdb-gnu-source-level-debugger-10/
+gplv3_status: done-in-6.7
+logo: /software/gdb/images/archer.jpg
+last_release: 7.12.1
+last_release_date: 20170121
+activity_status: ok
+last_activity: 20170121
+
+package: gdbm
+copyright_holder: fsf-ok-#793768
+doc_category: Database
+doc_summary: Hash library of database functions compatible with traditional dbm
+doc_url: http://www.gnu.org.ua/software/gdbm/manual/
+blurb_id: gdbm_blurb
+gplv3_status: not-done
+last_release: 1.12
+last_release_date: 20160516
+activity_status: ok
+last_activity: 20160516
+
+package: gengen
+doc_category: Software
+doc_summary: A parameterized-text-generator generator based on a template
+doc_url: /software/gengen/gengen.html
+blurb_id: gengen_blurb
+gplv3_status: done-in-1.3
+last_release: 1.4.2
+last_release_date: 20100906
+activity_status: stale
+last_activity: 20100906
+
+package: gengetopt
+copyright_holder: fsf-ok-#796330
+doc_category: Software
+doc_summary: Create parsers for command line options
+doc_url: /software/gengetopt/gengetopt.html
+blurb_id: gengetopt_blurb
+gplv3_status: done-in-2.22.1
+last_release: 2.22.6
+last_release_date: 20121107
+activity_status: stale
+last_activity: 20121107
+
+package: gettext
+copyright_holder: fsf-ok-with-external-#786766
+doc_category: Localization
+doc_summary: Tools and documentation for translation
+doc_url: /software/gettext/manual/
+blurb_id: gettext_blurb
+gplv3_status: done-except-for-dependencies-in-0.17
+last_release: 0.19.8.1
+last_release_date: 20160611
+activity_status: ok
+last_activity: 20160611
+
+package: gforth
+copyright_holder: fsf-ok-#786710
+logo: /software/gforth/gnu-forth.png
+doc_category: Software
+doc_summary: Forth interpreter
+doc_url: htmlxref
+blurb_id: gforth_blurb
+gplv3_status: done-in-0.7.0
+last_release: 0.7.3
+last_release_date: 20140709
+activity_status: ok
+last_activity: 20140709
+
+package: gg-network
+copyright_holder: not-applicable
+doc_summary: null
+blurb_id: gg_network_blurb
+gplv3_status: not-applicable
+container: for-gnu-group
+note: first gnu group
+activity_status: container
+
+package: ggradebook
+doc_category: Education
+doc_summary: GNOME application to track students' grades for teachers
+doc_url: none
+blurb_id: ggradebook_blurb
+gplv3_status: not-done-since-stale
+last_release: 0.91
+last_release_date: 20000410
+last_contact: 22feb13 replied, 18feb13 asked
+next_contact: 15apr13
+activity_status: newmaint
+last_activity: 20160503
+
+package: ghostscript
+mundane_name: GNU Ghostscript
+copyright_holder: notfsf
+doc_category: Printing
+doc_summary: PostScript and PDF interpreter
+doc_url: none
+blurb_id: ghostscript_blurb
+logo: /software/ghostscript/images/gnugs-head.png
+gplv3_status: done-in-8.71.0
+last_release: 9.14.0
+last_release_date: 20141204
+activity_status: ok
+last_activity: 20141204
+
+package: gift
+mundane_name: GIFT
+logo: /software/gift/gnu.image.finder.png
+doc_category: Graphics
+doc_summary: GNU Image Finding Tool, with query by example
+doc_url: none
+blurb_id: gift_blurb
+gplv3_status: not-done
+last_release: 0.1.14
+last_release_date: 20050324
+last_contact: 18feb13 replied, asked
+activity_status: newmaint
+last_activity: 20110826
+
+package: gimp
+mundane_name: GIMP
+logo: //www.gimp.org/images/wilber_the_gimp.png
+doc_category: Graphics
+doc_summary: GNU Image Manipulation Program
+doc_url: http://www.gimp.org/docs/
+blurb_id: gimp_blurb
+download_url: ftp://ftp.gimp.org/pub/gimp/
+gplv3_status: not-done-in-2.6.8-probably-depends-on-gnome
+last_release: 2.8.14
+last_release_date: 20140826
+activity_status: ok
+last_activity: 20140826
+
+package: gimp www pages
+doc_summary: null
+blurb_id: gimp_www_pages_blurb
+gplv3_status: doc
+container: is-gimp
+note: there is no particularly good reason why this is listed
+note: separately from gimp itself; just historical accident.
+activity_status: container
+
+package: glean
+language: guile
+doc_category: Education
+doc_summary: extensible quizzing and tutorial for self-study
+doc_url: /software/glean/
+blurb_id: glean_blurb
+gplv3_status: ok-agplv3+
+activity_status: newpkg
+last_activity: 20141221
+
+package: gleem
+language: java,c++
+doc_category: Libraries
+doc_summary: OpenGL Extremely Easy-to-use Manipulators
+doc_url: /software/gleem/doc/
+blurb_id: gleem_blurb
+gplv3_status: not-done-since-nomaint
+last_release: 1.2.1
+last_release_date: 20020205
+activity_status: nomaint
+last_activity: 20160921
+note: Package does not meet gnueval standards. Please ensure that
++ prospective maintainers are willing to do that work.
+
+package: glib
+mundane_name: GLib
+doc_category: Libraries
+doc_summary: Thread-safe general utility library; basis of GTK+ and GNOME
+doc_url: http://library.gnome.org/devel/glib/unstable/
+blurb_id: glib_blurb
+download_url: http://ftp.gnome.org/pub/gnome/sources/glib/
+gplv3_status: see-gtk+
+last_release: 2.46.2
+last_release_date: 20151112
+activity_status: ok
+last_activity: 201511122
+
+package: global
+doc_category: Software
+doc_summary: Cross-environment source code tag system
+doc_url: htmlxref
+blurb_id: global_blurb
+gplv3_status: done-in-5.6.2
+logo: /software/global/globe.png
+last_release: 6.5.4
+last_release_date: 20160327
+activity_status: ok
+last_activity: 20160327
+
+package: glpk
+mundane_name: GLPK
+doc_category: Libraries
+doc_summary: GNU Linear Programming Kit, supporting the MathProg language
+doc_url: none
+blurb_id: glpk_blurb
+gplv3_status: done-in-directory
+last_release: 4.61
+last_release_date: 20170122
+activity_status: ok
+last_activity: 20170122
+
+package: glue
+mundane_name: GLUE
+logo: /software/glue/glue-butterfly.jpg
+doc_category: Software
+doc_summary: Distributed groupware application framework
+doc_url: none
+blurb_id: glue_blurb
+gplv3_status: not-done-since-nonexistent
+note: no-release
+activity_status: moribund
+
+package: gmediaserver
+doc_category: Audio
+doc_summary: UPnP compatible media server
+doc_url: htmlxref
+blurb_id: gmediaserver_blurb
+download_url: http://download.savannah.gnu.org/releases/gmediaserver/
+gplv3_status: done-in-0.13.0 (18 Oct 2007 17:50:13)
+last_release: 0.13.0
+last_release_date: 20071110
+last_contact: 20nov10 replied, this year
+activity_status: stale
+last_activity: 20071110
+
+package: gmp
+mundane_name: GMP
+copyright_holder: fsf-no-reply
+doc_category: Mathematics
+doc_summary: Multiple-precision arithmetic library
+doc_url: /software/gmp/manual/
+blurb_id: gmp_blurb
+logo: //gmplib.org/gmplogo2.png
+gplv3_status: lgplv3+-as-of-4.2.2-in-2007
+last_release: 6.0.0a
+last_release_date: 20140325
+activity_status: ok
+last_activity: 20140325
+
+package: gnash
+copyright_holder: fsf-ok-#786466
+logo: /software/gnash/images/small-GnashGnu.png
+doc_category: Internet
+doc_summary: Flash movie player
+doc_url: /software/gnash/documentation.html
+blurb_id: gnash_blurb
+doc_source_format: docbook
+gplv3_status: done-in-0.8.2
+last_release: 0.8.10
+last_release_date: 20120131
+activity_status: stale
+last_activity: 20120131
+
+package: gnat
+mundane_name: GNAT
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: Ada compiler
+doc_url: none
+blurb_id: gnat_blurb
+download_url: http://libre.adacore.com/libre/download2/
+gplv3_status: done-as-of-2009
+last_release: 2013
+last_release_date: 20130523
+activity_status: stale
+last_activity: 20130523
+
+package: gnats
+mundane_name: GNATS
+copyright_holder: fsf-ok-almost-completely-#790955
+logo: /software/gnats/images/gnatslogo.png
+doc_category: Software
+doc_summary: GNU problem report and bug management system
+doc_url: /software/gnats/#documentation
+blurb_id: gnats_blurb
+gplv3_status: in-dev-sources rms (gnumaint-reply 21 Aug 2007 23:53:43)
+last_release: 4.2.0
+last_release_date: 20150226
+activity_status: ok
+last_activity: 20150226
+
+package: gnatsweb
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: Web interface to GNATS
+doc_url: none
+blurb_id: gnatsweb_blurb
+gplv3_status: not-done-in-4.0.0-newmaint
+last_release: 4.00
+last_release_date: 20030729
+activity_status: newmaint
+last_activity: 20140320
+
+package: gneuralnetwork
+mundane_name: Gneural Network
+copyright_holder: notfsf
+doc_category: Science
+doc_summary: Programmable neural network
+doc_url: none
+blurb_id: gneuralnetwork_blurb
+gplv3_status: done-in-0.0.1
+last_release: 0.9.1
+last_release_date: 20160504
+activity_status: ok
+last_activity: 20160504
+
+package: gnome
+mundane_name: GNOME
+logo: //www.gnome.org/wp-content/themes/gnome-grass/images/gnome-logo.png
+copyright_holder: notfsf
+doc_category: Interface
+doc_summary: The GNU desktop environment
+doc_url: http://library.gnome.org
+blurb_id: gnome_blurb
+gplv3_status: under-discussion-per-bkuhn-speters-mail-23nov09
+last_release: 3.22
+last_release_date: 20160921
+activity_status: ok
+last_activity: 20160921
+
+package: gnowsys
+mundane_name: GNOWSYS
+logo: /software/gnowsys/GNOWSYS_files/g1014.png
+doc_category: Web
+doc_summary: Distributed network-based memory and knowledge management
+doc_url: none
+blurb_id: gnowsys_blurb
+#broken 8apr12 doc_url: http://trac.gnowledge.org/trac/wiki/GnowsysDocumenation
+download_url: http://download.savannah.gnu.org/releases/gnowsys/
+gplv3_status: in-dev-sources
+last_release: 0.6r2
+last_release_date: 20060617
+last_contact: 18mar10 replied
+activity_status: stale
+last_activity: 20060617
+
+package: gnu-c-manual
+mundane_name: GNU C reference manual
+copyright_holder: fsf-ok-#786666
+doc_category: Software
+doc_summary: Reference manual for the C programming language
+doc_url: htmlxref
+blurb_id: gnu_c_manual_blurb
+gplv3_status: doc
+last_release: 0.2.2
+last_release_date: 20130618
+note: to be superseded by rms manual? #786666
+activity_status: stale
+last_activity: 20130618
+
+package: gnu-crypto
+mundane_name: Crypto
+logo: /software/gnu-crypto/graphics/gc-ls-c.png
+doc_category: Security
+doc_summary: Cryptographic primitives and tools for Java programming
+doc_url: htmlxref
+blurb_id: gnu_crypto_blurb
+gplv3_status: not-done-since-no-changes
+last_release: 2.1.0
+last_release_date: 20051023
+last_contact: see classpath
+activity_status: stable
+last_activity: 20051023
+
+package: gnu-pw-mgr
+doc_category: Security
+doc_summary: Retrieve login credentials without recording passwords
+doc_url: none
+blurb_id: gnu_pw_mgr_blurb
+gplv3_status: done-in-1.0
+last_release: 2.0
+last_release_date: 20160508
+activity_status: ok
+last_activity: 20160508
+
+package: gnuae
+mundane_name: GnuAE
+copyright_holder: fsf-ok-#786471
+logo: /software/gnuae/images/gnuae-logo.png
+doc_category: Science
+doc_summary: Designing alternate energy systems
+doc_url: /software/gnuae/manual/
+blurb_id: gnuae_blurb
+gplv3_status: in-dev-sources
+note: no-release
+activity_status: newcomaint
+last_activity: 20130404
+
+package: gnuastro
+mundane_name: Gnuastro
+doc_category: Science
+doc_summary: Astronomy utilities
+doc_url: none
+blurb_id: gnuastro_blurb
+gplv3_status: done-from-beginning
+last_release: 0.2
+last_release_date: 20161003
+activity_status: ok
+last_activity: 20161003
+
+package: gnubatch
+copyright_holder: fsf-ok-#786525
+doc_category: Sysadmin
+doc_summary: Advanced batch scheduling and job control
+doc_url: none
+blurb_id: gnubatch_blurb
+gplv3_status: done-in-1.0
+last_release: 1.11
+last_release_date: 20140422
+activity_status: ok
+last_activity: 20140422
+
+package: gnubg
+mundane_name: Backgammon
+doc_category: Games
+doc_summary: Backgammon game
+doc_url: /software/gnubg/manual/
+blurb_id: gnubg_blurb
+gplv3_status: in-dev-sources (gnumaint-reply 22 Aug 2007 20:47:21)
+last_release: 1.02.000
+last_release_date: 20130728
+last_contact: 20mar13 brandon asked
+activity_status: stale
+last_activity: 20130728
+
+package: gnubiff
+logo: //gnubiff.sourceforge.net/images/tux-sit-small.png
+doc_category: Email
+doc_summary: Mail notification program
+doc_url: http://gnubiff.sourceforge.net/documentation.php
+blurb_id: gnubiff_blurb
+download_url: http://sourceforge.net/project/showfiles.php?group_id=94176
+gplv3_status: done-in-2.2.8 (sowadart 9 Sep 2007 21:00:37 +0200)
+last_release: 2.2.16
+last_release_date: 20150228
+activity_status: ok
+last_activity: 20150228
+
+package: gnubik
+doc_category: Games
+doc_summary: 3d Rubik's cube game
+doc_url: /software/gnubik/manual/
+blurb_id: gnubik_blurb
+gplv3_status: done-in-2.3
+last_release: 2.4.2
+last_release_date: 20150506
+activity_status: ok
+last_activity: 20150506
+
+package: gnucap
+doc_category: Science
+doc_summary: Mixed analog and digital circuit simulator
+doc_url: /software/gnucap/gnucap-man-html/
+blurb_id: gnucap_blurb
+download_url: http://www.gnucap.org/archive/
+gplv3_status: needs-exception-#342232 done-in-aug20-snapshot (gnumaint-reply
28 Aug 2007 15:45:43)
+last_release: 0.35
+last_release_date: 20060920
+last_contact: 15aug08 asked about gplv3
+activity_status: stale
+last_activity: 20060920
+
+package: gnucash
+mundane_name: GnuCash
+logo: //www.gnucash.org/images/banner5.png
+download_url: http://www.gnucash.org/download.phtml
+doc_category: Business
+doc_summary: Personal and small business financial accounting software
+doc_url: http://www.gnucash.org/docs.phtml
+blurb_id: gnucash_blurb
+tech_address: address@hidden
+gplv3_status: not-done-in-2.3.8-some-gplv2-only-files
+last_release: 2.6.14
+last_release_date: 20160917
+last_contact: 24jan10 asked
+activity_status: ok
+last_activity: 20160917
+
+package: gnucobol
+mundane_name: GnuCOBOL
+doc_category: Software
+doc_summary: A modern COBOL compiler
+doc_url: http://open-cobol.sourceforge.net/doc/gnucobol.html
+blurb_id: gnucobol_blurb
+gplv3_status: planned-for-2.x
+last_release: 1.1
+last_release_date: 20140118
+activity_status: stale
+last_activity: 20140118
+
+package: gnucomm
+mundane_name: GnuComm
+doc_category: Telephony
+doc_summary: GNU telecommunications project / GNU Telephony
+doc_url: /software/gnucomm/overview.html
+blurb_id: gnucomm_blurb
+gplv3_status: ok-since-container
+container: for-bayonne-etc.
+activity_status: container
+
+package: gnudos
+mundane_name: GnuDOS
+doc_category: Interface
+doc_summary: MS-DOS-like file manager, editor, and other tools
+doc_url: none
+blurb_id: gnudos_blurb
+gplv3_status: done-in-1.0
+last_release: 1.8
+last_release_date: 20141218
+activity_status: ok
+last_activity: 20141218
+
+package: gnue
+mundane_name: GNU Enterprise
+copyright_holder: fsf-ok-#786904
+fsd: gnuenterprise
+doc_category: Business
+doc_summary: Enterprise resource planning, et al
+doc_url: none
+blurb_id: gnue_blurb
+gplv3_status: done-in-0.5.3
+last_release: gnue-*-0.5.3
+last_release_date: 20100506
+note: many other sub-packages
+activity_status: stale
+last_activity: 20100506
+
+package: gnufm
+copyright_holder: fsf-ok-with-dependencies-#786606
+doc_category: Audio
+doc_summary: Social music explorations
+doc_url: none
+blurb_id: gnufm_blurb
+gplv3_status: not-done-since-no-release
+note: no-release
+activity_status: stale
+last_activity: 20100316
+
+package: gnugo
+copyright_holder: fsf-maybe-ok-two-files-#786733
+logo: /software/gnugo/logo-36.jpg
+doc_category: Games
+doc_summary: Play the game of Go
+doc_url: /software/gnugo/gnugo_toc.html
+blurb_id: gnugo_blurb
+gplv3_status: done-in-3.8
+last_release: 3.8
+last_release_date: 20090219
+activity_status: stable
+last_activity: 20090219
+
+package: gnuit
+copyright_holder: fsf-no-reply
+mundane_name: GNU Interactive Tools
+doc_category: Interface
+doc_summary: Interactive utilities for file browsing, viewing, and more
+doc_url: /software/gnuit/manual/
+blurb_id: gnuit_blurb
+gplv3_status: done-before-4.9.3
+last_release: 4.9.5
+last_release_date: 20090223
+activity_status: stale
+last_activity: 20090223
+
+package: gnujdoc
+doc_category: Translation
+doc_summary: Japanese translations of GNU documents
+doc_url: none
+blurb_id: gnujdoc_blurb
+gplv3_status: not-applicable-since-doc
+last_contact: 26jan10 asked, 15dec08 replied
+note: japanese translations of documents
+activity_status: stable
+
+package: gnujump
+logo: /software/gnujump/logo.png
+doc_category: Games
+doc_summary: Game of jumping to the next floor, trying not to fall
+doc_url: none
+blurb_id: gnujump_blurb
+gplv3_status: done-in-1.0.5 (13aug08)
+last_release: 1.0.8
+last_release_date: 20120724
+activity_status: stale
+last_activity: 20120724
+
+package: gnukart
+doc_category: Games
+doc_summary: Racing game
+doc_url: none
+blurb_id: gnukart_blurb
+gplv3_status: not-done-since-stale
+last_release: 0.1.4d
+last_release_date: 2010707
+last_contact: replied 21apr10
+note: renamed from speedx
+activity_status: newmaint
+last_activity: 20140420
+
+package: gnulib
+copyright_holder: fsf-ok-per-rms-#786492
+doc_category: Software
+doc_summary: Source files to share among distributions
+doc_url: /software/gnulib/manual/
+blurb_id: gnulib_blurb
+gplv3_status: done-as-much-as-possible
+note: released-through-vc
+activity_status: ok
+
+package: gnumach
+mundane_name: Mach
+copyright_holder: see-hurd
+doc_category: Software
+doc_summary: Microkernel of the GNU system
+doc_url: /software/hurd/microkernel/mach/documentation.html
+blurb_id: gnumach_blurb
+gplv3_status: see-hurd
+last_release: 1.8
+last_release_date: 20161218
+last_contact: see hurd
+activity_status: ok
+last_activity: 20161218
+
+package: gnumed
+doc_category: Health
+doc_summary: Paperless medical practice
+doc_url: http://wiki.gnumed.de/bin/view/Gnumed/GnumedManual
+blurb_id: gnumed_blurb
+download_url: http://www.gnumed.de/downloads/
+gplv3_status: working
+last_release: gnumed-server-21.9, gnumed-client-1.6.9
+last_release_date: 20160912
+activity_status: ok
+last_activity: 20160912
+
+package: gnumeric
+doc_category: Spreadsheets
+doc_summary: Spreadsheet application
+doc_url: http://www.gnome.org/projects/gnumeric/doc/gnumeric.shtml
+blurb_id: gnumeric_blurb
+download_url: http://ftp.gnome.org/pub/GNOME/sources/gnumeric/
+gplv3_status: not-done-in-1.9.18-uses-goffice-gnome-not-done
+last_release: 1.12.32
+last_release_date: 20160820
+note: FIXXXME Gnumeric has a logo, but I couldn't find it online. yavor
+activity_status: ok
+last_activity: 20160820
+
+package: gnump3d
+logo: /software/gnump3d/gnump3d.jpg
+doc_category: Audio
+doc_summary: Server for streaming audio files
+doc_url: /software/gnump3d/documents.html
+blurb_id: gnump3d_blurb
+download_url: http://savannah.gnu.org/download/gnump3d/
+gplv3_status: not-done-in-3.0
+last_release: 3.0
+last_release_date: 20071018
+last_contact: 11feb10 asked
+activity_status: stable
+last_activity: 20071018
+
+package: gnun
+copyright_holder: fsf-ok-with-external-#786604
+mundane_name: GNUnited Nations
+doc_category: Translation
+doc_summary: Build system for www.gnu.org translations
+doc_url: /software/trans-coord/manual/
+blurb_id: gnun_blurb
+doc_url: htmlxref
+gplv3_status: done-in-0.1
+last_release: 0.11
+last_release_date: 20161008
+activity_status: ok
+last_activity: 20161008
+
+package: gnunet
+doc_category: Internet
+doc_summary: Secure, decentralized, peer-to-peer networking framework
+doc_url: https://docs.gnunet.org/
+blurb_id: gnunet_blurb
+gplv3_status: depends-on-mysql (gnumaint-reply 20 Aug 2007 20:40:48)
+last_release: java-0.10.1
+last_release_date: 20140408
+last_release: gtk-0.10.1
+last_release_date: 20140408
+last_release: fuse-0.10.0
+last_release_date: 20131222
+last_release: 0.10.1
+last_release_date: 20140408
+activity_status: ok
+last_activity: 20140408
+
+package: gnupg
+mundane_name: GnuPG
+copyright_holder: fsf-maybe-ok-couple-pieces-#786522
+doc_category: Security
+doc_summary: GNU Privacy Guard
+doc_url: http://www.gnupg.org/documentation/
+blurb_id: gnupg_blurb
+doc_url: htmlxref
+download_url: ftp://ftp.gnupg.org/gcrypt/gnupg/
+gplv3_status: done-in-2.0.7
+last_release: 1.4.21
+last_release_date: 20160817
+last_release: 2.0.30
+last_release_date: 20160331
+last_release: 2.1.18
+last_release_date: 20170124
+alias: gpg
+activity_status: ok
+last_activity: 20170123
+
+package: gnupod
+doc_category: Audio
+doc_summary: Manage portable audio device
+doc_url: /software/gnupod/gnupod.html
+blurb_id: gnupod_blurb
+gplv3_status: done-in-0.99.3
+last_release: 0.99.8
+last_release_date: 20091102
+activity_status: stable
+last_activity: 20091102
+
+package: gnuprologjava
+doc_category: Software
+doc_summary: Implementation of Prolog as a Java library
+doc_url: /software/gnuprologjava/api/
+blurb_id: gnuprologjava_blurb
+doc_url: htmlxref
+download_url: http://sourceforge.net/projects/gnuprologjava/
+gplv3_status: done-in-0.2.5-lgplv3+
+last_release: 0.2.6
+last_release_date: 20110106
+note: requires jdk 1.2, released under lgpl (no exception?)
+activity_status: stale
+last_activity: 20110106
+
+package: gnuradio
+mundane_name: Radio
+copyright_holder: fsf-no-reply
+logo: //www.gnuradio.org/assets/imgs/gnuradio_logo_glyphs_as_paths.svg
+language: python
+doc_category: Audio
+doc_summary: Software radio implementations
+doc_url: https://wiki.gnuradio.org/index.php/Main_Page
+blurb_id: gnuradio_blurb
+gplv3_status: done-in-3.1.0-probably-earlier
+last_release: 3.7.5.1
+last_release_date: 20141021
+activity_status: ok
+last_activity: 20141021
+
+package: gnurobots
+mundane_name: Robots
+doc_category: Games
+doc_summary: Program a little robot and watch him explore a world
+doc_url: /software/gnurobots/readme.html
+blurb_id: gnurobots_blurb
+gplv3_status: done-in-1.2.0
+last_release: 1.2.0
+last_release_date: 20080803
+activity_status: stale
+last_activity: 20080803
+
+package: gnuschool
+doc_category: Education
+doc_summary: Web application for educators, students, and school administrators
+doc_url: htmlxref
+blurb_id: gnuschool_blurb
+gplv3_status: done-in-0.2
+last_release: 2.2
+last_release_date: 20130718
+activity_status: stale
+last_activity: 20130718
+
+package: gnushogi
+copyright_holder: fsf-ok-#786568
+doc_category: Games
+doc_summary: The game of Shogi (Japanese chess)
+doc_url: http://www.cs.caltech.edu/~mvanier/hacking/gnushogi/gnushogi_toc.html
+blurb_id: gnushogi_blurb
+download_url: http://www.cs.caltech.edu/~mvanier/hacking/gnushogi/
+gplv3_status: not-done-in-1.3.2-nomaint
+last_release: 1.4.2
+last_release_date: 20140217
+last_contact: 13mar12 replied
+activity_status: ok
+last_activity: 20140217
+
+package: gnusound
+doc_category: Audio
+doc_summary: Multi-track sound editor for GNOME
+doc_url: /software/gnusound/Documentation/
+blurb_id: gnusound_blurb
+gplv3_status: not-done-in-0.7.5
+last_release: 0.7.5
+last_release_date: 20080706
+last_contact: 17sep11 asked #709362, 30jan10 asked
+activity_status: stale
+last_activity: 20080706
+
+package: gnuspeech
+doc_category: Interface
+doc_summary: Extensible rule-based text-to-speech
+doc_url: /software/gnuspeech/#Manuals
+blurb_id: gnuspeech_blurb
+gplv3_status: in-dev-sources
+last_release: gnuspeechsa-0.1.5
+last_release_date: 20151019
+last_release: gnuspeech-0.9
+last_release_date: 20151019
+activity_status: ok
+last_activity: 20151019
+
+package: gnuspool
+copyright_holder: fsf-ok-#786526
+doc_category: Printing
+doc_summary: Spooling system with a variety of interfaces
+doc_url: none
+blurb_id: gnuspool_blurb
+gplv3_status: done-in-1.0
+last_release: 1.8
+last_release_date: 20101021
+activity_status: stale
+last_activity: 20101021
+
+package: gnustandards
+mundane_name: GNU organization
+copyright_holder: fsf-ok
+doc_category: gnuorg
+doc_summary: GNU coding standards and maintainer information
+doc_url: htmlxref
+blurb_id: gnustandards_blurb
+gplv3_status: doc
+note: released-through-vc
+activity_status: ok
+
+package: gnustep
+copyright_holder: fsf-ok-#786917
+logo: //wiki.gnustep.org/skins/common/images/GNUstep-MediaWiki.png
+doc_category: Software
+doc_summary: Object-oriented application development environment
+doc_url: http://www.gnustep.org/developers/documentation.html
+blurb_id: gnustep_blurb
+gplv3_status: not-applicable-stays-v2+-brett 03 Jun 2008 14:47:17
+download_url: ftp://ftp.gnustep.org/pub/gnustep
+note: many packages
+activity_status: ok
+
+package: gnutls
+mundane_name: GnuTLS
+copyright_holder: fsf-no-reply
+logo: /software/gnutls/graphics/gnutls-logo.png
+doc_category: Libraries
+doc_summary: Transport layer security library
+doc_url: /software/gnutls/manual/
+blurb_id: gnutls_blurb
+gplv3_status: stays-v2-indefinitely (gnumaint-reply 21 Aug 2007 11:13:04)
+last_release: 3.3.26
+last_release_date: 20170109
+last_release: 3.4.15
+last_release_date: 20160908
+last_release: 3.5.8
+last_release_date: 20170109
+activity_status: ok
+last_activity: 20170109
+
+package: gnutrition
+copyright_holder: notfsf-#786495
+language: python
+doc_category: Health
+doc_summary: Nutrition analysis
+doc_url: /software/gnutrition/manual/
+blurb_id: gnutrition_blurb
+gplv3_status: done-in-0.31
+last_release: 0.31.2
+last_release_date: 20120901
+activity_status: stale
+last_activity: 20120901
+
+package: gnuzilla
+copyright_holder: notfsf
+doc_category: Internet
+doc_summary: Entirely free browser derived from Mozilla Firefox
+doc_url: none
+blurb_id: gnuzilla_blurb
+gplv3_status: ok-since-container
+container: for-icecat
+activity_status: container
+
+package: goptical
+copyright_holder: fsf-maybe-ok-with-five-generic-C++-templates-#786535
+doc_category: Science
+doc_summary: C++ optical design and simulation library
+doc_url: /software/goptical/manual/
+blurb_id: goptical_blurb
+gplv3_status: done
+last_release: 1.0
+last_release_date: 20120107
+last_contact: 29nov10 replied, before xmas
+activity_status: stale
+last_activity: 20120107
+
+package: gorm
+logo: //gnustep.org/experience/images/Gorm.png
+download_url: ftp://ftp.gnustep.org/pub/gnustep/dev-apps/
+doc_category: Software
+doc_summary: GNUstep interface designer
+doc_url: http://wiki.gnustep.org/index.php/Gorm_Manual
+blurb_id: gorm_blurb
+gplv3_status: not-applicable-since-gnustep
+last_release: 1.2.23
+last_release_date: 20160719
+activity_status: ok
+last_activity: 20160719
+
+package: gpaint
+doc_category: Graphics
+doc_summary: Simple paint program for GNOME
+doc_url: none
+blurb_id: gpaint_blurb
+download_url: ftp://alpha.gnu.org/gpaint/
+gplv3_status: in-0.3.2-alpha-but-unreleased (was gnumaint-reply 20 Aug 2007
23:52:53)
+last_release: 0.3.3
+last_release_date: 20070910
+activity_status: stale
+last_activity: 20070910
+
+package: gperf
+copyright_holder: fsf-ok-#786473
+doc_category: Software
+doc_summary: Perfect hash function generator
+doc_url: /software/gperf/manual/
+blurb_id: gperf_blurb
+gplv3_status: done-in-3.0.4
+last_release: 3.1
+last_release_date: 20170113
+activity_status: ok
+last_activity: 20170113
+
+package: gprolog
+doc_category: Software
+doc_summary: Prolog compiler
+doc_url: http://www.gprolog.org/manual/
+blurb_id: gprolog_blurb
+gplv3_status: not-done-in-1.3.1
+last_release: 1.4.4
+last_release_date: 20130423
+activity_status: stale
+last_activity: 20130423
+
+package: grabcomics
+mundane_name: phpGrabComics
+doc_category: Web
+doc_summary: Saves comic strips from the web
+doc_url: http://server.phpgrabcomics.org/docs/
+blurb_id: grabcomics_blurb
+download_url: http://sourceforge.net/project/showfiles.php?group_id=33239
+gplv3_status: not-done-in-1.5.4
+last_release: 1.5.4
+last_release_date: 20101118
+last_contact: 18nov10 replied
+activity_status: stale
+last_activity: 20101118
+
+package: greg
+copyright_holder: fsf-no-reply
+download_url:
https://web.archive.org/web/20140927003247/http://download.gna.org/greg/
+doc_category: Software
+doc_summary: Software testing framework
+doc_url: /software/greg/gregdoc.html
+blurb_id: greg_blurb
+gplv3_status: not-done-since-stale
+last_release: 2.0.0
+last_release_date: 20060925
+last_contact: 14dec08 asked
+activity_status: stale
+last_activity: 20060925
+
+package: grep
+copyright_holder: fsf-ok-#786534
+doc_category: Text
+doc_summary: Print lines matching a pattern
+doc_url: /software/grep/manual/
+blurb_id: grep_blurb
+gplv3_status: done-in-2.5.4
+last_release: 2.27
+last_release_date: 20161207
+activity_status: ok
+last_activity: 20161207
+
+package: gretl
+logo: //gretl.sourceforge.net/images/gretl-image.png
+doc_category: Business
+doc_summary: Statistical analysis of economic data (econometrics)
+doc_url: http://sourceforge.net/projects/gretl/files/manual/
+blurb_id: gretl_blurb
+download_url: http://sourceforge.net/project/showfiles.php?group_id=36234
+gplv3_status: done-as-of-1.9.2
+last_release: 2016d
+last_release_date: 20161119
+activity_status: ok
+last_activity: 20161119
+
+package: groff
+search_alias: GNU troff
+copyright_holder: fsf-ok-with-external-and-hyphenations-#786537
+doc_category: Text
+doc_summary: Typesetting from plain text mixed with formatting commands
+doc_url: htmlxref
+blurb_id: groff_blurb
+logo: /graphics/groff-head.png
+gplv3_status: done-in-1.20.1
+last_release: 1.22.3
+last_release_date: 20141104
+activity_status: ok
+last_activity: 20141104
+
+package: grub
+mundane_name: GRUB
+copyright_holder: fsf-maybe-ok-external-mostly-followed-#786720
+doc_category: Sysadmin
+doc_summary: GRand Unified Boot loader
+doc_url: /software/grub/grub-documentation.html
+blurb_id: grub_blurb
+gplv3_status: done-as-of-1.97.2
+last_release: 2.00
+last_release_date: 20120627
+activity_status: stale
+last_activity: 20120627
+
+package: gsasl
+copyright_holder: notfsf
+doc_category: Libraries
+doc_summary: Simple Authentication and Security Layer library
+doc_url: /software/gsasl/manual/
+blurb_id: gsasl_blurb
+gplv3_status: stays-lgplv2.1+
+last_release: 1.8.0, libgsasl-1.8.0/20120528
+last_release_date: 20120528
+activity_status: stale
+last_activity: 20120528
+
+package: gsegrafix
+doc_category: Graphics
+doc_summary: GNOME application to create scientific and engineering plots
+doc_url: none
+blurb_id: gsegrafix_blurb
+gplv3_status: done-as-of-1.0.5
+last_release: 1.0.6
+last_release_date: 20110910
+last_contact: 13feb11 asked
+activity_status: stale
+last_activity: 20110910
+
+package: gsl
+mundane_name: GNU Scientific Library
+copyright_holder: notfsf-gough-did-not-assign-though-others-did
+doc_category: Mathematics
+doc_summary: Numerical library for C and C++
+doc_url: htmlxref
+blurb_id: gsl_blurb
+gplv3_status: done-in-1.10 (gnumaint-reply 21 Aug 2007 10:01:29)
+last_release: 2.3
+last_release_date: 20161209
+activity_status: ok
+last_activity: 20161209
+
+package: gslip
+mundane_name: GNU Slip
+doc_category: Libraries
+doc_summary: SLIP (Symmetric LIst Processor) implementation
+doc_url: none
+blurb_id: gslip_blurb
+gplv3_status: should-be-done
+activity_status: newpkg
+last_activity: 20150810
+
+package: gsrc
+mundane_name: GNU Source Release Collection
+copyright_holder: notfsf-#786658
+doc_category: Sysadmin
+doc_summary: Install latest official GNU releases from original source
+doc_url: /software/gsrc/manual/
+blurb_id: gsrc_blurb
+gplv3_status: done
+last_release: 2014.07.06
+last_release_date: 20140706
+activity_status: ok
+last_activity: 20140706
+
+package: gss
+mundane_name: Generic Security Service
+doc_category: Libraries
+doc_summary: Generic Security Service library
+doc_url: /software/gss/manual/
+blurb_id: gss_blurb
+gplv3_status: done-as-of-1.0.0
+last_release: 1.0.3
+last_release_date: 20141009
+activity_status: ok
+last_activity: 20141009
+
+package: gtick
+mundane_name: GTick
+logo: //www.antcom.de/gtick/logo.www.jpg
+doc_category: Music
+doc_summary: Customizable metronome application
+doc_url: none
+blurb_id: gtick_blurb
+gplv3_status: done-in-0.4.0
+download_url: http://www.antcom.de/gtick/download/
+last_release: 0.5.4
+last_release_date: 20140727
+activity_status: ok
+last_activity: 20140727
+
+#package: gts
+#mundane_name: GNU Triangulated Surface Library
+#gplv3_status: not-done-in-4.0.0
+#homepage: http://gts.sourceforge.net/
+#activity_status: ? # 13nov08 asked about gnu status
+
+
+package: gtk+
+mundane_name: GTK+
+doc_category: Interface
+doc_summary: Cross-platform toolkit for creating graphical user interfaces
+doc_url: http://library.gnome.org/devel/gtk/stable/
+blurb_id: gts_blurb
+gplv3_status: under-discussion # stormy.peters mail 23 Nov 2009 19:26:17
+last_release: 3.18.4
+last_release_date: 20151112
+activity_status: ok
+last_activity: 20151112
+
+package: gtypist
+doc_category: Education
+doc_summary: Typing tutor
+doc_url: htmlxref
+blurb_id: gtypist_blurb
+gplv3_status: done-in-2.8
+last_release: 2.9.5
+last_release_date: 20140812
+activity_status: ok
+last_activity: 20140812
+
+package: guile
+copyright_holder: fsf-maybe-ok-just-goops-#786545
+logo: /software/guile/static/base/img/branding.png
+doc_category: Software
+doc_summary: Scheme implementation intended especially for extensions
+doc_url: /software/guile/manual/
+blurb_id: guile_blurb
+gplv3_status: not-done-in-1.8.6-planned-for-1.10/2.0-in-2009 # neil 12jan09
+last_release: 2.0.13
+last_release_date: 20161012
+activity_status: ok
+last_activity: 20161012
+
+package: guile-cv
+doc_category: Libraries
+doc_summary: Computer Vision library for Guile
+doc_url: none
+gplv3_status: unknown
+activity_status: newpkg
+last_activity: 20170421
+
+package: guile-dbi
+doc_category: Database
+doc_summary: Guile database abstraction layer
+doc_url:
http://htmlpreview.github.io/?https://github.com/opencog/guile-dbi/blob/master/website/guile-dbi.html
+blurb_id: guile_dbi_blurb
+gplv3_status: not-done-in-2.1.2
+download_url: https://github.com/opencog/guile-dbi
+last_release: 2.1.6
+last_release_date: 20150802
+activity_status: ok
+last_activity: 20150802
+
+package: guile-opengl
+doc_category: Graphics
+doc_summary: Guile binding for the OpenGL graphics API
+doc_url: none
+blurb_id: guile_opengl_blurb
+gplv3_status: done-in-0.1.0
+last_release: 0.1.0
+last_release_date: 20140518
+activity_status: ok
+last_activity: 20140518
+
+package: guile-gnome
+doc_category: Software
+doc_summary: Guile interface for GTK+ programming for GNOME
+doc_url: /software/guile-gnome/docs/
+blurb_id: guile_gnome_blurb
+doc_url: htmlxref
+gplv3_status: not-done-in-2.16.3
+last_release: guile-gnome-platform-2.16.4
+last_release_date: 20151208
+last_release: guile-clutter-1.12.2.1
+last_release_date: 20151208
+activity_status: ok
+last_activity: 20151208
+
+package: guile-ncurses
+doc_category: Interface
+doc_summary: Guile bindings to ncurses
+doc_url: /software/guile-ncurses/manual/
+blurb_id: guile_ncurses_blurb
+gplv3_status: done-in-0.9
+last_release: 2.1
+last_release_date: 20161113
+activity_status: ok
+last_activity: 20161113
+
+package: guile-rpc
+copyright_holder: fsf-ok-with-external-#786605
+doc_category: Software
+doc_summary: Pure Scheme implementation for the ONC RPC standard
+doc_url: /software/guile-rpc/manual/
+blurb_id: guile_rpc_blurb
+gplv3_status: done-in-0.3-alpha (gnumaint-reply 21 Aug 2007 09:35:53 +0200)
+last_release: 0.4
+last_release_date: 20140521
+activity_status: ok
+last_activity: 20140521
+
+package: guile-sdl
+mundane_name: Guile-SDL
+copyright_holder: notfsf
+doc_category: Audio
+doc_summary: Guile interface for SDL (Simple DirectMedia Layer)
+doc_url: /software/guile-sdl/manual/
+blurb_id: guile_sdl_blurb
+gplv3_status: done-originally
+last_release: 0.5.2
+last_release_date: 20150308
+activity_status: ok
+last_activity: 20150308
+
+package: guix
+search_alias: Guix & GuixSD
+logo: /software/guix/static/base/img/icon.png
+doc_category: Sysadmin
+doc_summary: Functional package manager for installed software packages and
versions
+doc_url: /software/guix/manual/
+blurb_id: guix_blurb
+gplv3_status: done-in-0.0
+last_release: 0.10.0
+last_release_date: 20160329
+activity_status: alpha
+last_activity: 20160329
+
+package: gurgle
+doc_category: Database
+doc_summary: GNU Report Generator Language
+doc_url: http://homepages.inf.ed.ac.uk/timc/gurgle/gurgle.html
+blurb_id: gurgle_blurb
+gplv3_status: done-in-1.61
+last_release: 1.75
+last_release_date: 20130718
+activity_status: stable
+last_activity: 20130718
+
+package: gv
+copyright_holder: notfsf
+doc_category: Printing
+doc_summary: PostScript and PDF viewer using Ghostscript as a back-end
+doc_url: /software/gv/manual/
+blurb_id: gv_blurb
+gplv3_status: done-in-3.6.5
+last_release: 3.7.4
+last_release_date: 20130317
+activity_status: stale
+last_activity: 20130317
+
+package: gvpe
+mundane_name: GVPE
+doc_category: Security
+doc_summary: Secure VPN among multiple nodes over an untrusted network
+doc_url: none
+blurb_id: gvpe_blurb
+gplv3_status: done-in-2.0
+last_release: 2.25
+last_release_date: 20130716
+activity_status: stale
+last_activity: 20130716
+
+package: gwl
+mundane_name: GWL
+doc_category: Libraries
+doc_summary: Workflow language for GNU Guix
+doc_url: none
+gplv3_status: done-originally
+activity_status: newpkg
+last_activity: 20180221
+
+package: gxmessage
+gplv3_status: done
+doc_category: Interface
+doc_summary: Open popup message window with buttons for return
+doc_url: none
+blurb_id: gxmessage_blurb
+last_release: 3.4.1; 20150522 2.20.2
+last_release_date: 20150522
+activity_status: ok
+last_activity: 20150522
+
+package: gzip
+copyright_holder: fsf-ok-with-gailly-contract-#786477
+doc_category: Archiving
+doc_summary: General file (de)compression (using lzw)
+doc_url: /software/gzip/manual/
+blurb_id: gzip_blurb
+gplv3_status: done-as-of-1.4
+last_release: 1.8
+last_release_date: 20160426
+activity_status: ok
+last_activity: 20160426
+
+package: halifax
+mundane_name: HaliFAX
+doc_category: Telephony
+doc_summary: Fax support
+doc_url: none
+blurb_id: halifax_blurb
+gplv3_status: not-done-since-nomaint
+last_release: 0.22.0
+last_release_date: 20010508
+last_contact: wolfgang replied 6jul12
+activity_status: nomaint
+last_activity: 20010508
+
+package: health
+language: python
+doc_category: Health
+doc_summary: Health and hospital information system
+doc_url: none
+blurb_id: health_blurb
+gplv3_status: done
+last_release: gnuhealth-3.0.2
+last_release_date: 20160713
+activity_status: ok
+last_activity: 20160713
+
+package: hello
+copyright_holder: fsf-ok-#786611
+doc_category: Software
+doc_summary: Hello, GNU world: An example GNU package
+doc_url: /software/hello/manual/
+blurb_id: hello_blurb
+gplv3_status: done-in-2.3
+last_release: 2.10
+last_release_date: 20141116
+activity_status: ok
+last_activity: 20141116
+
+package: help2man
+copyright_holder: fsf-ok-#786697
+doc_category: Text
+doc_summary: Automatically generate man pages from program --help
+doc_url: none
+blurb_id: help2man_blurb
+gplv3_status: done-in-1.37.1
+last_release: 1.47.2
+last_release_date: 20150911
+activity_status: ok
+last_activity: 20150911
+
+package: hp2xx
+copyright_holder: notfsf
+doc_category: Printing
+doc_summary: Convert HP-GL format graphics to other vector and bitmap formats
+doc_url: none
+blurb_id: hp2xx_blurb
+gplv3_status: not-done-since-stale
+last_release: 3.4.4
+last_release_date: 20030623
+activity_status: stable
+last_activity: 20030623
+
+package: html-info
+doc_category: Text
+doc_summary: HTML-Info viewer and tools
+doc_url: none
+blurb_id: html_info_blurb
+activity_status: newpkg
+last_activity: 20150113
+
+package: httptunnel
+logo: /graphics/httptunnel-w.png
+doc_category: Internet
+doc_summary: Bidirectional connection tunnelled inside HTTP requests
+doc_url: none
+blurb_id: httptunnel_blurb
+gplv3_status: not-done-since-stale
+last_release: 3.3
+last_release_date: 20020116
+last_contact: 28apr09 replied, 9feb10 asked
+activity_status: stale
+last_activity: 20020116
+
+package: hurd
+copyright_holder: fsf-ok-with-linux-code-rms
+doc_category: Software
+doc_summary: The kernel servers for the GNU operating system
+doc_url: /software/hurd/doc/doc.html
+blurb_id: hurd_blurb
+gplv3_status: under-discussion
+logo: /graphics/hurd_sm_mf.jpg
+last_release: 0.9
+last_release_date: 20161218
+activity_status: ok
+last_activity: 20161218
+
+package: hyperbole
+doc_category: Text
+doc_summary: Emacs hypertext system via customizable buttons
+doc_url: none
+blurb_id: hyperbole_blurb
+gplv3_status: done-in-5.0.3
+last_release: 6.0.1
+last_release_date: 20160727
+activity_status: ok
+last_activity: 20160727
+
+package: icecat
+copyright_holder: notfsf
+logo: /software/gnuzilla/icecat-128.png
+doc_category: Internet
+doc_summary: Entirely free browser derived from Mozilla Firefox
+doc_url: none
+blurb_id: icecat_blurb
+gplv3_status: not-applicable-since-not-our-program
+last_release: 45.7.0
+last_release_date: 20170305
+activity_status: ok
+last_activity: 20170305
+
+package: idutils
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: Identifier database utilities
+doc_url: /software/idutils/manual/
+blurb_id: idutils_blurb
+gplv3_status: done-in-4.5
+last_release: 4.6
+last_release_date: 20120203
+activity_status: stale
+last_activity: 20120203
+
+package: ignuit
+doc_category: Education
+doc_summary: Memorization aid based on Leitner flashcards
+doc_url: none
+blurb_id: ignuit_blurb
+gplv3_status: done
+last_release: 2.24.2
+last_release_date: 20160403
+activity_status: ok
+last_activity: 20160403
+
+package: indent
+copyright_holder: notfsf
+doc_category: Software
+doc_summary: Code reformatter
+doc_url: /software/indent/manual/
+blurb_id: indent_blurb
+gplv3_status: notgpl-is-bsd
+last_release: 2.2.10
+last_release_date: 20090215
+activity_status: newmaint
+last_activity: 20140319
+
+package: inetutils
+doc_category: Internet
+doc_summary: Basic networking utilities
+doc_url: /software/inetutils/manual/
+blurb_id: inetutils_blurb
+gplv3_status: done
+last_release: 1.9.4
+last_release_date: 20150610
+activity_status: ok
+last_activity: 20150610
+
+package: inklingreader
+doc_category: Interface
+doc_summary: Wacom Inkling sketch format conversion and manipulation
+doc_url: none
+blurb_id: inklingreader_blurb
+gplv3_status: done-except-for-inkscape-plugin
+activity_status: newpkg
+last_activity: 20141028
+
+package: intlfonts
+doc_category: Fonts
+doc_summary: TrueType and BDF fonts covering many scripts
+doc_url: none
+blurb_id: intlfonts_blurb
+gplv3_status: needs-exception-#341653-fonts (21 Aug 2007 10:41:44)
+last_release: 1.2.1
+last_release_date: 20030703
+last_contact: 27jan09 asked
+activity_status: stale
+last_activity: 20030703
+
+package: jacal
+mundane_name: JACAL
+logo: //people.csail.mit.edu/jaffer/Logo/equal96.png
+doc_category: Mathematics
+doc_summary: Symbolic mathematics system
+doc_url: http://people.csail.mit.edu/jaffer/jacal_toc.html
+blurb_id: jacal_blurb
+gplv3_status: done-without-guile-licensing-exception (licensing 341651 20 Aug
2007 21:32:09)
+other_download_url: http://groups.csail.mit.edu/mac/ftpdir/scm/
+last_release: 1c4
+last_release_date: 20150116
+activity_status: ok
+last_activity: 20150116
+
+package: java-getopt
+language: java
+doc_category: Libraries
+doc_summary: Java port of GNU getopt
+doc_url:
http://www.urbanophile.com/arenn/hacking/getopt/Package-gnu.getopt.html
+blurb_id: java_getopt_blurb
+download_url: ftp://ftp.urbanophile.com/pub/arenn/software/sources/
+gplv3_status: not-applicable-since-libc-fns-per-rms (karl mail 08 May 2008
04:44:55)
+last_release: 1.0.13
+last_release_date: 20060829
+note: classpath has its own smaller/simpler option parsing library,
+note: per Mark Wielaard, 24apr07. This is an independent port of libc getopt.
+activity_status: stable
+last_activity: 20060829
+
+package: jtw
+mundane_name: Java Training Wheels
+doc_category: Education
+doc_summary: A simplified Java environment for learning programming
+doc_url: none
+gplv3_status: done
+last_release: 1.1
+last_release_date: 20160708
+activity_status: ok
+last_activity: 20160708
+
+package: jel
+doc_category: Libraries
+doc_summary: Java expression library and compiler
+doc_url: /software/jel/manual.html
+blurb_id: jel_blurb
+gplv3_status: done-in-2.0.1
+last_release: 2.0.1
+last_release_date: 20071012
+last_contact: 24jun09 replied
+activity_status: stable
+last_activity: 20071012
+
+package: jwhois
+copyright_holder: fsf-ok-#786523
+language: c
+doc_category: Internet
+doc_summary: An extended whois client
+doc_url: /software/jwhois/manual/
+blurb_id: jwhois_blurb
+gplv3_status: done-in-4.0
+last_release: 4.0
+last_release_date: 20070701
+last_contact: 12dec12 newmaint needed, 20090620 replied, maybe soon
+activity_status: newmaint
+last_activity: 20161012
+
+package: kawa
+logo: /software/kawa/style/kawa-logo.png
+doc_category: Software
+doc_summary: Java framework and implementation of Scheme, Elisp, and more
+doc_url: none
+blurb_id: kawa_blurb
+gplv3_status: notgpl
+last_release: 2.0
+last_release_date: 20141202
+activity_status: ok
+last_activity: 20141202
+
+package: kopi
+language: java
+doc_category: Software
+doc_summary: Java development environment for interactive database applications
+doc_url: none
+blurb_id: kopi_blurb
+download_url: http://sourceforge.net/projects/kopi/files/
+gplv3_status: not-done-in-2.3B
+last_release: 2.3B
+last_release_date: 20070918
+last_contact: 10mar12 asked, 10mar12 benheni asked
+activity_status: stale
+last_activity: 20070918
+
+package: leg
+copyright_holder: fsf-ok-planned-code-#786483
+language: c++
+doc_category: Games
+doc_summary: Libraries and engines for game programming
+doc_url: none
+blurb_id: leg_blurb
+gplv3_status: not-done-since-no-release
+last_contact: 16feb13 replied end of summer, asked, 8nov10 replied, soon
+activity_status: newmaint
+last_activity: 20110519
+
+package: less
+copyright_holder: notfsf
+doc_category: Text
+doc_summary: Paginator for terminals
+doc_url: none
+blurb_id: less_blurb
+gplv3_status: notgpl
+last_release: 481
+last_release_date: 20151016
+activity_status: ok
+last_activity: 20151016
+
+package: libc
+mundane_name: GNU C Library
+copyright_holder: fsf-ok-per-rms-#786983
+doc_category: Libraries
+doc_summary: C library
+doc_url: /software/libc/manual/
+blurb_id: libc_blurb
+gplv3_status: under-discussion
+download_url: http://ftp.gnu.org/gnu/glibc/
+last_release: 2.24
+last_release_date: 20160804
+# seems to be gone from shop, noticed 8aug14, webmasters #934653
+#doc_shop: GNU C Library Application Fundamentals (Vol.1)
+#doc_shop: http://shop.fsf.org/product/gnu-c-library-application-fundamentals/
+activity_status: ok
+last_activity: 20160804
+
+package: libcdio
+doc_category: Audio
+doc_summary: CD Input and Control library
+doc_url: htmlxref
+blurb_id: libcdio_blurb
+gplv3_status: done-in-0.81
+last_release: 0.93, libcdio-paranoia-10.2+0.93+1/20140929,
pycdio-0.20/20130906, rbcdio-0.15/200901518
+last_release_date: 20140929
+activity_status: ok
+last_activity: 20140929
+
+package: libdbh
+doc_category: Database
+doc_summary: Advanced library for disk-based hash tables
+doc_url: none
+blurb_id: libdbh_blurb
+gplv3_status: done-in-5.0.17
+last_release: 5.0.17
+last_release_date: 20150313
+activity_status: ok
+last_activity: 20150313
+
+package: libextractor
+logo: /software/libextractor/extractor_logo.png
+doc_category: Audio
+doc_summary: Library to extract meta-data from media files
+doc_url: htmlxref
+blurb_id: libextractor_blurb
+gplv3_status: depends-on-gnunet (gnumaint-reply 20 Aug 2007 20:40:48)
+last_release: 1.3
+last_release_date: 20131223
+activity_status: stale
+last_activity: 20131223
+
+package: libffcall
+doc_category: Libraries
+doc_summary: Foreign function calls from interpreters
+doc_url: none
+blurb_id: libffcall_blurb
+gplv3_status: not-done-in-1.10-used-by-clisp
+last_release: 1.10
+last_release_date: 20040602
+activity_status: newmaint
+last_activity: 20130713
+
+package: libgcrypt
+copyright_holder: notfsf-any-more-#786520
+download_url: ftp://ftp.gnupg.org/gcrypt/libgcrypt/
+doc_category: Libraries
+doc_summary: Cryptographic function library
+doc_url: htmlxref
+blurb_id: libgcrypt_blurb
+gplv3_status: depends-on-gnutls (gnumaint-reply 21 Aug 2007 11:13:04)
+last_release: 1.7.2
+last_release_date: 20160714
+activity_status: ok
+last_activity: 20160714
+
+package: libiconv
+copyright_holder: fsf-no-reply
+doc_category: Libraries
+doc_summary: Character set conversion library
+doc_url: none
+blurb_id: libiconv_blurb
+gplv3_status: not-done-partially-in-1.12
+last_release: 1.14
+last_release_date: 20110807
+activity_status: newmaint
+last_activity: 20140707
+
+package: libidn
+search_alias: libidn2
+copyright_holder: notfsf-simon-did-not-assign-though-others-did
+doc_category: Libraries
+doc_summary: Internationalized string processing library
+doc_url: /software/libidn/manual/
+blurb_id: libidn_blurb
+gplv3_status: not-done-partially-in-1.6-except-java?-20mar08
+last_release: 1.33
+last_release_date: 20160720
+activity_status: ok
+last_activity: 20160720
+
+package: libjit
+copyright_holder: notfsf
+doc_category: Libraries
+doc_summary: Just-in-Time compilation library
+doc_url: none
+blurb_id: libjit_blurb
+gplv3_status: unknown
+activity_status: newpkg
+last_activity: 20121218
+
+package: libmatheval
+copyright_holder: fsf-ok-#786536
+doc_category: Mathematics
+doc_summary: Library for evaluating symbolic expressions
+doc_url: htmlxref
+blurb_id: libmatheval_blurb
+gplv3_status: done-as-of-1.1.7
+last_release: 1.1.11
+last_release_date: 20130814
+activity_status: newmaint
+last_activity: 20131023
+
+package: libmicrohttpd
+copyright_holder: notfsf
+language: c
+doc_category: Libraries
+doc_summary: C library implementing an HTTP 1.1 server
+doc_url: /software/libmicrohttpd/manual/
+blurb_id: libmicrohttpd_blurb
+gplv3_status: depends-on-gnunet-lgplv2.1+
+last_release: 0.9.49
+last_release_date: 20160409
+activity_status: ok
+last_activity: 20160409
+
+package: libredwg
+copyright_holder: fsf-no-info-in-reply-#786464
+language: c
+doc_category: Science
+doc_summary: C library to handle DWG (CAD-related) files
+doc_url: none
+blurb_id: libredwg_blurb
+gplv3_status: not-done-since-no-release
+note: no-release
+last_contact: 16feb10 replied
+activity_status: newpkg
+last_activity: 20091021
+
+package: liberty-eiffel
+mundane_name: Liberty Eiffel
+doc_category: Software
+doc_summary: Eiffel compiler
+doc_url: none
+blurb_id: liberty_eiffel_blurb
+#logo: //smarteiffel.loria.fr/images/Logo_pp_small.png
+#download_url: http://gforge.inria.fr/frs/?group_id=184
+#gplv3_status: not-done-in-2.3
+last_release: 2016.05
+last_release_date: 20160526
+note: renamed from smarteiffel (and smalleiffel before that).
+activity_status: ok
+last_activity: 20160526
+
+package: librejs
+logo: /software/librejs/images/logo-medium.png
+language: javascript
+doc_category: Internet
+doc_summary: Browser add-on that blocks nonfree nontrivial JavaScript
+doc_url: /software/librejs/manual/
+blurb_id: librejs_blurb
+gplv3_status: ok
+last_release: 6.0.13
+last_release_date: 20160504
+activity_status: ok
+last_activity: 20160504
+
+package: libsigsegv
+doc_category: Software
+doc_summary: Library for handling page faults
+doc_url: none
+blurb_id: libsigsegv_blurb
+gplv3_status: not-done-in-2.5-11nov07
+last_release: 2.10
+last_release_date: 20110403
+activity_status: newmaint
+last_activity: 20140715
+
+package: libtasn1
+copyright_holder: fsf-no-reply-see-note
+language: c
+doc_category: Security
+doc_summary: ASN.1 library
+doc_url: /software/libtasn1/manual/
+blurb_id: libtasn1_blurb
+gplv3_status: done-as-of-2.6
+last_release: 4.8
+last_release_date: 20160411
+note: originated with gnutls, so copyright fsf, even though no explicit
+note: assignment has been needed yet.
+activity_status: ok
+last_activity: 20160411
+
+package: libtool
+copyright_holder: fsf-ok-#786491
+logo: /software/libtool/libtool.jpg
+doc_category: Libraries
+doc_summary: Generic shared library support tools
+doc_url: /software/libtool/manual/
+blurb_id: libtool_blurb
+gplv3_status: needs-exception-#349136
+last_release: 2.4.6
+last_release_date: 20150215
+activity_status: ok
+last_activity: 20150215
+
+package: libunistring
+copyright_holder: fsf-ok-#786481
+language: c
+doc_category: Libraries
+doc_summary: C library for manipulating Unicode strings
+doc_url: /software/libunistring/manual/
+blurb_id: libunistring_blurb
+gplv3_status: done-as-of-0.9.2.1-lgpl
+last_release: 0.9.7
+last_release_date: 20161202
+activity_status: ok
+last_activity: 20161202
+
+package: libxmi
+copyright_holder: fsf-no-reply
+doc_category: Graphics
+doc_summary: Library for rasterizing 2-d vector graphics
+doc_url: none
+blurb_id: libxmi_blurb
+gplv3_status: not-done-since-stale
+last_release: 1.2
+last_release_date: 20000621
+activity_status: stale
+last_activity: 20000621
+
+package: lightning
+copyright_holder: fsf-ok-24dec12
+doc_category: Libraries
+doc_summary: Library for generating assembly code at runtime
+doc_url: /software/lightning/manual/
+blurb_id: lightning_blurb
+gplv3_status: not-done-since-stale
+last_release: 2.1.0
+last_release_date: 20150207
+activity_status: ok
+last_activity: 20150207
+
+package: lilypond
+doc_category: Music
+doc_summary: Music typesetting
+doc_url: http://lilypond.org/manuals.html
+blurb_id: lilypond_blurb
+gplv3_status: done-as-of-2.13.13
+download_url: http://download.linuxaudio.org/lilypond/sources/
+last_release: 2.19.18
+last_release_date: 20150405
+activity_status: ok
+last_activity: 20150405
+
+package: lims
+language: python
+doc_category: Science
+doc_summary: Scientific laboratory information management system
+doc_url: none
+blurb_id: lims_blurb
+gplv3_status: should-be-done-initially
+activity_status: newpkg
+last_activity: 20131104
+
+package: linux-libre
+doc_category: Software
+doc_summary: 100% free redistribution of a cleaned Linux kernel
+doc_url: none
+blurb_id: linux_libre_blurb
+gplv3_status: stays-gplv2-due-to-linux
+download_url: http://linux-libre.fsfla.org/pub/linux-libre/releases/
+last_release: 4.8-gnu
+last_release_date: 20161003
+activity_status: ok
+last_activity: 20161003
+
+package: liquidwar6
+mundane_name: Liquid War 6
+doc_category: Games
+doc_summary: Multiplayer wargame where your army is a blob of liquid
+doc_url: /software/liquidwar6/manual/
+blurb_id: liquidwar6_blurb
+gplv3_status: done-in-0.0.2beta
+last_release: 0.6.3902
+last_release_date: 20150507
+activity_status: ok
+last_activity: 20150507
+
+package: lispintro
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: Introduction to programming in Emacs Lisp
+doc_url: /software/emacs/emacs-lisp-intro/emacs-lisp-intro.html
+blurb_id: lispintro_blurb
+doc_shop: An Introduction to Emacs Lisp
+doc_shop: http://shop.fsf.org/product/Intro_to_Emacs_Lisp_3rd_Ed/
+gplv3_status: doc
+note: released-through-emacs
+activity_status: subpkg
+
+package: lrzsz
+doc_category: Internet
+doc_summary: Implementation of XMODEM/YMODEM/ZMODEM transfer protocols
+doc_url: none
+blurb_id: lrzsz_blurb
+download_url: http://www.ohse.de/uwe/releases/
+gplv3_status: not-done-in-0.12.20
+last_release: 0.12.20
+last_release_date: 19981230
+last_contact: 28nov10 asked, 11apr09 replied, next 3 months
+activity_status: stale
+last_activity: 19981230
+
+package: lsh
+doc_category: Security
+doc_url: http://www.lysator.liu.se/~nisse/lsh/lsh.html
+blurb_id: lsh_blurb
+doc_summary: GNU implementation of the Secure Shell (ssh) protocols
+gplv3_status: not-done-in-2.9-exp
+download_url: http://www.lysator.liu.se/~nisse/archive/
+last_release: 2.1
+last_release_date: 20130626
+activity_status: stale
+last_activity: 20130626
+
+package: m4
+copyright_holder: fsf-ok-#786645
+doc_category: Text
+doc_summary: Macro processor
+doc_url: /software/m4/manual/
+blurb_id: m4_blurb
+gplv3_status: done-as-of-1.14.14
+last_release: 1.4.18
+last_release_date: 20161231
+activity_status: ok
+last_activity: 20161231
+
+package: macchanger
+mundane_name: MAC Changer
+doc_category: Internet
+doc_summary: Viewing and manipulating MAC addresses of network interfaces
+doc_url: none
+blurb_id: macchanger_blurb
+gplv3_status: in-dev-sources (gnumaint-reply 21 Aug 2007 11:29:32 +0200)
+last_release: 1.6.0
+last_release_date: 20130326
+activity_status: stale
+last_activity: 20130326
+
+package: mailman
+copyright_holder: fsf-no-reply
+logo: /graphics/dragonlogo.jpg
+language: c,python
+doc_category: Email
+doc_summary: Mailing list manager
+doc_url: /software/mailman/docs.html
+blurb_id: mailman_blurb
+gplv3_status: next-release-2.2-and-3.0
+last_release: 2.1.21
+last_release_date: 20160228
+activity_status: ok
+last_activity: 20160228
+
+package: mailutils
+copyright_holder: fsf-ok-with-external-libraries-#793769
+doc_category: Email
+doc_summary: Utilities and library for reading and serving mail
+doc_url: /software/mailutils/manual/
+blurb_id: mailutils_blurb
+gplv3_status: done-in-2.0
+last_release: 3.1.1
+last_release_date: 20161216
+activity_status: ok
+last_activity: 20161216
+
+package: make
+copyright_holder: fsf-ok-#788835
+doc_category: Software
+doc_summary: Remake files automatically
+doc_url: /software/make/manual/
+blurb_id: make_blurb
+gplv3_status: in-dev-sources (gnumaint-reply 28 Aug 2007 08:30:15)
+last_release: 4.2.1
+last_release_date: 20160611
+activity_status: ok
+last_activity: 20160611
+
+package: marst
+copyright_holder: fsf-no-reply
+mundane_name: MARST
+doc_category: Software
+doc_summary: Algol-to-C translator
+doc_url: none
+blurb_id: marst_blurb
+gplv3_status: done-in-2.5
+last_release: 2.7
+last_release_date: 20130309
+activity_status: stale
+last_activity: 20130309
+
+package: maverik
+doc_category: Graphics
+doc_summary: Support interactive 3d virtual environments
+doc_url: none
+blurb_id: maverik_blurb
+gplv3_status: done-in-6.4
+last_release: 6.5
+last_release_date: 20130315
+last_contact: 21feb13 replied, 18feb13 asked
+activity_status: stale
+last_activity: 20130315
+
+package: mc
+mundane_name: Midnight Commander
+copyright_holder: fsf-no-reply
+doc_category: Interface
+doc_summary: Graphical file manager
+doc_url: none
+blurb_id: mc_blurb
+gplv3_status: not-done-in-4.6.2-pre1
+last_release: 4.6.2-pre1
+last_release_date: 20070913
+activity_status: stale
+last_activity: 20070913
+
+package: mcron
+logo: /software/mcron/mcron-logo.png
+doc_category: Sysadmin
+doc_summary: Run jobs at scheduled times
+doc_url: none
+blurb_id: mcron_blurb
+gplv3_status: done-in-1.0.4
+last_release: 1.0.8
+last_release_date: 20140525
+activity_status: nomaint
+last_activity: 20140525
+
+package: mcsim
+mundane_name: MCSim
+copyright_holder: fsf-ok-with-pd-#787152
+doc_category: Mathematics
+doc_summary: Monte Carlo simulation and analysis
+doc_url: http://www.gnu.org/software/mcsim/mcsim.html
+blurb_id: mcsim_blurb
+gplv3_status: done-in-5.4.0
+last_release: 5.6.6
+last_release_date: 20170122
+last_contact: 29jan11 replied, 29nov10 replied
+activity_status: ok
+last_activity: 20170122
+
+package: mdk
+mundane_name: MIX Development Kit
+copyright_holder: fsf-ok-#787396
+doc_category: Education
+doc_summary: Virtual development environment for Knuth's MIX
+doc_url: /software/mdk/manual/
+blurb_id: mdk_blurb
+doc_shop: GNU MDK
+doc_shop: http://shop.fsf.org/product/gnu-mdk/
+gplv3_status: done-in-1.2.4-21mar08
+last_release: 1.2.9
+last_release_date: 20151228
+activity_status: ok
+last_activity: 20151228
+
+package: mediagoblin
+logo: //mediagoblin.org/images/logo/mediagoblin_dark_medium.png
+language: python
+doc_category: Internet
+doc_summary: Photo and media sharing
+doc_url: http://docs.mediagoblin.org/
+blurb_id: mediagoblin_blurb
+download_url: http://mediagoblin.org/download/
+gplv3_status: ok
+last_release: 0.9.0
+last_release_date: 20160329
+activity_status: ok
+last_activity: 20160329
+
+package: melting
+logo: //www.ebi.ac.uk/biomodels-static/tools/melting/meltingtop.jpg
+doc_category: Science
+doc_summary: Temperature computations for a nucleic acid duplex
+doc_url: http://www.ebi.ac.uk/compneur-srv/melting/melting5-doc/melting.html
+blurb_id: melting_blurb
+download_url: http://www.ebi.ac.uk/compneur-srv/melting/MELTING5.1.1.tar.gz
+gplv3_status: not-done-in-5.0.3
+last_release: 5.2.0
+last_release_date: 20140808
+last_contact: 22feb10 asked
+activity_status: ok
+last_activity: 20140808
+
+package: mempool
+mundane_name: MemPool
+doc_category: Libraries
+doc_summary: Block allocator library
+doc_url: none
+blob_id: mempool_blob
+activity_status: newmaint
+last_activity: 20170621
+
+package: mes
+doc_category: Sysadmin
+doc_summary: Full source bootstrapping for GNU systems
+doc_url: /software/mes/manual/
+gplv3_status: done
+activity_status: newpkg
+last_activity: 20180725
+
+package: metaexchange
+doc_category: Database
+doc_summary: Manipulate metadata from OAI-PMH and Z39.50
+doc_url: /software/metaexchange/#Documentation
+blurb_id: metaexchange_blurb
+gplv3_status: under-discussion (gnumaint-reply 29 Aug 2007 19:26:27)
+note: no-release
+activity_status: newcomaint
+last_activity: 20130404
+
+package: metahtml
+doc_category: Web
+doc_summary: Combining HTML and Lisp, specifically designed for Web servers
+doc_url: http://metahtml.sourceforge.net/documentation/
+blurb_id: metahtml_blurb
+gplv3_status: not-done-since-nomaint
+last_release: 6.11.01
+last_release_date: 20010306
+note: metahtml.org domain expired
+note: used by gcc (only?), Gerald Pfeifer has patches
+note: bfox has some updates to sources on sf, but has not sent
+last_contact: 27nov11 gerald asked, 19jan11 replied, 23feb10 replied
+activity_status: newmaint
+last_activity: 20160926
+
+package: metalogic-inference
+mundane_name: MLI
+doc_category: Mathematics
+doc_summary: Logical proof program
+doc_url: none
+gplv3_status: unknown
+activity_status: newpkg
+last_activity: 20170419
+
+package: mifluz
+doc_category: Libraries
+doc_summary: Full text indexing library
+doc_url: /software/mifluz/doc.en.html
+blurb_id: mifluz_blurb
+gplv3_status: done-in-0.24.0 (7jul08)
+last_release: 0.25.0
+last_release_date: 20140417
+activity_status: ok
+last_activity: 20140417
+
+package: mig
+copyright_holder: see-hurd
+doc_category: Software
+doc_summary: Mach 3.0 interface generator for the Hurd
+doc_url: none
+blurb_id: mig_blurb
+gplv3_status: see-hurd
+last_release: 1.8
+last_release_date: 20161218
+activity_status: ok
+last_activity: 20161218
+
+package: miscfiles
+doc_category: Text
+doc_summary: Data files for airport codes, zip codes, a dictionary, and more
+doc_url: none
+blurb_id: miscfiles_blurb
+gplv3_status: not-applicable (gnumaint-reply 02 Oct 2007 20:11:47)
+last_release: 1.4.2
+last_release_date: 20101116
+last_contact: 17nov10 replied
+activity_status: stale
+last_activity: 20101116
+
+package: mit-scheme
+mundane_name: MIT/GNU Scheme
+logo: /software/mit-scheme/lambda.png
+doc_category: Software
+doc_summary: A Scheme implementation with integrated editor and debugger
+doc_url: /software/mit-scheme/#Documentation
+blurb_id: mit_scheme_blurb
+doc_url: htmlxref
+gplv3_status: needs-exception-#555330
+last_release: stable.pkg/9.2
+last_release_date: 20140521
+activity_status: ok
+last_activity: 20140521
+
+package: moe
+doc_category: Editors
+doc_summary: Modeless, multiple-buffer, user-friendly 8-bit text editor
+doc_url: htmlxref
+blurb_id: moe_blurb
+gplv3_status: done-in-1.0
+last_release: 1.8
+last_release_date: 20160217
+activity_status: ok
+last_activity: 20160217
+
+package: motti
+copyright_holder: fsf-ok-#786712
+doc_category: Games
+doc_summary: Multiplayer strategy game
+doc_url: htmlxref
+blurb_id: motti_blurb
+gplv3_status: done-in-2.5.0.5
+last_release: 3.1.0
+last_release_date: 20140328
+activity_status: ok
+last_activity: 20140328
+
+package: mpc
+doc_category: Mathematics
+doc_summary: C library for arbitrary precision complex arithmetic
+doc_url: http://www.multiprecision.org/downloads/mpc-1.1.0.pdf
+blurb_id: mpc_blurb
+gplv3_status: lgplv3+-as-of-1.0-in-july-2012
+last_release: 1.0.3
+last_release_date: 20150220
+activity_status: ok
+last_activity: 20150220
+
+package: mpfr
+copyright_holder: fsf-ok-#786594
+logo: //www.mpfr.org/mpfr500.png
+doc_category: Mathematics
+doc_summary: C library for arbitrary precision floating-point arithmetic
+doc_url: http://www.mpfr.org/mpfr-current/#doc
+blurb_id: mpfr_blurb
+gplv3_status: lgplv3+-as-of-3.0.0-in-june-2010
+last_release: 3.1.5
+last_release_date: 20160927
+activity_status: ok
+last_activity: 20160927
+
+package: mpria
+doc_category: Mathematics
+doc_summary: C library for arbitrary precision rational arithmetic
+doc_url: none
+blurb_id: mpria_blurb
+gplv3_status: done
+activity_status: newpkg
+last_activity: 20140110
+
+package: mtools
+doc_category: Sysadmin
+doc_summary: Access MS-DOS disks without mounting
+doc_url: /software/mtools/manual/mtools.html
+blurb_id: mtools_blurb
+gplv3_status: done-as-of-4.0.12
+last_release: 4.0.18
+last_release_date: 20130109
+activity_status: stale
+last_activity: 20130109
+
+package: nana
+doc_category: Libraries
+doc_summary: Library for assertions, logging, performance measurement
+doc_url: none
+blurb_id: nana_blurb
+download_url: http://download.savannah.gnu.org/releases/nana/
+gplv3_status: notgpl
+last_release: 2.5
+last_release_date: 19990912
+note: release date from ChangeLog
+note: assert stuff for gcc
+last_contact: 3jul12 jmd asked, 10mar11 asked maintainers with new addr
+activity_status: moribund
+last_activity: 19990912
+
+package: nano
+copyright_holder: fsf-no-reply-#786770
+doc_category: Editors
+doc_summary: Small, user-friendly console text editor
+doc_url: http://www.nano-editor.org/docs.php
+blurb_id: nano_blurb
+gplv3_status: done-in-2.1.4
+last_release: 2.5.0
+last_release_date: 20151206
+activity_status: ok
+last_activity: 20151206
+
+package: nano-archimedes
+doc_category: Science
+doc_summary: Simulation of quantum systems using the Wigner Monte Carlo method
+doc_url: none
+blurb_id: nano_archimedes_blurb
+gplv3_status: unknown
+last_release: 2.0
+last_release_date: 20151110
+activity_status: ok
+last_activity: 20151110
+
+package: ncurses
+copyright_holder: fsf-ok-#786484
+doc_category: Interface
+doc_summary: Terminal emulation (termcap, terminfo) library
+doc_url: none
+blurb_id: ncurses_blurb
+gplv3_status: notgpl
+last_release: 6.0
+last_release_date: 20150809
+last_release: tack-1.06
+last_release_date: 20081108
+note: as a special case, we accepted ncurses as a GNU package under the
++ revised BSD license.
+activity_status: ok
+last_activity: 20150809
+
+package: nettle
+doc_category: Security
+doc_summary: C library for low-level cryptographic functionality
+doc_url: htmlxref
+blurb_id: nettle_blurb
+gplv3_status: lgplv2+-as-of-2.2-9nov10-asked-rms
+last_release: 3.3
+last_release_date: 20161001
+activity_status: ok
+last_activity: 20161001
+
+package: network
+doc_category: Internet
+doc_summary: Initiative to encourage development of free network services
+doc_url: none
+blurb_id: network_blurb
+gplv3_status: ok-since-container
+container: for-gnu-"group"
+activity_status: container
+
+package: ocrad
+doc_category: Text
+doc_summary: Optical character recognition based on feature extraction
+doc_url: htmlxref
+blurb_id: ocrad_blurb
+gplv3_status: done-in-0.17
+last_release: 0.25
+last_release_date: 20150416
+activity_status: ok
+last_activity: 20150416
+
+package: octave
+copyright_holder: notfsf-#786632
+logo: /software/octave/images/logo.png
+doc_category: Mathematics
+doc_summary: High-level language for numerical computation
+doc_url: /software/octave/support.html
+blurb_id: octave_blurb
+gplv3_status: done-in-3.0.1 (licensing #345079)
+last_release: 4.2.0
+last_release_date: 20161117
+activity_status: ok
+last_activity: 20161117
+
+package: oleo
+copyright_holder: fsf-no-reply
+doc_category: Spreadsheets
+doc_summary: Spreadsheet for both terminal and graphical interfaces
+doc_url: /software/oleo/doc/oleo.html
+blurb_id: oleo_blurb
+gplv3_status: not-done-since-newmaint
+last_release: 1.99.16
+last_release_date: 20010310
+last_contact: 1feb13 brandon wrote, 5apr12 replied, 1apr12,19feb12,22jan12 jmd
asked
+activity_status: newmaint
+last_activity: 20100601
+
+package: oo-browser
+mundane_name: OO-Browser
+copyright_holder: notfsf
+doc_category: Interface
+doc_summary: An interactive object-oriented class browser for Emacs
+doc_url: none
+gplv3_status: done-in-5.0
+activity_status: newpkg
+last_activity: 20160810
+
+package: orgadoc
+mundane_name: OrgaDoc
+doc_category: Text
+doc_summary: Eiffel program to maintain and query documents across machines
+doc_url: /software/orgadoc/manual/
+blurb_id: orgadoc_blurb
+gplv3_status: not-done-since-stale
+last_release: 0.8
+last_release_date: 20040331
+last_contact: 1mar10 resign
+activity_status: newmaint
+last_activity: 20170421
+
+package: osip
+mundane_name: oSIP
+copyright_holder: notfsf
+logo: /software/osip/osip-logo-60p.png
+doc_category: Libraries
+doc_summary: Library implementing SIP (RFC-3261)
+doc_url: /software/osip/doc/html/
+blurb_id: osip_blurb
+gplv3_status: not-done-in-3.2.0
+last_release: libosip2-4.1.0
+last_release_date: 20140106
+activity_status: stale
+last_activity: 20140106
+
+package: panorama
+doc_category: Graphics
+doc_summary: Framework for 3D graphics production
+doc_url: none
+blurb_id: panorama_blurb
+download_url: http://sourceforge.net/project/showfiles.php?group_id=7862
+gplv3_status: not-done-since-stale
+last_release: 0.18
+last_release_date: 20030211
+last_contact: 11may09 asked
+activity_status: stale
+last_activity: 20030211
+
+package: parallel
+logo: /software/parallel/logo.png
+copyright_holder: notfsf
+doc_category: Sysadmin
+doc_summary: Build and execute command lines in parallel
+doc_url: /software/parallel/man.html
+blurb_id: parallel_blurb
+gplv3_status: done-in-20100424
+last_release: 20160922
+last_release_date: 20160922
+activity_status: ok
+last_activity: 20160922
+
+package: parted
+copyright_holder: fsf-no-reply
+doc_category: Sysadmin
+doc_summary: Disk partition editor
+doc_url: /software/parted/manual/
+blurb_id: parted_blurb
+gplv3_status: done-in-1.8.8 (gnumaint-reply 20 Aug 2007 21:13:48 -0400)
+last_release: 3.2
+last_release_date: 20140728
+activity_status: ok
+last_activity: 20140728
+
+package: pascal
+copyright_holder: fsf-ok-#787589
+logo: //www.gnu-pascal.de/images/GnuPascal-small.png
+doc_category: Software
+doc_summary: GNU Pascal compiler
+doc_url: htmlxref
+blurb_id: pascal_blurb
+download_url: http://www.gnu-pascal.de/alpha/
+gplv3_status: done-as-of-2007-09-04-per-email
+last_contact: 23feb09 replied
+activity_status: moribund
+last_activity: 20050331
+
+package: patch
+doc_category: Software
+doc_summary: Apply differences to originals, with optional backups
+doc_url: /software/diffutils/manual/#Invoking-patch
+blurb_id: patch_blurb
+gplv3_status: done-as-of-2.6.1
+last_release: 2.7.5
+last_release_date: 20150306
+activity_status: ok
+last_activity: 20150306
+
+package: paxutils
+copyright_holder: fsf-ok-#786468
+doc_category: Archiving
+doc_summary: Manage cpio, tar, and pax file archives
+doc_url: none
+blurb_id: paxutils_blurb
+download_url: ftp://alpha.gnu.org/gnu/paxutils/
+note: http://alpha.gnu.org/gnu/paxutils/paxutils-2.4h.tar.gz
+gplv3_status: not-done-since-stale-maintainer-busy
+last_release: 2.4h
+last_release_date: 19990611
+last_contact: 9dec12 replied "soon", 4feb09 replied, autumn09
+activity_status: stale
+last_activity: 19990611
+
+package: pcb
+doc_category: Science
+doc_summary: Design printed circuit board layouts
+doc_url: none
+blurb_id: pcb_blurb
+download_url: http://sourceforge.net/project/showfiles.php?group_id=73743
+gplv3_status: not-done-in-20100929
+last_release: 20100929
+last_release_date: 20100929
+last_contact: 2jul12,2dec10,4mar10,24mar09 asked
+activity_status: stale
+last_activity: 20100929
+
+package: pdf
+copyright_holder: fsf-ok-#786934
+doc_category: Printing
+doc_summary: Library and programs for manipulating PDF
+doc_url: none
+blurb_id: pdf_blurb
+gplv3_status: not-done-since-no-release
+note: no-release
+activity_status: stale
+
+package: pem
+doc_category: Business
+doc_summary: Personal expenses manager
+doc_url: none
+blurb_id: pem_blurb
+gplv3_status: done-in-0.7.8
+last_release: 0.7.9
+last_release_date: 20110815
+activity_status: stale
+last_activity: 20110815
+
+package: pexec
+doc_category: Software
+doc_summary: Execute a command in parallel on multiple hosts
+doc_url: /software/pexec/pexec.1.html
+blurb_id: pexec_blurb
+#old download_url: http://sourceforge.net/project/showfiles.php?group_id=210655
+gplv3_status: done-as-of-1.0rc8
+last_release: 1.0rc8
+last_release_date: 20090914
+activity_status: stale
+last_activity: 20090914
+
+package: pgccfd
+mundane_name: Porting GCC for Dunces
+doc_category: Software
+doc_summary: Guide on porting the GNU compiler to new platforms
+doc_url: none
+blurb_id: pgccfd_blurb
+download_url: ftp://ftp.axis.se/pub/users/hp/pgccfd/
+gplv3_status: needs-fdl-update-nomaint
+last_release: 0.5
+last_release_date: 20130303
+activity_status: newmaint
+last_activity: 20130303
+
+package: phantom_home
+mundane_name: Phantom.Home
+doc_category: Interface
+doc_summary: Computer-controlled home automation
+doc_url: none
+blurb_id: phantom_home_blurb
+download_url: http://ftp.gnu.org/gnu/phantom/home/
+gplv3_status: not-done-since-stale
+last_release: 1.0
+last_release_date: 20000628
+activity_status: stale
+last_activity: 20000628
+
+package: pies
+doc_category: Software
+doc_summary: Program invocation and execution supervisor
+doc_url: http://www.gnu.org.ua/software/pies/manual.html
+blurb_id: pies_blurb
+gplv3_status: done-as-of-1.2
+last_release: 1.3
+last_release_date: 20161001
+activity_status: ok
+last_activity: 20161001
+
+package: pipo
+download_url: http://maddingue.free.fr/softwares/download/GNU-PipoBBS/
+doc_category: Internet
+doc_summary: Bulletin board system
+doc_url: none
+blurb_id: pipo_blurb
+gplv3_status: not-done-since-stale
+last_contact: 9mar10 asked
+last_release: 0.20
+last_release_date: 19990528
+activity_status: stale
+last_activity: 19990528
+
+package: plotutils
+copyright_holder: fsf-no-reply
+doc_category: Graphics
+doc_summary: Plotting utilities and library
+doc_url: none
+blurb_id: plotutils_blurb
+gplv3_status: done-in-2.6
+last_release: 2.6
+last_release_date: 20090926
+activity_status: stale
+last_activity: 20090926
+
+package: polyxmass
+doc_category: Science
+doc_summary: Mass spectrometric data simulations and analyses
+doc_url: none
+blurb_id: polyxmass_blurb
+download_url: http://debian.cs.binghamton.edu/debian/pool/main/p/polyxmass/
+gplv3_status: not-done-since-nomaint
+note: other polyxmass-* directories there too.
+activity_status: newmaint
+last_activity: 20160314
+
+package: powerguru
+copyright_holder: fsf-ok-#786472
+mundane_name: PowerGuru
+doc_category: Interface
+doc_summary: Monitoring, logging, and remote control of power generation
+doc_url: /software/powerguru/#documentation
+blurb_id: powerguru_blurb
+gplv3_status: in-dev-sources
+note: no-release
+activity_status: newcomaint
+last_activity: 20130404
+
+package: proxyknife
+doc_category: Internet
+doc_summary: Customizable multithread proxy hunter
+doc_url: /software/proxyknife/manual/
+blurb_id: proxyknife_blurb
+gplv3_status: done-in-1.7 (gnumaint-reply 24 Sep 2007 22:54:49 +0800)
+last_release: 1.7
+last_release_date: 20070924
+activity_status: stale
+last_activity: 20070924
+
+package: pspp
+mundane_name: PSPP
+copyright_holder: fsf-ok-with-external-#786643
+logo: /software/pspp/pspplogo.png
+doc_category: Mathematics
+doc_summary: Statistical analysis
+doc_url: /software/pspp/manual/
+blurb_id: pspp_blurb
+gplv3_status: done-in-0.4.0.1
+last_release: 0.10.2
+last_release_date: 20160723
+activity_status: ok
+last_activity: 20160723
+
+package: psychosynth
+doc_category: Music
+doc_summary: Interactive software synthesizer
+doc_url: http://www.psychosynth.com/index.php?title=Documentation
+blurb_id: psychosynth_blurb
+gplv3_status: done-as-of-0.1.5
+last_release: 0.3.0
+last_release_date: 20120402
+activity_status: stale
+last_activity: 20120402
+
+package: pth
+logo: /software/pth/pth.jpg
+doc_category: Libraries
+doc_summary: Portable thread library
+doc_url: /software/pth/pth-manual.html
+blurb_id: pth_blurb
+gplv3_status: next-release rms
+last_release: 2.0.7
+last_release_date: 20060608
+last_contact: 3dec11 replied, 10mar11 asked (rms gave up), 4jan11 to rms,
12mar10 asked, 1jun09 replied
+activity_status: stale
+last_activity: 20060608
+
+package: pyconfigure
+language: python
+language: autoconf
+doc_category: Software
+doc_summary: Configure interface for Python-based packages
+doc_url: /software/pyconfigure/manual/
+blurb_id: pyconfigure_blurb
+gplv3_status: stays-lgplv2-indefinitely (rms 26 Sep 2010 06:37:43)
+last_release: 0.2.3
+last_release_date: 20160420
+activity_status: ok
+last_activity: 20160420
+
+package: pythonwebkit
+language: python
+doc_category: Software
+doc_summary: W3C DOM bindings to Webkit for use with GTK and more
+doc_url: none
+blurb_id: pythonwebkit_blurb
+gplv3_status: stays-lgplv2-indefinitely (rms 26 Sep 2010 06:37:43)
+note: no-release
+last_contact: 17feb13 no release (urged doing so)
+activity_status: newmaint
+last_activity: 20100926
+
+package: qexo
+doc_category: Software
+doc_summary: Java implementation of XQuery using GNU Kawa
+doc_url: /software/qexo/#Documentation
+blurb_id: qexo_blurb
+download_url: http://ftp.gnu.org/gnu/kawa/
+gplv3_status: notgpl
+note: see kawa
+last_contact: see kawa
+activity_status: subpkg
+
+package: quickthreads
+doc_category: Libraries
+doc_summary: Thread library
+doc_url: none
+blurb_id: quickthreads_blurb
+gplv3_status: not-done-since-nomaint
+last_release: 1.6.8
+last_release_date: 20060528
+last_contact: 12mar10 asked, 23jul09 awaiting code,
+note: used to be part of guile, but dropped in guile 1.8.0
+activity_status: nomaint
+last_activity: 20060528
+
+package: r
+logo: //www.r-project.org/Rlogo.jpg
+doc_category: Mathematics
+doc_summary: Environment for statistical computing and graphics
+doc_url: http://cran.r-project.org/#doc
+blurb_id: r_blurb
+download_url: http://stat.ethz.ch/CRAN/src/base/
+gplv3_status: not-done-as-of-2.10.1 (ticket 319866?)
+last_release: 3.2.0
+last_release_date: 20150416
+activity_status: ok
+last_activity: 20150416
+
+package: radius
+copyright_holder: fsf-no-reply
+doc_category: Security
+doc_summary: Authentication and accounting services and daemon
+doc_url: /software/radius/manual/
+blurb_id: radius_blurb
+gplv3_status: done-in-1.6
+last_release: 1.6.1
+last_release_date: 20081217
+activity_status: stale
+last_activity: 20081217
+
+package: rcs
+mundane_name: RCS
+copyright_holder: notfsf-tichy-eggert-nguyen-#786470
+doc_category: Version
+doc_summary: Per-file local revision control system
+doc_url: /software/rcs/manual/
+blurb_id: rcs_blurb
+gplv3_status: not-done-since-stale
+last_release: 5.9.4
+last_release_date: 20150122
+activity_status: ok
+last_activity: 20150122
+
+package: readline
+copyright_holder: fsf-ok-with-examples-#790941
+doc_category: Editors
+doc_summary: Edit command lines while typing, with history support
+doc_url: htmlxref
+blurb_id: readline_blurb
+gplv3_status: done-in-4.0
+last_release: 7.0
+last_release_date: 20160917
+activity_status: ok
+last_activity: 20160917
+
+package: recutils
+logo: /software/recutils/logo.png
+doc_category: Database
+doc_summary: Manipulate plain text files as databases
+doc_url: /software/recutils/manual/
+blurb_id: recutils_blurb
+gplv3_status: done
+last_release: 1.6
+last_release_date: 20140324
+activity_status: ok
+last_activity: 20140324
+
+package: reftex
+copyright_holder: see-auctex
+doc_category: Text
+doc_summary: Emacs support for LaTeX cross-references of all kinds
+doc_url: /software/auctex/manual/reftex.index.html
+blurb_id: reftex_blurb
+gplv3_status: done-in-4.33
+last_release: 4.34
+last_release_date: 20090809
+activity_status: stale
+last_activity: 20090809
+
+package: remotecontrol
+copyright_holder: notfsf
+logo: /software/remotecontrol/GNU_remotecontrol_CIRCLE.png
+doc_category: Interface
+doc_summary: Management of IP-enabled thermostats and other HVAC devices
+doc_url: /software/remotecontrol/manual/
+blurb_id: remotecontrol_blurb
+gplv3_status: done-from-start
+last_release: 2.0
+last_release_date: 20160425
+activity_status: ok
+last_activity: 20160425
+
+package: jami
+alias: ring
+doc_category: Live
+doc_summary: A privacy-respecting communication program
+doc_url: none
+gplv3_status: done-from-start
+activity_status: newpkg
+last_activity: 20161018
+
+package: rottlog
+doc_category: Sysadmin
+doc_summary: Log rotation and management
+doc_url: /software/rottlog/manual/
+blurb_id: rottlog_blurb
+gplv3_status: done-in-0.71.2
+last_release: 0.72.2
+last_release_date: 20100330
+activity_status: newmaint
+last_activity: 20130724
+
+package: rpge
+doc_category: Games
+doc_summary: Role playing game engine
+doc_url: none
+blurb_id: rpge_blurb
+gplv3_status: done-in-0.0.1
+last_release: 0.0.3
+last_release_date: 20140106
+note: revived 6jan14, was gone 22may13 per inaction+leg
+activity_status: stale
+last_activity: 20140106
+
+package: rush
+doc_category: Software
+doc_summary: Restricted user (login) shell
+doc_url: http://puszcza.gnu.org.ua/software/rush/manual.html
+blurb_id: rush_blurb
+gplv3_status: done-in-1.5
+last_release: 1.8
+last_release_date: 20161001
+activity_status: ok
+last_activity: 20161001
+
+package: sather
+doc_category: Software
+doc_summary: An object-oriented language designed to be simple, efficient, safe
+doc_url: /software/sather/#doc
+blurb_id: sather_blurb
+gplv3_status: done-in-1.2.3
+last_release: 1.2.3
+last_release_date: 20070707
+last_contact: 20feb13 replied, 19feb13 asked, 14apr12 asked
+activity_status: newmaint
+last_activity: 20120305
+
+package: scm
+mundane_name: SCM
+copyright_holder: fsf-ok-#786490
+language: c
+logo: //people.csail.mit.edu/jaffer/Logo/SCM_64.png
+doc_category: Software
+doc_summary: A Scheme implementation
+doc_url: http://people.csail.mit.edu/jaffer/scm_toc.html
+blurb_id: scm_blurb
+other_download_url: http://people.csail.mit.edu/jaffer/SCM.html
+gplv3_status: done-without-exception-#502112-lgpl-but-done-in-scm-5e5
(info-gnu 4 Feb 2008 00:27:30)
+last_release: 5f2
+last_release_date: 20150116
+activity_status: ok
+last_activity: 20150116
+
+package: screen
+copyright_holder: notfsf-Juergen Weigert, Michael Schroeder, Oliver Laumann,
et al.
+doc_category: Software
+doc_summary: Full-screen window manager providing multiple terminals
+doc_url: /software/screen/manual/
+blurb_id: screen_blurb
+gplv3_status: not-done-in-4.0.3
+last_release: 4.5.0
+last_release_date: 20170118
+activity_status: ok
+last_activity: 20170118
+
+package: sed
+copyright_holder: fsf-ok-#786533
+doc_category: Text
+doc_summary: Stream editor
+doc_url: /software/sed/manual/
+blurb_id: sed_blurb
+gplv3_status: done-in-4.2
+last_release: 4.3
+last_release_date: 20170104
+activity_status: ok
+last_activity: 20170104
+
+package: serveez
+logo: /software/serveez/logo.jpg
+doc_category: Sysadmin
+doc_summary: Framework for implementing IP-based servers
+doc_url: /software/serveez/manual/
+blurb_id: serveez_blurb
+gplv3_status: not-done-in-0.1.7
+last_release: 0.2.2
+last_release_date: 20131202
+activity_status: stale
+last_activity: 20131202
+
+package: sharutils
+copyright_holder: fsf-ok-with-external-29dec-mail
+doc_category: Archiving
+doc_summary: Archives in shell scripts, uuencode/uudecode
+doc_url: /software/sharutils/manual/
+blurb_id: sharutils_blurb
+gplv3_status: done-in-4.7
+last_release: 4.15.2
+last_release_date: 20150530
+activity_status: ok
+last_activity: 20150530
+
+package: shepherd
+copyright_holder: fsf-no-reply-individual-name-in-files
+doc_category: Sysadmin
+doc_summary: System service manager
+doc_url: none
+blurb_id: shepherd_blurb
+gplv3_status: not-done-in-0.5
+download_url: http://www.wt-lorsch.de/dmd--0.5.tar.gz
+last_release: 0.5
+# The exact last release date (as GNU dmd) is not known
+last_release_date: 20030101
+activity_status: newmaint
+last_activity: 20130925
+
+package: shishi
+copyright_holder: notfsf
+logo: /software/shishi/shishi.png
+doc_category: Internet
+doc_summary: Implementation of the Kerberos 5 network security system
+doc_url: /software/shishi/#status
+blurb_id: shishi_blurb
+gplv3_status: done-in-alpha-releases
+last_release: 1.0.2
+last_release_date: 20120403
+activity_status: stale
+last_activity: 20120403
+
+package: shmm
+doc_category: Software
+doc_summary: Shared memory manager utility
+doc_url: none
+blurb_id: shmm_blurb
+gplv3_status: done-in-1.0
+last_release: 1.0
+last_release_date: 20080628
+activity_status: stable
+last_activity: 20080628
+
+package: shtool
+doc_category: Software
+doc_summary: Compilation of utility shell scripts into a shell tool
+doc_url: none
+blurb_id: shtool_blurb
+gplv3_status: not-done rms
+last_release: 2.0.8
+last_release_date: 20080718
+last_contact: see pth
+note: pending (l)gplv3, current address, rationalE?, info-gnu announcement
+activity_status: stale
+last_activity: 20080718
+
+package: sipwitch
+doc_category: Telephony
+doc_summary: Secure peer-to-peer VoIP server for the SIP protocol
+doc_url: /software/sipwitch/sipwitch.html#documentation
+blurb_id: sipwitch_blurb
+gplv3_status: done-in-0.1
+last_release: 1.9.15
+last_release_date: 20151213
+activity_status: ok
+last_activity: 20151213
+
+package: slib
+mundane_name: SLIB
+doc_category: Software
+doc_summary: Portable library for Scheme
+doc_url: http://people.csail.mit.edu/jaffer/slib/index.html
+blurb_id: slib_blurb
+logo: //people.csail.mit.edu/jaffer/Logo/SLIB_64.png
+other_download_url: http://groups.csail.mit.edu/mac/ftpdir/scm/
+gplv3_status: done-since-public-domain (licensing 341650, 20 Aug 2007 21:16:08)
+last_release: 3b5
+last_release_date: 20150116
+activity_status: ok
+last_activity: 20150116
+
+package: smalltalk
+copyright_holder: fsf-ok-with-external-#786531
+doc_category: Software
+doc_summary: Smalltalk environment
+doc_url: http://smalltalk.gnu.org/documentation
+blurb_id: smalltalk_blurb
+doc_url: htmlxref
+logo: //smalltalk.gnu.org/files/gst_logo.png
+gplv3_status: needs-exception-#362488, brett 29 Oct 2009 18:02:27
+last_release: 3.2.5
+last_release_date: 20130407
+note: html manuals are constructed ok, but have generic names ("manual")
+activity_status: stale
+last_activity: 20130407
+
+package: social
+doc_category: Internet
+doc_summary: Decentralized social networking server
+doc_url: none
+blurb_id: social_blurb
+gplv3_status: not-done-since-no-release
+note: no-release
+activity_status: stale
+last_activity: 20100313
+
+package: solfege
+doc_category: Music
+doc_summary: Ear training
+doc_url: none
+logo: //www.solfege.org/static/logo.png
+blurb_id: solfege_blurb
+gplv3_status: done-in-3.10.3
+last_release: 3.22.2
+last_release_date: 20140318
+activity_status: newmaint
+last_activity: 20140318
+
+package: spacechart
+mundane_name: SpaceChart
+copyright_holder: fsf-no-reply
+doc_category: Science
+doc_summary: Stargazing in 3D under GNOME
+doc_url: none
+blurb_id: spacechart_blurb
+gplv3_status: not-done-since-stale
+last_release: 0.9.5
+last_release_date: 20021206
+last_contact: 21mar10,14feb09 asked
+activity_status: stale
+last_activity: 20021206
+
+package: speex
+logo: //www.speex.org/images/logos/parrot_speex_org-3.png
+doc_category: Audio
+doc_summary: Library for patent-free audio compression format
+doc_url: http://www.speex.org/docs/
+blurb_id: speex_blurb
+download_url: http://downloads.xiph.org/releases/speex/
+gplv3_status: notgpl
+last_release: 1.2rc1
+last_release_date: 20080724
+activity_status: stable
+last_activity: 20080724
+
+package: spell
+copyright_holder: fsf-ok-#786524
+doc_category: Text
+doc_summary: Spell checking
+doc_url: none
+blurb_id: spell_blurb
+gplv3_status: not-done-since-stale
+last_release: 1.1
+last_release_date: 20110721
+activity_status: stale
+last_activity: 20110721
+
+package: sqltutor
+copyright_holder: fsf-ok-with-external-#787535
+doc_category: Database
+doc_summary: Interactively learn SQL by example
+doc_url: /software/sqltutor/manual/
+blurb_id: sqltutor_blurb
+gplv3_status: done-as-of-0.6
+last_release: 0.7
+last_release_date: 20140601
+activity_status: ok
+last_activity: 20140601
+
+package: src-highlite
+search_alias: source-highlight
+doc_category: Text
+doc_summary: Produce a document with syntax highlighting from a source file
+doc_url: htmlxref
+blurb_id: src_highlite_blurb
+gplv3_status: done-in-2.8
+last_release: source-highlight-3.1.8
+last_release_date: 20150330
+activity_status: ok
+last_activity: 20150330
+
+package: ssw
+mundane_name: Spread Sheet Widget
+doc_category: Spreadsheets
+doc_summary: Gtk+ widget for viewing and manipulating tabular data
+doc_url: none
+gplv3_status: done
+activity_status: newpkg
+last_activity: 20170525
+
+package: stalkerfs
+copyright_holder: fsf-no-reply
+doc_category: Interface
+doc_summary: Desktop search engine for local files, using FUSE
+doc_url: none
+blurb_id: stalkerfs_blurb
+gplv3_status: in-dev-sources (gnumaint-reply 21 Aug 2007 18:41:09 +0200)
+note: no-release
+activity_status: stale
+
+package: stow
+doc_category: Sysadmin
+doc_summary: Managing installed software packages
+doc_url: /software/stow/manual/
+blurb_id: stow_blurb
+gplv3_status: not-done-since-stale
+last_release: 2.2.2
+last_release_date: 20151109
+activity_status: ok
+last_activity: 20151109
+
+package: stump
+logo: //www.algebra.com/~ichudov/images/active/stump.jpg
+doc_category: Internet
+doc_summary: Secure team-based Usenet moderation program
+doc_url: none
+blurb_id: stump_blurb
+download_url: http://www.algebra.com/~ichudov/stump/
+gplv3_status: not-done-since-stale
+last_release: 2.5
+last_release_date: 20000622
+last_contact: 9dec10 asked, 24mar10 asked, 16mar09 replied
+activity_status: stable
+last_activity: 20000622
+
+package: superopt
+copyright_holder: fsf-no-reply
+doc_category: Software
+doc_summary: Super-optimizer of given functions
+doc_url: none
+blurb_id: superopt_blurb
+gplv3_status: not-done-since-stale
+last_release: 2.5
+last_release_date: 19950614
+note: maintainers@ received patch from ttn, 04 Jan 2014 13:33:11.
+activity_status: newmaint
+last_activity: 20150624
+
+package: swbis
+doc_category: Software
+doc_summary: POSIX software packaging utilities
+doc_url: htmlxref
+blurb_id: swbis_blurb
+gplv3_status: done-in-0.951 (20apr08)
+last_release: 1.12
+last_release_date: 20140803
+activity_status: ok
+last_activity: 20140803
+
+package: sysutils
+copyright_holder: fsf-no-reply
+doc_category: Sysadmin
+doc_summary: Standard system administration utilities: passwd, chsh, and more
+doc_url: none
+blurb_id: sysutils_blurb
+download_url: http://download.savannah.gnu.org/releases/sysutils/
+gplv3_status: not-done-since-stale
+last_release: 0.1.5
+last_release_date: 20060329
+last_contact: 19jan11 asked, 26mar10 asked
+note: real maintainer is David Weinhall <address@hidden>
+activity_status: nomaint
+last_activity: 20150322
+
+package: taler
+doc_category: Business
+doc_summary: Electronic payments for a liberal society
+doc_url: none
+blurb_id: taler_blurb
+gplv3_status: done-from-beginning
+last_release: 0.0.0
+last_release_date: 20160603
+activity_status: ok
+last_activity: 20160603
+
+package: talkfilters
+doc_category: Games
+doc_summary: Convert English text to humorous dialects
+doc_url: http://www.hyperrealm.com/talkfilters/talkfilters.pdf
+blurb_id: talkfilters_blurb
+download_url: http://www.hyperrealm.com/talkfilters/
+gplv3_status: not-done-in-2.3.8 # 27mar10 replied
+last_release: 2.3.8
+last_release_date: 20071228
+activity_status: stable
+last_activity: 20071228
+
+package: tar
+copyright_holder: fsf-ok-#786475
+doc_category: Archiving
+doc_summary: Managing tar archives
+doc_url: /software/tar/manual/
+blurb_id: tar_blurb
+gplv3_status: done-in-1.21
+last_release: 1.29
+last_release_date: 20150516
+activity_status: ok
+last_activity: 20150516
+
+package: termcap
+copyright_holder: fsf-ok-#786501
+doc_category: Interface
+doc_summary: Terminal-independent display support
+doc_url: /software/termutils/manual/termcap-1.3/termcap.html
+blurb_id: termcap_blurb
+gplv3_status: not-done-since-stale-and-not-updated-in-emacs
+last_release: 1.3.1
+last_release_date: 20020313
+last_contact: see termutils
+activity_status: stable
+last_activity: 20020313
+
+package: termutils
+copyright_holder: fsf-ok-#786502
+doc_category: Interface
+doc_summary: The tput and tabs utilities for terminal operations
+doc_url: /software/termutils/manual/termutils-2.0/tput.html
+blurb_id: termutils_blurb
+gplv3_status: not-done-since-stale-and-move-to-ncurses
+last_release: 2.0
+last_release_date: 19951201
+last_contact: 8nov10 asked, 23feb09 replied/asked
+activity_status: stable
+last_activity: 19951201
+
+package: teseq
+doc_category: Software
+doc_summary: Analyze files with terminal control sequences, for debugging
+doc_url: /software/teseq/manual/
+blurb_id: teseq_blurb
+gplv3_status: done-in-1.0.0
+last_release: 1.1.1
+last_release_date: 20150814
+activity_status: ok
+last_activity: 20150814
+
+package: teximpatient
+mundane_name: TeX for the Impatient
+copyright_holder: notfsf
+doc_category: Text
+doc_summary: Book on TeX, plain TeX, and Eplain
+doc_url: none
+blurb_id: teximpatient_blurb
+gplv3_status: doc
+download_url: ftp://tug.org/tex/impatient/
+last_release: 2.3
+last_release_date: 20130530
+activity_status: newmaint
+last_activity: 20160321
+
+package: texinfo
+copyright_holder: fsf-ok
+doc_category: Text
+doc_summary: The GNU documentation format
+doc_url: /software/texinfo/manual/
+blurb_id: texinfo_blurb
+doc_url: htmlxref
+gplv3_status: done-#502113
+last_release: 6.3
+last_release_date: 20160910
+activity_status: ok
+last_activity: 20160910
+
+package: texmacs
+mundane_name: TeXmacs
+gplv3_status: not-done-in-1.0.7
+doc_category: Text
+doc_summary: Editing platform with special features for scientists
+doc_url: none
+blurb_id: texmacs_blurb
+download_url: http://www.texmacs.org/tmweb/download/sources.en.html
+last_release: 1.99.4
+last_release_date: 20151218
+activity_status: ok
+last_activity: 20151218
+
+package: thales
+doc_category: Software
+doc_summary: Unit test framework for Guile
+doc_url: htmlxref
+blurb_id: thales_blurb
+gplv3_status: unknown
+last_release: 1.99
+last_release_date: 20140319
+activity_status: ok
+last_activity: 20140319
+
+package: time
+copyright_holder: fsf-ok-#786500
+doc_category: Sysadmin
+doc_summary: Run a command, then display its resource usage
+doc_url: none
+blurb_id: time_blurb
+gplv3_status: not-done-since-stale
+last_release: 1.7.2
+last_release_date: 20150123
+last_contact: 16feb13 replied on bug-gnu-utils, no eta; 14oct11 replied,
13jan11 replied-within-a-month
+activity_status: ok
+last_activity: 20150123
+
+package: tramp
+mundane_name: TRAMP
+copyright_holder: fsf-ok-#786547
+doc_category: Interface
+doc_summary: Transparent Remote Access, Multiple Protocol GNU Emacs package
+doc_url: htmlxref
+blurb_id: tramp_blurb
+gplv3_status: done-in-2.1.14
+last_release: 2.2.11
+last_release_date: 20141229
+activity_status: ok
+last_activity: 20141229
+
+package: trans-coord
+copyright_holder: fsf-ok
+fsd: none
+doc_category: Translation
+doc_summary: Organizational infrastructure for translating www.gnu.org
+doc_url: /software/trans-coord/manual/
+blurb_id: trans_coord_blurb
+gplv3_status: ok-since-container
+container: for-gnun
+note: savannah project for www.gnu.org translation coordination
+activity_status: container
+
+package: trueprint
+doc_category: Printing
+doc_summary: Pretty-print C sources and other plain text to PostScript
+doc_url: none
+blurb_id: trueprint_blurb
+gplv3_status: unknown
+last_release: 5.4
+last_release_date: 20130311
+activity_status: newmaint
+last_activity: 20140305
+
+package: unifont
+copyright_holder: notfsf
+doc_category: Fonts
+doc_summary: Large bitmap font covering Unicode's Basic Multilingual Plane
+doc_url: none
+blurb_id: unifont_blurb
+gplv3_status: stays-gplv2+-per-author-and-rms
+last_release: 9.0.06
+last_release_date: 20161223
+activity_status: ok
+last_activity: 20161223
+
+package: units
+copyright_holder: fsf-no-reply
+doc_category: Science
+doc_summary: Conversion between thousands of scales
+doc_url: /software/units/manual/
+blurb_id: units_blurb
+gplv3_status: done (gnumaint-reply 26 Sep 2007 21:58:19)
+last_release: 2.11
+last_release_date: 20140402
+activity_status: ok
+last_activity: 20140402
+
+package: unrtf
+mundane_name: UnRTF
+gplv3_status: done-in-0.20.5
+doc_category: Text
+doc_summary: Convert Rich Text Format documents to other formats
+doc_url: none
+blurb_id: unrtf_blurb
+last_release: 0.21.9
+last_release_date: 20150102
+activity_status: ok
+last_activity: 20150102
+
+package: userv
+doc_category: Security
+doc_summary: Daemon to control service access
+doc_url: http://www.chiark.greenend.org.uk/~ian/userv/spec.html/
+blurb_id: userv_blurb
+gplv3_status: under-discussion-system-component (gnumaint-reply 21 Aug 2007
11:55:17 +0100)
+last_release: 1.2.0
+last_release_date: 20170123
+last_contact: 19feb13 maybe soon; see adns
+activity_status: ok
+last_activity: 20170123
+
+package: uucp
+copyright_holder: notfsf-#786532
+mundane_name: UUCP
+doc_category: Sysadmin
+doc_summary: UUCP protocol implementation
+doc_url: none
+blurb_id: uucp_blurb
+gplv3_status: not-done-since-stale
+last_release: 1.07
+last_release_date: 20030603
+last_contact: 9jan11 asked, 3apr10 asked, 19may09 replied
+activity_status: newmaint
+last_activity: 20131008
+
+package: vc-dwim
+fsd: vcdwim
+doc_category: Version
+doc_summary: Version-control-agnostic ChangeLog diff and commit tool
+doc_url: /software/vc-dwim/manual/
+blurb_id: vc_dwim_blurb
+gplv3_status: done-as-of-1.2
+last_release: 1.8
+last_release_date: 20170114
+activity_status: ok
+last_activity: 20170114
+
+package: vcdimager
+mundane_name: VCDImager
+doc_category: Video
+doc_summary: Authoring, disassembling and analyzing (super and) video CDs
+doc_url: none
+blurb_id: vcdimager_blurb
+gplv3_status: under-discussion (4nov07)
+last_release: 0.7.24
+last_release_date: 20110317
+activity_status: stale
+last_activity: 20110317
+
+package: vera
+copyright_holder: notfsf
+doc_category: Dictionaries
+doc_summary: List of acronyms
+doc_url: none
+blurb_id: vera_blurb
+gplv3_status: doc
+last_release: 1.22
+last_release_date: 20140925
+activity_status: ok
+last_activity: 20140925
+
+package: vmgen
+copyright_holder: see-gforth
+doc_category: Software
+doc_summary: Generic virtual machine generation, used by gforth
+doc_url: none
+blurb_id: vmgen_blurb
+download_url: http://ftp.gnu.org/gnu/gforth/
+gplv3_status: in-dev-sources (gnumaint-reply 31 Dec 2007 20:31:05)
+last_release: gforth-0.7.3
+last_release_date: 20140709
+note: vmgen is distributed as part of gforth
+activity_status: ok
+last_activity: 20140709
+
+package: wb
+mundane_name: WB
+logo: //people.csail.mit.edu/jaffer/TreeRoot96.jpg
+doc_category: Libraries
+doc_summary: Disk-based associative array B-tree database library
+doc_url: http://people.csail.mit.edu/jaffer/wb_toc.html
+blurb_id: wb_blurb
+other_download_url: http://groups.csail.mit.edu/mac/ftpdir/scm/
+gplv3_status: done-without-exception-#502112-but-done-in-wb2a2 (info-gnu 4 Feb
2008 00:29:22)
+last_release: 2b3
+last_release_date: 20150116
+activity_status: ok
+last_activity: 20150116
+
+package: wdiff
+copyright_holder: fsf-no-reply
+doc_category: Text
+doc_summary: Word difference finder
+doc_url: /software/wdiff/manual/
+blurb_id: wdiff_blurb
+gplv3_status: done-in-0.6.0
+last_release: 1.2.2
+last_release_date: 20140414
+activity_status: ok
+last_activity: 20140414
+
+package: websocket4j
+language: java
+doc_category: Internet
+doc_summary: WebSocket protocol implementation for Java-HTML5 communication
+doc_url: /software/websocket4j/manual/
+blurb_id: websocket4j_blurb
+gplv3_status: done
+last_release: 1.3
+last_release_date: 20101024
+activity_status: stale
+last_activity: 20101024
+
+package: webstump
+mundane_name: WebSTUMP
+doc_category: Internet
+doc_summary: Web interface to STUMP
+doc_url: none
+blurb_id: webstump_blurb
+download_url: http://www.algebra.com/~ichudov/stump/
+gplv3_status: see-stump
+note: approx. last_activity 1999
+last_contact: see stump
+activity_status: stable
+
+package: wget
+copyright_holder: fsf-ok-#786732
+doc_category: Internet
+doc_summary: Non-interactive command-line utility for downloading files
+doc_url: /software/wget/manual/
+blurb_id: wget_blurb
+gplv3_status: done-in-1.11
+last_release: 1.18
+last_release_date: 20160609
+activity_status: ok
+last_activity: 20160609
+
+package: which
+copyright_holder: notfsf
+doc_category: Sysadmin
+doc_summary: Find full path of shell commands
+doc_url: none
+blurb_id: which_blurb
+gplv3_status: done-in-2.19
+last_release: 2.21
+last_release_date: 20150320
+activity_status: stable
+last_activity: 20150320
+
+package: womb
+copyright_holder: fsf-ok
+doc_category: Software
+doc_summary: Repository for GNU work not intended to be separate packages
+doc_url: none
+blurb_id: womb_blurb
+gplv3_status: in-dev-sources (aug07)
+note: released-through-vc
+activity_status: ok
+
+package: xaos
+mundane_name: XaoS
+doc_category: Graphics
+doc_summary: Real-time fractal zoomer
+doc_url: http://matek.hu/xaos/doku.php?id=documentation:main
+blurb_id: xaos_blurb
+download_url: http://sourceforge.net/projects/xaos/files/XaoS/
+gplv3_status: working (gnumaint-reply 21 Aug 2007 20:43:33 +0200)
+last_release: 3.6
+last_release_date: 20131101
+activity_status: stale
+last_activity: 20131101
+
+package: xboard
+mundane_name: XBoard
+copyright_holder: fsf-maybe-ok-just-scotti-#786505
+doc_category: Games
+doc_summary: Graphical user interface for chess programs
+doc_url: /software/xboard/manual/
+blurb_id: xboard_blurb
+gplv3_status: done-as-of-4.4.2
+last_release: 4.8.0
+last_release_date: 20141102
+activity_status: ok
+last_activity: 20141102
+
+package: xlogmaster
+logo: /graphics/xlogmaster/logo_small.jpg
+doc_category: Sysadmin
+doc_summary: GUI program for monitoring log and other files
+doc_url: /software/xlogmaster/tutorial_toc.html
+blurb_id: xlogmaster_blurb
+gplv3_status: done-as-of-1.6.2
+last_release: 1.6.2
+last_release_date: 20090624
+last_contact: 19feb12 jmd asked about penguin
+activity_status: stale
+last_activity: 20090624
+
+package: xmlat
+doc_category: Web
+doc_summary: Simple XML for defining and implementing markup languages
+doc_url: none
+blurb_id: xmlat_blurb
+gplv3_status: should-be-done
+last_contact: 27feb13 replied, 26feb13 asked
+activity_status: newmaint
+last_activity: 20120512
+
+package: xnee
+doc_category: Software
+doc_summary: Record, replay and distribute user actions under X11
+doc_url: http://xnee.wordpress.com/documentation/
+blurb_id: xnee_blurb
+gplv3_status: done-in-directory
+last_release: 3.19
+last_release_date: 20140506
+activity_status: ok
+last_activity: 20140506
+
+package: xorriso
+doc_category: Archiving
+doc_summary: Create, manipulate, burn ISO-9660 filesystems
+doc_url: /software/xorriso/man_1_xorriso.html
+blurb_id: xorriso_blurb
+gplv3_status: done
+last_release: 1.4.6
+last_release_date: 20160917
+note: Libburnia project = address@hidden
+note: xorriso support also on address@hidden
+note: mkisofs history at http://lists.debian.org/cdwrite/2004/10/msg00071.html
+activity_status: ok
+last_activity: 20160917
+
+package: zile
+copyright_holder: fsf-no-reply
+doc_category: Editors
+doc_summary: Zile is lossy Emacs, a lightweight Emacs clone
+doc_url: none
+blurb_id: zile_blurb
+gplv3_status: done-in-2.2.58
+last_release: 2.4.13
+last_release_date: 20161018
+activity_status: ok
+last_activity: 20161018
+
+# End. (Do not remove this line or the blank line before it. Thanks.)
Index: rec/package-descriptor.rec
===================================================================
RCS file: rec/package-descriptor.rec
diff -N rec/package-descriptor.rec
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rec/package-descriptor.rec 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,92 @@
+# $Id: package-descriptor.rec,v 1.1 2019/05/11 10:44:54 ineiev Exp $
+# Public domain.
+#
+# This file is maintained in the CVS repository of GNU womb,
+# http://cvs.savannah.gnu.org/viewvc/gnumaint/?root=womb
+#
+# Info/constraints about the fields:
+# - The package name should always be all-lowercase.
+#
+# - When mundane_name is not specified, default is to capitalize the first
+# letter of the package identifier.
+#
+# - Default for download_url is http://ftp.gnu.org/gnu/PKGNAME.
+#
+# - A doc_url value of "none" means no specific documentation page (home
+# page is used).
+# "htmlxref" means to extract a list of additional manuals from the
+# Texinfo htmlxref.cnf file.
+# Otherwise, it can be a url, which can be used together with htmlxref,
+# but multiple explicit urls or other combinations are not supported.
+#
+# - doc_category values are in doc-categories.txt (following FSD).
+# (doc stuff is used to generate gnu.org/manual.)
+#
+# - each package should always have an activity_status
+#
+# - allowed activity_status values:
+# ok;
+# newmaint,newcomaint (newly-appointed);
+# newpkg (newly-dubbed);
+# nomaint (no maintainer);
+# container (doesn't get released);
+# subpkg (released as part of another package);
+# stable (no current release, but none needed);
+# stale (needs release);
+# moribund (needs release, but not likely to ever get one).
+# alpha (alpha-only releases so far)
+#
+# - most activity statuses must have an associated date of last
+# activity
+#
+# - as a consistency check, the last activity should always be at
+# least the last release date
+#
+# The home page is not a field because that *always* is (should be)
+# /software/PACKAGE, even if that does nothing but redirect. Any other
+# method leads to redundant (hence inevitably inconsistent) information.
+#
+# Finally, this file as a whole is more or less sorted by package
+# identifier, for human convenience. However, software reading this
+# file should accept any order of packages or fields.
+
+%rec: Package
+%doc: Basic package metadata
+%key: package
+%sort: package
+%mandatory: activity_status
+%allowed: package alias blob_id search_alias mundane_name
++ copyright_holder savannah fsd
++ language logo doc_category doc_summary doc_url doc_shop download_url
++ other_download_url gplv3_status activity_status last_activity
++ last_release last_release_date last_contact next_contact note
++ container tech_address doc_source_format blurb_id
+# Package names should be all in lower-case
+%type: package regexp /[a-z0-9-]+/
+## Get the blurb separately via a join on the Blurb record type (in
+## pkgblurbs.rec)
+## %type: blurb_id rec Blurb
+## Allowed activity statuses:
+%type: activity_status enum
++ ok newmaint newcomaint newpkg nomaint container subpkg stable
++ stale moribund alpha decommissioned nonpkg
+%type: last_activity,last_release_date date
+##
+## CONSTRAINTS
+## Except in a few cases, there should always be a last_activity
+%constraint: activity_status != 'container' &&
++ activity_status != 'subpkg' &&
++ activity_status != 'stable' &&
++ activity_status != 'decommissioned' &&
++ activity_status != 'nonpkg' &&
++ note != 'no-release' &&
++ note != 'released-through-vc' &&
++ note != 'many packages' => #last_activity
+## If there has been a release, then the last activity should at least
+## be the date of the last release
+%constraint: last_release_date => last_release_date << last_activity ||
++ last_release_date == last_activity
+%constraint: activity_status = 'ok' => last_release_date >> '3 years ago'
+%constraint: activity_status = 'stale' => last_release_date << '3 years ago' ||
++ note = 'no-release'
+
Index: spotlight/spotlight.m4
===================================================================
RCS file: spotlight/spotlight.m4
diff -N spotlight/spotlight.m4
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ spotlight/spotlight.m4 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,27 @@
+NN new GNU releases in the last month (as of DATE):
+
+RELEASES
+
+For announcements of most new GNU releases, subscribe to the info-gnu
+mailing list: <https://lists.gnu.org/mailman/listinfo/info-gnu>.
+
+To download: nearly all GNU software is available from
+<https://ftp.gnu.org/gnu/>, or preferably one of its mirrors from
+<https://www.gnu.org/prep/ftp.html>. You can use the url
+<https://ftpmirror.gnu.org/> to be automatically redirected to a
+(hopefully) nearby and up-to-date mirror.
+
+This month, we welcome NEWMAINT.
+
+A number of GNU packages, as well as the GNU operating system as a
+whole, are looking for maintainers and other assistance: please see
+<https://www.gnu.org/server/takeaction.html#unmaint> if you'd like to
+help. The general page on how to help GNU is at
+<https://www.gnu.org/help/help.html>.
+
+If you have a working or partly working program that you'd like
+to offer to the GNU project as a GNU package, see
+<https://www.gnu.org/help/evaluation.html>.
+
+As always, please feel free to write to us at <address@hidden>
+with any GNUish questions or suggestions for future installments.
Index: spotlight/gnubytime.pl
===================================================================
RCS file: spotlight/gnubytime.pl
diff -N spotlight/gnubytime.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ spotlight/gnubytime.pl 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,24 @@
+#!/usr/bin/env perl
+# ftp releases by time,via rsync listing.
+# -rw-r--r-- 918 2002/01/14 14:28:56 .message
+
+$ARGV[0] = "/u/karl/sys/ftp/fp.gnu" unless @ARGV;
+
+while (<>) {
+ next if / -> /;
+ next if /\.(diff|xdelta)\./;
+ next if /snapshot\.pkg/;
+ next if /\.darwin/;
+ next if /-latest/;
+ next if /\.sig/;
+ next unless /\.[tj]ar\./;
+ my (undef,undef,$date,undef,$pkg) = split (" "); # rsync
+ # my ($date,undef,$pkg) = split (" "); # ftp
+ $date =~ tr,-/,,d;
+ $pkg{$pkg} = $date;
+}
+
+for my $p (sort { $pkg{$b} <=> $pkg{$a} } keys %pkg) {
+ ($pfile = $p) =~ s/\.tar\..*$//;
+ print "$pkg{$p}\t$pfile\n";
+}
Index: msg.0802/Makefile
===================================================================
RCS file: msg.0802/Makefile
diff -N msg.0802/Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ msg.0802/Makefile 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,4 @@
+try:
+ $(MAKE) -s -C .. test-unanswered >tomail.txt
+ send.0802
+ grep To: msgs/*
Index: msg.0802/.cvsignore
===================================================================
RCS file: msg.0802/.cvsignore
diff -N msg.0802/.cvsignore
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ msg.0802/.cvsignore 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,2 @@
+msgs
+tomail.txt
Index: msg.0802/send.0802
===================================================================
RCS file: msg.0802/send.0802
diff -N msg.0802/send.0802
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ msg.0802/send.0802 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,56 @@
+#!/usr/bin/env perl
+# February 2008.
+# - Send to maintainers we have not had established contact with.
+
+exit (&main ());
+
+sub main
+{
+ my $mail_template = "msg0802.txt";
+ chomp (my @tomail = `cat tomail.txt`); # generated by Makefile
+ system ("rm -rf msgs; mkdir msgs"); # clean anything old
+
+ my %seen;
+ for my $line (@tomail) {
+ my ($pkg,$addr) = split (/ - /, $line, 2);
+
+ # we arranged things so we don't send this to anyone who maintains
+ # multiple packages.
+ warn "already saw $addr ($seen{$addr})" if $seen{$addr};
+ $seen{$addr} = $pkg;
+
+ my $sed = "n"; # don't need this this time
+ $msg = &make_msg ($mail_template, $sed, $pkg, ($addr));
+
+ # save it.
+ local *OFILE;
+ ($OFILE = ">msgs/$pkg") =~ tr/ //d; # remove spaces to keep things easy
+ open (OFILE) || die "open($OFILE) failed: $!";
+ print OFILE $msg;
+ close (OFILE) || warn "close($OFILE) failed: $!";
+ }
+
+ return 0;
+}
+
+
+
+# Play with the message text in MAIL_TEMPLATE, handling the %if noaddr
+# conditional according to SED, and the %fmt: directive, and
+# substituting "%PACKAGE_NAME" and "%MAINTAINER_EMAIL".
+#
+sub make_msg
+{
+ my ($mail_template,$sed,$pkgname,@maintainer_emails) = @_;
+
+ my @msg = `sed -e $sed $mail_template | fmt --prefix=%fmt:`;
+ my $msg = join ("", @msg);
+
+ $msg =~ s/^%fmt://gm; # strip our reformatting prefix.
+ $msg =~ s/%PACKAGE_NAME/$pkgname/gm;
+
+ my $recip = join (", ", @maintainer_emails);
+ $msg =~ s/%MAINTAINER_EMAIL/$recip/gm;
+
+ return $msg;
+}
Index: msg.0802/msg0802.txt
===================================================================
RCS file: msg.0802/msg0802.txt
diff -N msg.0802/msg0802.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ msg.0802/msg0802.txt 11 May 2019 10:44:54 -0000 1.1
@@ -0,0 +1,19 @@
+From: address@hidden (GNU Project)
+To: %MAINTAINER_EMAIL
+Subject: maintaining GNU %PACKAGE_NAME?
+Reply-to: address@hidden
+
+Greetings,
+
+To the best of our knowledge, you are the maintainer of the
+GNU %PACKAGE_NAME package. Unfortunately, it seems we have lost
+contact with you. We don't know whether you are still working
+on the program or even whether you are still programming at all.
+
+Could you please reply to this message and let us know if you are still
+working on the package? If we cannot regain contact with you (we will
+also try to find a phone number for you), we will need to find another
+maintainer for the package.
+
+Thank you,
+rms / karl
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- www/prep/gnumaint mkspotlight gm-util.pl gm mas...,
Ineiev <=