Mercurial > hg > xemacs-beta
comparison src/make-src-depend @ 442:abe6d1db359e r21-2-36
Import from CVS: tag r21-2-36
| author | cvs |
|---|---|
| date | Mon, 13 Aug 2007 11:35:02 +0200 |
| parents | 3ecd8885ac67 |
| children | 3d3049ae1304 |
comparison
equal
deleted
inserted
replaced
| 441:72a7cfa4a488 | 442:abe6d1db359e |
|---|---|
| 43 | 43 |
| 44 for (qw (config.h sheap-adjust.h paths.h Emacs.ad.h)) { | 44 for (qw (config.h sheap-adjust.h paths.h Emacs.ad.h)) { |
| 45 $generated_header{$_} = 1; | 45 $generated_header{$_} = 1; |
| 46 } | 46 } |
| 47 | 47 |
| 48 # Although this is not technically true, it ought to be true, | |
| 49 # and makes the generated Makefile smaller. | |
| 50 $uses{'lisp.h'}{'config.h'} = 1; | |
| 51 | |
| 48 for my $file (keys %exists) { | 52 for my $file (keys %exists) { |
| 49 open (FILE, $file) or die "$file: $!"; | 53 open (FILE, $file) or die "$file: $!"; |
| 50 undef $/; $_ = <FILE>; | 54 undef $/; $_ = <FILE>; |
| 51 RemoveComments ($_); | 55 RemoveComments ($_); |
| 52 s/[ \t]+//g; | 56 s/[ \t]+//g; |
| 53 # Find include dependencies | 57 # Find include dependencies |
| 54 for (/^\#include([^\n]+)/gm) { | 58 for (/^\#include([^\n]+)/gm) { |
| 55 if (m@^\"([A-Za-z0-9_-]+\.h)\"@) { | 59 if (m@^\"([A-Za-z0-9._-]+\.h)\"@) { |
| 56 $uses{$file}{$1} = 1 if exists $exists{$1}; | 60 $uses{$file}{$1} = 1 if exists $exists{$1}; |
| 57 } elsif (m@<([A-Za-z0-9_-]+\.h)>@) { | 61 } elsif (m@<([A-Za-z0-9._-]+\.h)>@) { |
| 58 $uses{$file}{$1} = 1 if exists $generated_header{$1}; | 62 $uses{$file}{$1} = 1 if exists $generated_header{$1}; |
| 59 } elsif (m@\"../lwlib/([A-Za-z0-9_-]+\.h)\"@) { | 63 } elsif (m@\"../lwlib/([A-Za-z0-9._-]+\.h)\"@) { |
| 60 $uses{$file}{"\$(LWLIB_SRCDIR)/lwlib.h"} = 1; | 64 $uses{$file}{"\$(LWLIB_SRCDIR)/lwlib.h"} = 1; |
| 61 } | 65 } |
| 62 } | 66 } |
| 63 } | 67 } |
| 64 | 68 |
| 78 last if !$changedP; | 82 last if !$changedP; |
| 79 } | 83 } |
| 80 | 84 |
| 81 # Print file header | 85 # Print file header |
| 82 print | 86 print |
| 83 "## This file automatically generated by $myName. Do not modify. | 87 "## This file is automatically generated by \`$myName'. Do not modify. |
| 84 | 88 |
| 85 #ifdef USE_UNION_TYPE | 89 #if defined(USE_UNION_TYPE) |
| 86 LISP_UNION_H=lisp-union.h | 90 LISP_UNION_H=lisp-union.h |
| 87 #else | 91 #else |
| 88 LISP_UNION_H=lisp-disunion.h | 92 LISP_UNION_H=lisp-disunion.h |
| 89 #endif | 93 #endif |
| 90 "; | 94 "; |
| 91 | 95 |
| 92 my @LISP_H = ('lisp.h', 'config.h'); | 96 my @LISP_H = ('lisp.h', keys %{$uses{'lisp.h'}}); |
| 93 #@LISP_H = grep (! /lisp-(dis)?union\.h/, @LISP_H); | 97 print "LISP_H=@{[grep (!/lisp-(dis)?union\.h/, @LISP_H)]} \$(LISP_UNION_H)\n"; |
| 94 print "LISP_H = @{[grep (!/lisp-(dis)?union\.h/, @LISP_H)]} \$(LISP_UNION_H)\n"; | |
| 95 | 98 |
| 96 sub PrintDeps { | 99 sub PrintDeps { |
| 97 my $file = shift; | 100 my $file = shift; |
| 98 my $ofile = $file; $ofile =~ s/c$/o/; print "$ofile: "; | 101 my $ofile = $file; $ofile =~ s/c$/o/; print "$ofile: "; |
| 99 if (exists $uses{$file}{'lisp.h'}) { | 102 if (exists $uses{$file}{'lisp.h'}) { |
| 103 print "@{[sort keys %{$uses{$file}}]}\n"; | 106 print "@{[sort keys %{$uses{$file}}]}\n"; |
| 104 } | 107 } |
| 105 | 108 |
| 106 sub PrintPatternDeps { | 109 sub PrintPatternDeps { |
| 107 my ($pattern, $CPP_SYMBOL) = @_; | 110 my ($pattern, $CPP_SYMBOL) = @_; |
| 108 print "#ifdef $CPP_SYMBOL\n"; | 111 print "#if defined($CPP_SYMBOL)\n"; |
| 109 for my $file (sort grep (/$pattern/ && /\.c$/, keys %uses)) { | 112 for my $file (sort grep (/$pattern/ && /\.c$/, keys %uses)) { |
| 110 PrintDeps($file); | 113 PrintDeps($file); |
| 111 delete $uses{$file}; | 114 delete $uses{$file}; |
| 112 } | 115 } |
| 113 print "#endif\n"; | 116 print "#endif\n"; |
| 114 } | 117 } |
| 115 | 118 |
| 116 PrintPatternDeps ('-msw', "HAVE_MS_WINDOWS"); | 119 PrintPatternDeps ('-msw\\.', "HAVE_MS_WINDOWS"); |
| 117 PrintPatternDeps ('-x', "HAVE_X_WINDOWS"); | 120 PrintPatternDeps ('-x\\.', "HAVE_X_WINDOWS"); |
| 118 PrintPatternDeps ('database', "HAVE_DATABASE"); | 121 PrintPatternDeps ('-tty\\.', "HAVE_TTY"); |
| 119 PrintPatternDeps ('^mule', "MULE"); | 122 PrintPatternDeps ('^database', "HAVE_DATABASE"); |
| 123 PrintPatternDeps ('^mule', "MULE"); | |
| 120 PrintPatternDeps ('^(?:External|extw-)', "EXTERNAL_WIDGET"); | 124 PrintPatternDeps ('^(?:External|extw-)', "EXTERNAL_WIDGET"); |
| 121 | 125 |
| 122 for my $file (sort grep (/\.c$/, keys %uses)) { PrintDeps($file); } | 126 for my $file (sort grep (/\.c$/, keys %uses)) { PrintDeps($file); } |
| 123 | 127 |
| 128 # Surprisingly robust regexp to remove comments from arbitrary C code | |
| 124 sub RemoveComments { | 129 sub RemoveComments { |
| 125 $_[0] =~ | 130 $_[0] =~ |
| 126 s{ ( | 131 s{ ( |
| 127 [^\"\'/]+ | | 132 [^\"\'/]+ | |
| 128 (?:\"[^\"\\]*(?:\\.[^\"\\]*)*\" [^\"\'/]*)+ | | 133 (?:\"[^\"\\]*(?:\\.[^\"\\]*)*\" [^\"\'/]*)+ | |
