Add first draft version of upmake, tool for updating makefiles.
Start moving away from files.bkl as the primary source for the files -- and away from bakefile itself as the make/project file generator -- by storing the list of files in a new build/files file and provide a simple build/upmake script for updating files.bkl and the manually maintained MSVC10+ projects from this file contents. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76610 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
78
build/tools/upmake/lib/Text/Upmake.pm
Normal file
78
build/tools/upmake/lib/Text/Upmake.pm
Normal file
@@ -0,0 +1,78 @@
|
||||
package Text::Upmake;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use autodie;
|
||||
|
||||
use Exporter qw(import);
|
||||
|
||||
our @EXPORT = qw(read_files_list upmake);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Text::Upmake - Update make files.
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Vadim Zeitlin
|
||||
|
||||
=cut
|
||||
|
||||
# Reads the file containing the file lists definitions and returns a hash ref
|
||||
# with variable names as keys and refs to arrays of the file names as values.
|
||||
#
|
||||
# Takes an (open) file handle as argument.
|
||||
sub read_files_list
|
||||
{
|
||||
my ($fh) = @_;
|
||||
|
||||
my ($var, %vars);
|
||||
while (<$fh>) {
|
||||
chomp;
|
||||
s/#.*$//;
|
||||
s/^\s+//;
|
||||
s/\s+$//;
|
||||
next if !$_;
|
||||
|
||||
if (/^(\w+)\s*=$/) {
|
||||
$var = $1;
|
||||
} else {
|
||||
die "Unexpected contents outside variable definition at line $.\n"
|
||||
unless defined $var;
|
||||
push @{$vars{$var}}, $_;
|
||||
}
|
||||
}
|
||||
|
||||
return \%vars;
|
||||
}
|
||||
|
||||
# Update the file with the given name in place using the specified function and
|
||||
# passing it the rest of the arguments.
|
||||
#
|
||||
# This is meant to be used with update_xxx() below.
|
||||
sub upmake
|
||||
{
|
||||
my ($fname, $updater, @args) = @_;
|
||||
|
||||
my $fname_new = "$fname.upmake.new"; # TODO make it more unique
|
||||
|
||||
open my $in, '<', $fname;
|
||||
open my $out, '>', $fname_new;
|
||||
|
||||
my $changed = $updater->($in, $out, @args);
|
||||
|
||||
close $in;
|
||||
close $out;
|
||||
|
||||
if ($changed) {
|
||||
rename $fname_new, $fname;
|
||||
} else {
|
||||
unlink $fname_new;
|
||||
}
|
||||
|
||||
$changed
|
||||
}
|
||||
|
||||
1;
|
Reference in New Issue
Block a user