utility to extract source file lists from Makefile.am, for other build systems
This commit is contained in:
parent
5816f76b0a
commit
1c827e4fb1
1 changed files with 88 additions and 0 deletions
88
utils/extractsources
Executable file
88
utils/extractsources
Executable file
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/perl
|
||||
# extractsources: pull out lists of _SOURCES from Makefile.am into files
|
||||
|
||||
# Copyright (C) 2005 by ott
|
||||
# Part of the Battle for Wesnoth Project http://wesnoth.org/
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License.
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY.
|
||||
#
|
||||
# See the COPYING file for more details.
|
||||
|
||||
# This script takes as input a Makefile.am containing _SOURCES variable
|
||||
# assignments. It extracts the lists of files in each such assignment
|
||||
# and creates a file for each list.
|
||||
# Conditional semantics of the Makefile.am are not dealt with, so the last
|
||||
# occurrence of each _SOURCES variable will be used, whether inside a
|
||||
# conditional or not.
|
||||
|
||||
use strict;
|
||||
use File::Basename;
|
||||
|
||||
my $DEBUG = 0;
|
||||
my $filename;
|
||||
|
||||
sub process_arg {
|
||||
my $path = shift;
|
||||
my $out = shift;
|
||||
my $arg = shift;
|
||||
my $outfile = $path . $out;
|
||||
$DEBUG and print STDERR "argument :$arg:\n";
|
||||
$DEBUG and print STDERR "opening $outfile for writing\n";
|
||||
if (! open(OUTFILE, ">$outfile")) {
|
||||
warn "Can't open $outfile for writing, skipping";
|
||||
return;
|
||||
}
|
||||
$arg =~ s/\\\n/\n/g;
|
||||
$arg =~ s/\s+/\n/g;
|
||||
$arg =~ s/\n+/\n/g;
|
||||
$arg =~ s/^\n+//s;
|
||||
$DEBUG and print STDERR "argument now :$arg:\n";
|
||||
print OUTFILE $arg;
|
||||
close OUTFILE;
|
||||
}
|
||||
|
||||
Argument:
|
||||
while ($filename = shift) {
|
||||
$DEBUG and print STDERR "opening $filename for reading\n";
|
||||
if (! open(CURRENT, $filename)) {
|
||||
warn("cannot open file $filename, skipping");
|
||||
next Argument;
|
||||
}
|
||||
my ($base,$path,$type) = fileparse($filename, qr{\.am});
|
||||
if ($type ne '.am') {
|
||||
warn "Can only process files ending with .am, skipping $filename";
|
||||
next Argument;
|
||||
}
|
||||
|
||||
my $out;
|
||||
my $state = 0;
|
||||
my $arg = '';
|
||||
while (<CURRENT>) {
|
||||
if ($state == 0) {
|
||||
if ( /^(\w+)_SOURCES\s*=\s*(.*)/s ) {
|
||||
$out = "$1_sources";
|
||||
$arg = $2;
|
||||
# chomp $arg;
|
||||
if ( $arg =~ /\\$/ ) {
|
||||
$state = 1;
|
||||
} else {
|
||||
process_arg( $path, $out, $arg );
|
||||
}
|
||||
} # else keep looking
|
||||
} elsif ($state == 1) { # looking for more lines
|
||||
$arg .= $_;
|
||||
if ( ! /\\$/ ) { # got the whole SOURCES line, substitute
|
||||
process_arg( $path, $out, $arg );
|
||||
$arg = '';
|
||||
$out = '';
|
||||
$state = 0;
|
||||
}
|
||||
} else {
|
||||
die 'Internal error, quitting';
|
||||
}
|
||||
}
|
||||
process_arg( $path, $out, $arg ) if $arg;
|
||||
}
|
Loading…
Add table
Reference in a new issue