Mercurial > hg > xemacs-beta
view src/make-src-depend @ 2955:4d269e525e21
[xemacs-hg @ 2005-09-26 22:18:59 by adrian]
xemacs-21.5-clean: Getting texinfmt.el to compile core .texi again
-------------------- ChangeLog entries follow: --------------------
man/ChangeLog addition:
2005-09-27 Adrian Aichner <adrian@xemacs.org>
* lispref/packaging.texi: Get file to compile with teinfmt.el.
* lispref/packaging.texi (Packaging): Ditto.
* lispref/packaging.texi (Package Overview): Ditto.
* lispref/packaging.texi (The User View): Ditto.
* lispref/packaging.texi (The Library Maintainer View): Ditto.
* lispref/packaging.texi (Infrastructure): Ditto.
* lispref/packaging.texi (Obtaining): Ditto.
* lispref/packaging.texi (Local.rules File): Ditto.
* lispref/packaging.texi (package-info.in): Ditto.
* lispref/packaging.texi (Makefile): Ditto.
* lispref/packaging.texi (Documenting Packages): Ditto.
2005-09-27 Adrian Aichner <adrian@xemacs.org>
* internals/internals.texi (A Summary of the Various XEmacs
Modules): Get file to compile with texinfmt.el.
* internals/internals.texi (Windows Build Flags): Ditto.
author | adrian |
---|---|
date | Mon, 26 Sep 2005 22:19:05 +0000 |
parents | 1b0339b048ce |
children | 6dffa171b748 |
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; }