/[ascend]/trunk/models/update-Makefile.pl
ViewVC logotype

Annotation of /trunk/models/update-Makefile.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 566 - (hide annotations) (download) (as text)
Fri May 5 09:22:01 2006 UTC (18 years, 11 months ago) by johnpye
File MIME type: text/x-perl
File size: 3124 byte(s)
Remove dependency on perl5
1 johnpye 566 #!/usr/bin/perl -w
2 aw0a 1 #
3    
4     # This script updates the variable INSTALL_FILE_LIST in the
5     # `Makefile.in' file in this directory. The script sets
6     # INSTALL_FILE_LIST to the list of non-Makefile-files listed in the
7     # CVS/Entries file. The former value of INSTALL_FILE_LIST is lost,
8     # but a backup copy of Makefile.in is available in `Makefile.in.$$~'
9     # where $$ is the process-id.
10    
11     # Load modules. man <module-name> for more info.
12     use strict;
13     use IO::File;
14    
15     # The Makefile variable to update
16     my $update_macro = 'INSTALL_FILE_LIST';
17    
18     # @files will contain the list of files to add to the Makefile.in
19     my @files = ();
20    
21     # @exclude contains the list of files NOT to add to Makefile.in
22     my @exclude = qw(configure configure.in
23     Makefile.in Makefile.Rules.in Makefile.Template
24     update-Makefile.pl);
25    
26     # Convert the exclude array into a hash for quick lookup
27     my %exclude = ();
28     foreach (@exclude) {
29     $exclude{$_} = 1;
30     }
31    
32     # Populate @files by reading the CVS/Entries file in this directory
33     &readEntries('.');
34    
35     # Sort files
36     @files = sort @files;
37    
38     # Rename `Makefile.in' to `Makefile.in.$$~'
39     my $new = 'Makefile.in';
40     my $old = "$new.$$~";
41     rename( $new, $old ) ||
42     die "Cannot rename $new: $!";
43    
44     # Open the files
45     my $NEW = new IO::File $new, 'w';
46     my $OLD = new IO::File $old;
47     die "Cannot open $new: $!" unless defined $NEW;
48     die "Cannot open $old: $!" unless defined $OLD;
49    
50     # Read in the old version. We do a straight copy until we find
51     # $update_macro, at which point we ignore everthing in the old
52     # version until the end of $update_macro definition, and we insert
53     # the list of files we found (in @files).
54     while( <$OLD> ) {
55     $NEW->print( $_);
56     next unless /^$update_macro\s*=/o;
57     # Ignore everything in $OLD until the end of $update_macro
58     while( <$OLD> ) {
59     next if m,\\,;
60     last;
61     }
62     # The last line in the $update_macro definition does not end in a
63     # backslash, so we have to treat it specially
64     my $last = pop @files;
65     # Print each file in @files
66     foreach my $f ( @files ) {
67     $NEW->print( "\t", $f, " \\\n" );
68     }
69     # Now print the last one
70     $NEW->print( "\t", $last, "\n" );
71     }
72    
73     # Close the files
74     $OLD->close() || die "Cannot close $old: $!";
75     $NEW->close() || die "Cannot close $new: $!";
76    
77     # All done!
78     exit;
79    
80     # Add most of the files in the CVS/Entries file to the global @files
81     # variable (ignore those in %exclude). The argument to readEntries
82     # is the directory which the CVS/Entries file applies to
83     sub readEntries {
84     my($dir) = @_;
85     # localize globals
86     local($_,$!,$1);
87     # open the CVS/Entries file
88     my $entry = new IO::File "CVS/Entries";
89     die "Cannot open $_/Entries: $!" unless defined $entry;
90     # For each line in $entry, split the line on slash and check to
91     # see if the file name is in %exclude; if not, add it to the
92     # global variable @files
93     while( <$entry> ) {
94     my($empty,$file,$version,$data,$misc) = split( '/', $_ );
95     next if defined $exclude{$file};
96     push @files, $file;
97     }
98     $entry->close() || die "Cannot close $dir/CVS/Entries: $!";
99     }

Properties

Name Value
svn:executable *

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22