Mercurial > hg > xemacs-beta
view src/make-src-depend @ 4882:eab9498ecc0e
merge most of rest of redisplay-x.c and redisplay-gtk.c into redisplay-xlike-inc.c
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-01-18 Ben Wing <ben@xemacs.org>
* redisplay-gtk.c:
* redisplay-gtk.c (gtk_bevel_area):
* redisplay-x.c:
* redisplay-x.c (THIS_IS_X):
* redisplay-xlike-inc.c:
* redisplay-xlike-inc.c (XLIKE_text_width_single_run):
* redisplay-xlike-inc.c (XLIKE_text_width):
* redisplay-xlike-inc.c (XLIKE_output_display_block):
* redisplay-xlike-inc.c (XLIKE_get_gc):
* redisplay-xlike-inc.c (XLIKE_output_string):
* redisplay-xlike-inc.c (XLIKE_OUTPUT_XLIKE_PIXMAP):
* redisplay-xlike-inc.c (XLIKE_output_pixmap):
* redisplay-xlike-inc.c (XLIKE_output_vertical_divider):
* redisplay-xlike-inc.c (XLIKE_output_blank):
* redisplay-xlike-inc.c (XLIKE_output_horizontal_line):
* redisplay-xlike-inc.c (XLIKE_clear_region):
* redisplay-xlike-inc.c (XLIKE_output_eol_cursor):
* redisplay-xlike-inc.c (XLIKE_clear_frame_window):
* redisplay-xlike-inc.c (XLIKE_clear_frame):
* redisplay-xlike-inc.c (XLIKE_flash):
* redisplay-xlike-inc.c (console_type_create_redisplay_XLIKE):
Move lots more code into redisplay-xlike-inc.c. Use macros to
isolate the code that differs among X vs. GTK, to reduce the need
for ifdefs in the middle of the code. Now, redisplay-x.c and
redisplay-gtk.c only contain a few functions whose implementation
is completely different from one to the other, or which are not
present at all in one of them.
GTK code not currently tested, but it has bitrotted somewhat
any. Doing this will help keep it less bitrotty.
* depend: Regenerate.
| author | Ben Wing <ben@xemacs.org> |
|---|---|
| date | Mon, 18 Jan 2010 08:44:49 -0600 |
| parents | 6dffa171b748 |
| children | f23cd0184dcf |
line wrap: on
line source
: #-*- Perl -*- ### make-src-depend --- update the Makefile dependency information for XEmacs # Copyright (C) 1998 Free Software Foundation, Inc. ## 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 2, 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; see the file COPYING. If not, write to the Free ## Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ## 02111-1307, USA. 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}{'lisp.h'}) { delete $uses{$file}{@LISP_H}; $uses{$file}{'$(LISP_H)'} = 1; } # Note: If both config.h and lisp.h are dependencies, config.h got deleted # by the last clause. if (exists $uses{$file}{'config.h'}) { delete $uses{$file}{'config.h'}; $uses{$file}{'$(CONFIG_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 xgccache.c balloon_help.c x*.h Emacs*.[ch] PrintPatternDeps ('-x\\.|xgccache|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; }
