view src/make-src-depend @ 5655:b7ae5f44b950

Remove some redundant functions, change others to labels, lisp/ lisp/ChangeLog addition: 2012-05-05 Aidan Kehoe <kehoea@parhasard.net> Remove some redundant functions; turn other utility functions into labels, avoiding visibility in the global namespace, and reducing the size of the dumped binary. * auto-save.el (auto-save-unhex): Removed. * auto-save.el (auto-save-unescape-name): Use #'string-to-number instead of #'auto-save-unhex. * files.el (save-some-buffers): * files.el (save-some-buffers-1): Changed to a label. * files.el (not-modified): * gui.el (make-gui-button): * gui.el (gui-button-action): Changed to a label. * gui.el (insert-gui-button): * indent.el (indent-for-tab-command): * indent.el (insert-tab): Changed to a label. * indent.el (indent-rigidly): * isearch-mode.el: * isearch-mode.el (isearch-ring-adjust): * isearch-mode.el (isearch-ring-adjust1): Changed to a label. * isearch-mode.el (isearch-pre-command-hook): * isearch-mode.el (isearch-maybe-frob-keyboard-macros): Changed to a label. * isearch-mode.el (isearch-highlight): * isearch-mode.el (isearch-make-extent): Changed to a label. * itimer.el: * itimer.el (itimer-decrement): Removed, replaced uses with decf. * itimer.el (itimer-increment): Removed, replaced uses with incf. * itimer.el (itimer-signum): Removed, replaced uses with minusp, plusp. * itimer.el (itimer-name): * itimer.el (check-itimer): Removed, replaced with #'check-type calls. * itimer.el (itimer-value): * itimer.el (check-itimer-coerce-string): Removed. * itimer.el (itimer-restart): * itimer.el (itimer-function): * itimer.el (check-nonnegative-number): Removed. * itimer.el (itimer-uses-arguments): * itimer.el (check-string): Removed. * itimer.el (itimer-function-arguments): * itimer.el (itimer-recorded-run-time): * itimer.el (set-itimer-name): * itimer.el (set-itimer-value): * itimer.el (set-itimer-value-internal): * itimer.el (set-itimer-restart): * itimer.el (set-itimer-function): * itimer.el (set-itimer-is-idle): * itimer.el (set-itimer-recorded-run-time): * itimer.el (get-itimer): * itimer.el (delete-itimer): * itimer.el (start-itimer): * itimer.el (activate-itimer): * itimer.el (itimer-edit-set-field): * itimer.el (itimer-edit-next-field): * itimer.el (itimer-edit-previous-field): Use incf, decf, plusp, minusp and the more general argument type checking macros. * lib-complete.el: * lib-complete.el (lib-complete:better-root): Changed to a label. * lib-complete.el (lib-complete:get-completion-table): Changed to a label. * lib-complete.el (read-library-internal): Include labels. * lib-complete.el (lib-complete:cache-completions): Changed to a label. * minibuf.el (read-buffer): Use #'set-difference, don't reinvent it. * newcomment.el (comment-padright): Use a label instead of repeating a lambda expression. * packages.el (package-get-key): * packages.el (package-get-key-1): Removed, use #'getf instead. * simple.el (kill-backward-chars): Removed; this isn't used. * simple.el (what-cursor-position): (lambda (arg) (format "%S" arg) -> #'prin1-to-string. * simple.el (debug-print-1): Renamed to #'debug-print. * simple.el (debug-print): Removed, #'debug-print-1 was equivalent. * subr.el (integer-to-bit-vector): check-nonnegative-number no longer available. * widget.el (define-widget): * widget.el (define-widget-keywords): Removed, this was long obsolete.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 05 May 2012 18:42:00 +0100
parents 308d34e9f07d
children
line wrap: on
line source

: #-*- Perl -*-

### make-src-depend --- update the Makefile dependency information for XEmacs

# Copyright (C) 1998 Free Software Foundation, Inc.
# Copyright (C) 2010 Ben Wing.

## Author: Martin Buchholz <martin@xemacs.org>
## Maintainer: XEmacs Development Team

## This file is part of XEmacs.

## XEmacs 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.

## XEmacs 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 XEmacs.  If not, see <http://www.gnu.org/licenses/>.

eval 'exec perl -w -S $0 ${1+"$@"}'
  if 0;

use strict;
my ($myName, $srcdir, %exists, %uses, %generated_header);

($myName = $0) =~ s@.*/@@; my $usage ="
Usage: $myName

Generates Makefile dependencies for the XEmacs src directory.
The dependencies are written to stdout.
";

die $usage if @ARGV;

($srcdir = $0) =~ s@[^/]+$@@;
$srcdir = "." if $srcdir eq "";
chdir $srcdir or die "$srcdir: $!";

opendir SRCDIR, "." or die "$srcdir: $!";
for (grep (/\.[ch]$/, readdir (SRCDIR))) { $exists{$_} = 1; }
closedir SRCDIR;

