Commit 49daed60 authored by Glenn Morris's avatar Glenn Morris

Remove lib-src/grep-changelog


* lib-src/grep-changelog: Remove file.

* lib-src/ (INSTALLABLE_SCRIPTS): Remove.
(all, install, uninstall): Remove INSTALLABLE_SCRIPTS.

* doc/man/grep-changelog.1: Remove file.

* make-dist: No more lib-src/grep-changelog.

* INSTALL: No longer mention grep-changelog.

* admin/quick-install-emacs (PUBLIC_LIBSRC_SCRIPTS): Remove, and all uses.

* admin/authors.el (authors-valid-file-names): Add grep-changelog.

* etc/NEWS: Mention this.
parent 4d806dc0
2014-12-14 Glenn Morris <>
* make-dist: No more lib-src/grep-changelog.
* INSTALL.REPO: Revert 2014-12-06 change.
2014-12-13 Paul Eggert <>
......@@ -464,8 +464,7 @@ installed locations, with `make install'. By default, Emacs's files
are installed in the following directories:
`/usr/local/bin' holds the executable programs users normally run -
`emacs', `etags', `ctags', `emacsclient', and
`emacs', `etags', `ctags', `emacsclient'.
`/usr/local/share/emacs/VERSION/lisp' holds the Emacs Lisp library;
`VERSION' stands for the number of the Emacs version
2014-12-14 Glenn Morris <>
* quick-install-emacs (PUBLIC_LIBSRC_SCRIPTS): Remove, and all uses.
* authors.el (authors-valid-file-names): Add grep-changelog.
2014-12-13 Paul Eggert <>
* notes/unicode: Don't mention Czech and Slovakian refcards.
......@@ -691,7 +691,7 @@ Changes to files in this list are not listed.")
"etags-vmslib.c" "fakemail.c" "getdate.c" "getopt.h" "getopt1.c"
"getopt_.h" "getopt_int.h" "gettext.h" "leditcfns.c" "loadst.c"
"make-path.c" "qsort.c" "sorted-doc.c" "tcp.c" "timer.c" "wakeup.c"
"yow.c" "grep-changelog"
;; etc/
"emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
"test-distrib.c" "testfile"
......@@ -28,7 +28,6 @@
PUBLIC_LIBSRC_BINARIES='emacsclient etags ctags ebrowse'
AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile$$ makefile$ makefile.w32-in$ stamp-subdir [.]cvsignore [.]arch-ids [{]arch[}] [.][cho]$ make-docfile"
......@@ -230,9 +229,6 @@ maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs-$VERSION
maybe_emit_copy $BUILD/lib-src/$F $DST_BIN/$F
maybe_emit_copy $SRC/lib-src/$F $DST_BIN/$F
if test x"$SRC" = x"$BUILD"; then
......@@ -259,7 +255,7 @@ for SUBDIR in lisp leim etc lib-src info; do
AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES)\$)" | tr ' ' '|'`"
2014-12-14 Glenn Morris <>
* grep-changelog.1: Remove file.
2014-11-10 Glenn Morris <>
* Rename from emacs.1.
.\" -*- nroff -*-
.\" See section COPYING for copyright and redistribution information.
.TH grep-changelog 1
grep-changelog \- print ChangeLog entries matching criteria
.B grep-changelog
.RI [ options ]
.RI [ CHANGELOG .\|.\|.]
.B grep-changelog
searches the named
(by default files matching the regular expressions
.B ChangeLog
.BR "ChangeLog\e.[0-9]+" )
for entries matching the specified criteria. At least one option or
file must be specified. This program is distributed with
.BR "GNU Emacs" .
The program accepts unambiguous abbreviations for option names.
.B \-\-author=AUTHOR
Print entries whose author matches regular expression
.B \-\-text=TEXT
Print entries whose text matches regular expression
.B \-\-exclude=TEXT
Exclude entries matching regular expression
.B \-\-from\-date=YYYY\-MM\-DD
Only consider entries made on or after the given date.
ChangeLog date entries not in the
\*(lqYYYY\-MM\-DD\*(rq format are never matched.
.B \-\-to\-date=YYYY\-MM\-DD
Only consider entries made on or before the given date.
.B \-\-rcs\-log
Print output in a format suitable for RCS log entries.
This format removes author lines, leading spaces, and file names.
.B \-\-with\-date
In RCS log format, print short dates.
.B \-\-reverse
Show matches in reverse order.
.B \-\-version
Display version information.
.B \-\-help
Display basic usage information.
.if t \(co
.if n (C)
2008-2014 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
document provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of
this document under the conditions for verbatim copying, provided that
the entire resulting derived work is distributed under the terms of
a permission notice identical to this one.
Permission is granted to copy and distribute translations of this
document into another language, under the above conditions for
modified versions, except that this permission notice may be stated
in a translation approved by the Free Software Foundation.
......@@ -43,6 +43,11 @@ Use './configure PKG_CONFIG=/full/name/of/pkg-config' if you need to.
** The configure option '--enable-silent-rules' and the command
'make V=0' now do a better job of suppressing chatter.
** The `grep-changelog' script (and its manual page) are no longer included.
It has no particular connection to Emacs and has not changed in years,
so if you want to use it, you can always take a copy from an older Emacs.
* Startup Changes in Emacs 25.1
2014-12-14 Glenn Morris <>
* grep-changelog: Remove file.
(all, install, uninstall): Remove INSTALLABLE_SCRIPTS.
2014-11-23 Glenn Morris <>
* (emacsclient.res): Fix yesterday's thinko.
......@@ -137,8 +137,6 @@ CLIENTW = @CLIENTW@
INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} $(CLIENTW) \
INSTALLABLE_SCRIPTS = grep-changelog
# Things that Emacs runs internally, or during the build process,
# which should not be installed in bindir.
UTILITIES = profile${EXEEXT} movemail${EXEEXT} hexl${EXEEXT} \
# Configuration files for .o files to depend on.
config_h = ../src/config.h $(srcdir)/../src/conf_post.h
.PHONY: all need-blessmail maybe-blessmail
......@@ -281,17 +279,11 @@ install: $(DESTDIR)${archlibdir}
for file in ${INSTALLABLES} ; do \
$(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} "$(DESTDIR)${bindir}"/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \
for file in ${INSTALLABLE_SCRIPTS} ; do \
$(INSTALL_SCRIPT) ${srcdir}/$${file} "$(DESTDIR)${bindir}"/`echo $${file} | sed '$(TRANSFORM)'` ; \
for file in ${INSTALLABLES}; do \
rm -f "$(DESTDIR)${bindir}"/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \
for file in ${INSTALLABLE_SCRIPTS}; do \
rm -f "$(DESTDIR)${bindir}"/`echo $${file} | sed '$(TRANSFORM)'` ; \
if [ -d "$(DESTDIR)${archlibdir}" ]; then \
(cd "$(DESTDIR)${archlibdir}" && rm -f ${UTILITIES} ${SCRIPTS}) \
#! /usr/bin/perl
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
# This file is part of GNU Emacs.
# GNU Emacs 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.
# GNU Emacs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <>.
# Extract entries from ChangeLogs matching specified criteria.
# Optionally format the resulting output to a form suitable for RCS
# logs, like they are used in Emacs, for example. In this format,
# author lines, leading spaces, and file names are removed.
require 5;
use strict;
# Parse command line options.
use vars qw($author $regexp $exclude $from_date $to_date
$rcs_log $with_date $version $help $reverse
use Getopt::Long;
my $result;
if (@ARGV == 0) {
# No arguments cannot possibly mean "show everything"!!
$result = 0;
} else {
$result = GetOptions ("author=s" => \$author,
"text=s" => \$regexp,
"exclude=s" => \$exclude,
"from-date=s" => \$from_date,
"to-date=s" => \$to_date,
"rcs-log" => \$rcs_log,
"with-date" => \$with_date,
"reverse!" => \$reverse,
"version" => \$version,
"help" => \$help);
# If date options are specified, check that they have the format
$result = 0 if $from_date && $from_date !~ /^\d\d\d\d-\d\d-\d\d$/;
$result = 0 if $to_date && $to_date !~ /^\d\d\d\d-\d\d-\d\d$/;
# Print usage information and exit when necessary.
if ($result == 0 || $help) {
print <<USAGE;
Usage: $0 [options] [CHANGELOG...]
Print entries in ChangeLogs matching various criteria.
Valid options are:
--author=AUTHOR Match entries whose author line matches
regular expression AUTHOR
--text=TEXT Match entries whose text matches regular
expression TEXT
--exclude=TEXT Exclude entries matching TEXT
--from-date=YYYY-MM-DD Match entries not older than given date
--to-date=YYYY-MM-DD Match entries not younger than given date
--rcs-log Format output suitable for RCS log entries
--with-date Print short date line in RCS log
--reverse Show entries in reverse (chronological) order
--version Print version info
--help Print this help
If no CHANGELOG is specified scan the files "ChangeLog" and
"ChangeLog.N+" in the current directory. Old-style dates in ChangeLogs
are not recognized.
exit !$help;
# Print version info and exit if `--version' was specified.
if ($version) {
print "0.3\n";
exit 0;
# Value is non-zero if HEADER matches according to command line
# options specified, i.e. it matches $author, and its date is in
# the range $from_date <= date <= $to_date.
sub header_match_p {
my $header = shift;
return 0 unless $header;
# No match if AUTHOR-regexp specified and doesn't match.
return 0 if $author && $header !~ /$author/;
# Check that the date of the entry matches if date options
# `--from-date' and/or `--to-date' were specified . Old-style
# dates in ChangeLogs are not recognized, and never match.
if ($from_date || $to_date) {
if ($header =~ /^(\d\d\d\d-\d\d-\d\d)/) {
my $date = $1;
return 0 if $from_date && $date lt $from_date;
return 0 if $to_date && $date gt $to_date;
} else {
# Don't bother recognizing old-style dates.
return 0;
return 1;
# Value is non-zero if ENTRY matches the criteria specified on the
# command line, i.e. it matches $regexp, and it doesn't match
# $exclude.
sub entry_match_p {
my $entry = shift;
return 0 unless $entry;
if ($regexp) {
return 1 if ($entry =~ /$regexp/
&& (!$exclude || $entry !~ $exclude));
} else {
return 1 if !$exclude || $entry !~ $exclude;
return 0;
# Print HEADER and/or ENTRY in a format suitable for what was
# specified on the command line. If $rcs_log is specified, author
# lines are not printed, and leading spaces and file names are removed
# from ChangeLog entries.
sub print_log {
my ($header, $entry) = @_;
my $output = '';
if ($rcs_log) {
# Remove leading whitespace from entry.
$entry =~ s/^\s+//mg;
# Remove file name parts.
$entry =~ s/^\*.*\(/(/mg;
# Remove file name parts, 2.
$entry =~ s/^\*.*://mg;
if ($with_date) {
$header =~ /(\d\d\d\d-\d\d-\d\d)/;
$output = "!changelog-date $1\n";
$output .= $entry;
} else {
$output .= $header . $entry;
if ($reverse) {
push @entries, $output;
} else {
print $output;
# Scan LOG for matching entries, and print them to standard output.
sub parse_changelog {
my $log = shift;
my $entry = undef;
my $header = undef;
@entries = () if $reverse;
# Open the ChangeLog.
open (IN, "< $log") || die "Cannot open $log: $!";
while (defined(my $line = <IN>)) {
if ($line =~ /^\S/) {
# Line is an author-line. Print previous entry if
# it matches.
print_log ($header, $entry)
if header_match_p ($header) && entry_match_p ($entry);
$entry = "";
$header = $line;
# Add empty lines below the header.
while (defined($line = <IN>) && $line =~ /^\s*$/) {
$header = "$header$line";
last unless defined $line;
if ($line =~ /^\s*\*/) {
# LINE is the first line of a ChangeLog entry. Print
# previous entry if it matches.
print_log ($header, $entry)
if header_match_p ($header) && entry_match_p ($entry);
$entry = $line;
} else {
# Add LINE to the current entry.
$entry = "$entry$line";
# Print last entry if it matches.
print_log ($header, $entry)
if header_match_p ($header) && entry_match_p ($entry);
close IN;
if ($reverse) {
for (my $entry = @entries; $entry; $entry--) {
print $entries[$entry-1];
# Main program. Process ChangeLogs.
# If files were specified on the command line, parse those files in the
# order supplied by the user; otherwise parse default files ChangeLog and
# ChangeLog.NNN according to $reverse.
unless (@ARGV > 0) {
@ARGV = ("ChangeLog");
push @ARGV,
map {"ChangeLog.$_"}
sort {$b <=> $a}
map {/\.(\d+)$/; $1}
do {
opendir D, '.';
grep /^ChangeLog\.\d+$/, readdir D;
@ARGV = reverse @ARGV if $reverse;
while (defined (my $log = shift @ARGV)) {
parse_changelog ($log) if -f $log;
# grep-changelog ends here.
......@@ -382,7 +382,7 @@ echo "Making links to \`lib-src'"
(cd lib-src
ln [a-zA-Z]*.[ch] ../${tempdir}/lib-src
ln ChangeLog README ../${tempdir}/lib-src
ln grep-changelog rcs2log ../${tempdir}/lib-src
ln rcs2log ../${tempdir}/lib-src
ln makefile.w32-in ../${tempdir}/lib-src
ln update-game-score.exe.manifest ../${tempdir}/lib-src)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment