annotate src/make-src-depend @ 1314:15a91d7ae2d1

[xemacs-hg @ 2003-02-20 08:16:21 by ben] check in makefile fixes et al Makefile.in.in: Major surgery. Move all stuff related to building anything in the src/ directory into src/. Simplify the dependencies -- everything in src/ is dependent on the single entry `src' in MAKE_SUBDIRS. Remove weirdo targets like `all-elc[s]', dump-elc[s], etc. mule/mule-msw-init.el: Removed. Delete this file. mule/mule-win32-init.el: New file, with stuff from mule-msw-init.el -- not just for MS Windows native, boys and girls! bytecomp.el: Change code inserted to catch trying to load a Mule-only .elc file in a non-Mule XEmacs. Formerly you got the rather cryptic "The required feature `mule' cannot be provided". Now you get "Loading this file requires Mule support". finder.el: Remove dependency on which directory this function is invoked from. update-elc.el: Don't mess around with ../src/BYTECOMPILE_CHANGE. Now that Makefile.in.in and xemacs.mak are in sync, both of them use NEEDTODUMP and the other one isn't used. dumped-lisp.el: Rewrite in terms of `list' and `nconc' instead of assemble-list, so we can have arbitrary forms, not just `when-feature'. very-early-lisp.el: Nuke this file. finder-inf.el, packages.el, update-elc.el, update-elc-2.el, loadup.el, make-docfile.el: Eliminate references to very-early-lisp. msw-glyphs.el: Comment clarification. xemacs.mak: Add macros DO_TEMACS, DO_XEMACS, and a few others; this macro section is now completely in sync with src/Makefile.in.in. Copy check-features, load-shadows, and rebuilding finder-inf.el from src/Makefile.in.in. The main build/dump/recompile process is now synchronized with src/Makefile.in.in. Change `WARNING' to `NOTE' and `error checking' to `error-checking' TO avoid tripping faux warnings and errors in the VC++ IDE. Makefile.in.in: Major surgery. Move all stuff related to building anything in the src/ directory from top-level Makefile.in.in to here. Simplify the dependencies. Rearrange into logical subsections. Synchronize the main compile/dump/build-elcs section with xemacs.mak, which is already clean and in good working order. Remove weirdo targets like `all-elc[s]', dump-elc[s], etc. Add additional levels of macros \(e.g. DO_TEMACS, DO_XEMACS, TEMACS_BATCH, XEMACS_BATCH, XEMACS_BATCH_PACKAGES) to factor out duplicated stuff. Clean up handling of "HEAP_IN_DATA" (Cygwin) so it doesn't need to ignore the return value from dumping. Add .NO_PARALLEL since various aspects of building and dumping must be serialized but do not always have dependencies between them (this is impossible in some cases). Everything related to src/ now gets built in one pass in this directory by just running `make' (except the Makefiles themselves and config.h, paths.h, Emacs.ad.h, and other generated .h files). console.c: Update list of possibly valid console types. emacs.c: Rationalize the specifying and handling of the type of the first frame. This was originally prompted by a workspace in which I got GTK to compile under C++ and in the process fixed it so it could coexist with X in the same build -- hence, a combined TTY/X/MS-Windows/GTK build is now possible under Cygwin. (However, you can't simultaneously *display* more than one kind of device connection -- but getting that to work is not that difficult. Perhaps a project for a bored grad student. I (ben) would do it but don't see the use.) To make sense of this, I added new switches that can be used to specifically indicate the window system: -x [aka --use-x], -tty \[aka --use-tty], -msw [aka --use-ms-windows], -gtk [aka --use-gtk], and -gnome [aka --use-gnome, same as --use-gtk]. -nw continues as an alias for -tty. When none have been given, XEmacs checks for other parameters implying particular device types (-t -> tty, -display -> x [or should it have same treatment as DISPLAY below?]), and has ad-hoc logic afterwards: if env var DISPLAY is set, use x (or gtk? perhaps should check whether gnome is running), else MS Windows if it exsits, else TTY if it exists, else stream, and you must be running in batch mode. This also fixes an existing bug whereby compiling with no x, no mswin, no tty, when running non- interactively (e.g. to dump) I get "sorry, must have TTY support". emacs.c: Turn on Vstack_trace_on_error so that errors are debuggable even when occurring extremely early in reinitialization. emacs.c: Try to make sure that the user can see message output under Windows (i.e. it doesn't just disappear right away) regardless of when it occurs, e.g. in the middle of creating the first frame. emacs.c: Define new function `emacs-run-status', indicating whether XEmacs is noninteractive or interactive, whether raw, post-dump/pdump-load or run-temacs, whether we are dumping, whether pdump is in effect. event-stream.c: It's "mommas are fat", not "momas are fat". Fix other typo. event-stream.c: Conditionalize in_menu_callback check on HAVE_MENUBARS, because it won't exist on w/o menubar support, lisp.h: More hackery on RETURN_NOT_REACHED. Cygwin v3.2 DOES complain here if RETURN_NOT_REACHED() is blank, as it is for GCC 2.5+. So make it blank only for GCC 2.5 through 2.999999999999999. Declare Vstack_trace_on_error. profile.c: Need to include "profile.h" to fix warnings. sheap.c: Don't fatal() when need to rerun Make, just stderr_out() and exit(0). That way we can distinguish between a dumping failing expectedly (due to lack of stack space, triggering another dump) and unexpectedly, in which case, we want to stop building. (or go on, if -K is given) syntax.c, syntax.h: Use ints where they belong, and enum syntaxcode's where they belong, and fix warnings thereby. syntax.h: Fix crash caused by an edge condition in the syntax-cache macros. text.h: Spacing fixes. xmotif.h: New file, to get around shadowing warnings. EmacsManager.c, event-Xt.c, glyphs-x.c, gui-x.c, input-method-motif.c, xmmanagerp.h, xmprimitivep.h: Include xmotif.h. alloc.c: Conditionalize in_malloc on ERROR_CHECK_MALLOC. config.h.in, file-coding.h, fileio.c, getloadavg.c, select-x.c, signal.c, sysdep.c, sysfile.h, systime.h, text.c, unicode.c: Eliminate HAVE_WIN32_CODING_SYSTEMS, use WIN32_ANY instead. Replace defined (WIN32_NATIVE) || defined (CYGWIN) with WIN32_ANY. lisp.h: More futile attempts to walk and chew gum at the same time when dealing with subr's that don't return.
author ben
date Thu, 20 Feb 2003 08:16:21 +0000
parents 579d37cb4395
children 1b0339b048ce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 : #-*- Perl -*-
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
2
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
3 ### make-src-depend --- update the Makefile dependency information for XEmacs
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
4
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 # Copyright (C) 1998 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
7 ## Author: Martin Buchholz <martin@xemacs.org>
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
8 ## Maintainer: XEmacs Development Team
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
9
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
10 ## This file is part of XEmacs.
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
11
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
12 ## XEmacs is free software; you can redistribute it and/or modify it
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
13 ## under the terms of the GNU General Public License as published by
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
14 ## the Free Software Foundation; either version 2, or (at your option)
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
15 ## any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
17 ## XEmacs is distributed in the hope that it will be useful, but
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
18 ## WITHOUT ANY WARRANTY; without even the implied warranty of
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
19 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
20 ## General Public License for more details.
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
21
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
22 ## You should have received a copy of the GNU General Public License
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
23 ## along with XEmacs; see the file COPYING. If not, write to the Free
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
24 ## Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
25 ## 02111-1307, USA.
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
26
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 eval 'exec perl -w -S $0 ${1+"$@"}'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 if 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 use strict;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 my ($myName, $srcdir, %exists, %uses, %generated_header);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 ($myName = $0) =~ s@.*/@@; my $usage ="
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 Usage: $myName
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 Generates Makefile dependencies for the XEmacs src directory.
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
37 The dependencies are written to stdout.
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
38 ";
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 die $usage if @ARGV;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 ($srcdir = $0) =~ s@[^/]+$@@;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 $srcdir = "." if $srcdir eq "";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 chdir $srcdir or die "$srcdir: $!";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 opendir SRCDIR, "." or die "$srcdir: $!";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 for (grep (/\.[ch]$/, readdir (SRCDIR))) { $exists{$_} = 1; }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 closedir SRCDIR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 for (qw (config.h sheap-adjust.h paths.h Emacs.ad.h)) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 $generated_header{$_} = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
54 # Although this is not technically true, it ought to be true,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
55 # and makes the generated Makefile smaller.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
56 $uses{'lisp.h'}{'config.h'} = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
57
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 for my $file (keys %exists) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 open (FILE, $file) or die "$file: $!";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 undef $/; $_ = <FILE>;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 RemoveComments ($_);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 s/[ \t]+//g;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 # Find include dependencies
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 for (/^\#include([^\n]+)/gm) {
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 452
diff changeset
65 if (m@^\"([A-Za-z0-9._-]+\.[ch])\"@) {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 $uses{$file}{$1} = 1 if exists $exists{$1};
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
67 } elsif (m@<([A-Za-z0-9._-]+\.h)>@) {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 $uses{$file}{$1} = 1 if exists $generated_header{$1};
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
69 } elsif (m@\"../lwlib/([A-Za-z0-9._-]+\.h)\"@) {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 $uses{$file}{"\$(LWLIB_SRCDIR)/lwlib.h"} = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 # Make transitive closure of %uses
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 while (1) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 my $changedP = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 for my $x (keys %uses) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 for my $y (keys %{$uses{$x}}) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 for my $z (keys %{$uses{$y}}) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 if (! exists $uses{$x}{$z}) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 $uses{$x}{$z} = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 $changedP = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 last if !$changedP;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 # Print file header
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 print
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
93 "## This file is automatically generated by \`$myName'. Do not modify.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
95 #if defined(USE_UNION_TYPE)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 LISP_UNION_H=lisp-union.h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 LISP_UNION_H=lisp-disunion.h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 ";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 442
diff changeset
102 my @LISP_H = ('lisp.h', sort keys %{$uses{'lisp.h'}});
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
103 print "
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
104 #if defined(QUICK_BUILD)
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
105 CONFIG_H=
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
106 LISP_H=
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
107 #else
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
108 CONFIG_H=config.h
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
109 LISP_H=@{[grep (!/lisp-(dis)?union\.h/, @LISP_H)]} \$(LISP_UNION_H)
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
110 #endif
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
111
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
112 ";
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 sub PrintDeps {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 my $file = shift;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 my $ofile = $file; $ofile =~ s/c$/o/; print "$ofile: ";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 if (exists $uses{$file}{'lisp.h'}) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 delete @{%{$uses{$file}}}{@LISP_H};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 $uses{$file}{'$(LISP_H)'} = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 }
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
121 # Note: If both config.h and lisp.h are dependencies, config.h got deleted
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
122 # by the last clause.
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
123 if (exists $uses{$file}{'config.h'}) {
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
124 delete $uses{$file}{'config.h'};
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
125 $uses{$file}{'$(CONFIG_H)'} = 1;
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
126 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 print "@{[sort keys %{$uses{$file}}]}\n";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 sub PrintPatternDeps {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 my ($pattern, $CPP_SYMBOL) = @_;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
132 print "#if defined($CPP_SYMBOL)\n";
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 for my $file (sort grep (/$pattern/ && /\.c$/, keys %uses)) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 PrintDeps($file);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 delete $uses{$file};
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 print "#endif\n";
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
140 PrintPatternDeps ('-msw\\.', "HAVE_MS_WINDOWS");
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
141 PrintPatternDeps ('-xlike', "HAVE_XLIKE");
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
142 # X-specific files: *-x.c *-x-impl.h xgccache.c balloon_help.c x*.h Emacs*.[ch]
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
143 PrintPatternDeps ('-x\\.|xgccache|balloon_help|^Emacs', "HAVE_X_WINDOWS");
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
144 PrintPatternDeps ('-tty\\.', "HAVE_TTY");
1303
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
145 # GTK-specific files: *-gtk.[ch] *-gtk-*.[ch] gtk-*.[ch] emacs-marshals.c emacs-widget-accessors.c glade.c ui-byhand.c
f99d3d25df86 [xemacs-hg @ 2003-02-15 10:15:54 by ben]
ben
parents: 462
diff changeset
146 PrintPatternDeps ('gtk|emacs-marshals|emacs-widget-accessors|glade|ui-byhand', "HAVE_GTK");
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
147 PrintPatternDeps ('^database', "HAVE_DATABASE");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
148 PrintPatternDeps ('^mule', "MULE");
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 PrintPatternDeps ('^(?:External|extw-)', "EXTERNAL_WIDGET");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 for my $file (sort grep (/\.c$/, keys %uses)) { PrintDeps($file); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
153 # Surprisingly robust regexp to remove comments from arbitrary C code
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 sub RemoveComments {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 $_[0] =~
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 s{ (
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 [^\"\'/]+ |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 (?:\"[^\"\\]*(?:\\.[^\"\\]*)*\" [^\"\'/]*)+ |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 (?:\'[^\'\\]*(?:\\.[^\'\\]*)*\' [^\"\'/]*)+
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 | / (?:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 \*[^*]*\*+(?:[^/*][^*]*\*+)*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 /[^\n]*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 }{defined $1 ? $1 : ""}gsxeo;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 }