for (qw (config.h sheap-adjust.h paths.h Emacs.ad.h)) {
  $generated_header{$_} = 1;
}

# Although this is not technically true, it ought to be true,
# and makes the generated Makefile smaller.
$uses{'lisp.h'}{'config.h'} = 1;

for my $file (keys %exists) {
  open (FILE, $file) or die "$file: $!";
  undef $/; $_ = <FILE>;
  RemoveComments ($_);
  s/[ \t]+//g;
  # Find include dependencies
  for (/^\#include([^\n]+)/gm) {
    if (m@^\"([A-Za-z0-9._-]+\.[ch])\"@) {
      $uses{$file}{$1} = 1 if exists $exists{$1};
    } elsif (m@<([A-Za-z0-9._-]+\.h)>@) {
      $uses{$file}{$1} = 1 if exists $generated_header{$1};
    } elsif (m@\"../lwlib/([A-Za-z0-9._-]+\.h)\"@) {
      $uses{$file}{"\$(LWLIB_SRCDIR)/lwlib.h"} = 1;
    }
  }
}

# Make transitive closure of %uses
while (1) {
  my $changedP = 0;
  for my $x (keys %uses) {
    for my $y (keys %{$uses{$x}}) {
      for my $z (keys %{$uses{$y}}) {
	if (! exists $uses{$x}{$z}) {
	  $uses{$x}{$z} = 1;
	  $changedP = 1;
	}
      }
    }
  }
  last if !$changedP;
}

# Print file header
print
"## This file is automatically generated by \`$myName'.  Do not modify.

#if defined(USE_UNION_TYPE)
LISP_UNION_H=lisp-union.h
#else
LISP_UNION_H=lisp-disunion.h
#endif
";

my @LISP_H = ('lisp.h', sort keys %{$uses{'lisp.h'}});
print "
#if defined(QUICK_BUILD)
CONFIG_H=
LISP_H=
#else
CONFIG_H=config.h
LISP_H=@{[grep (!/lisp-(dis)?union\.h/, @LISP_H)]} \$(LISP_UNION_H)
#endif

";

sub PrintDeps {
  my $file = shift;
  my $ofile = $file; $ofile =~ s/c$/o/; print "$ofile: ";
  if (exists $uses{$file}{'config.h'}) {
    delete $uses{$file}{'config.h'};
    $uses{$file}{'$(CONFIG_H)'} = 1;
  }
  if (exists $uses{$file}{'lisp.h'}) {
    for my $x (@LISP_H) {
      delete $uses{$file}{$x};
    }
    $uses{$file}{'$(LISP_H)'} = 1;
  }
  # Huge hack.  With QUICK_BUILD, general.c has no dependence on
  # general-slots.h but really should.
  $uses{$file}{'general-slots.h'} = 1 if $file eq "general.c";
  print "@{[sort keys %{$uses{$file}}]}\n";
}

sub PrintPatternDeps {
  my ($pattern, $CPP_SYMBOL) = @_;
  print "#if defined($CPP_SYMBOL)\n";
  for my $file (sort grep (/$pattern/ && /\.c$/, keys %uses)) {
    PrintDeps($file);
    delete $uses{$file};
  }
  print "#endif\n";
}

PrintPatternDeps ('-msw\\.',   "HAVE_MS_WINDOWS");
PrintPatternDeps ('-xlike',   "HAVE_XLIKE");
# X-specific files: *-x.c *-x-impl.h balloon_help.c x*.h Emacs*.[ch]
PrintPatternDeps ('-x\\.|balloon_help|^Emacs',     "HAVE_X_WINDOWS");
PrintPatternDeps ('-tty\\.',   "HAVE_TTY");
# GTK-specific files: *-gtk.[ch] *-gtk-*.[ch] gtk-*.[ch] emacs-marshals.c emacs-widget-accessors.c glade.c ui-byhand.c
PrintPatternDeps ('gtk|emacs-marshals|emacs-widget-accessors|glade|ui-byhand',   "HAVE_GTK");
PrintPatternDeps ('^database', "HAVE_DATABASE");
PrintPatternDeps ('^mule',     "MULE");
PrintPatternDeps ('^(?:External|extw-)', "EXTERNAL_WIDGET");

for my $file (sort grep (/\.c$/, keys %uses)) { PrintDeps($file); }

# Surprisingly robust regexp to remove comments from arbitrary C code
sub RemoveComments {
  $_[0] =~
    s{ (
	[^\"\'/]+ |
	(?:\"[^\"\\]*(?:\\.[^\"\\]*)*\" [^\"\'/]*)+ |
	(?:\'[^\'\\]*(?:\\.[^\'\\]*)*\' [^\"\'/]*)+
       )
       | / (?:
	    \*[^*]*\*+(?:[^/*][^*]*\*+)*/
	    |
	    /[^\n]*
	   )
     }{defined $1 ? $1 : ""}gsxeo;
}