rockbox/tools/autoconf.pl

108 lines
2.9 KiB
Perl
Raw Normal View History

#!/usr/bin/perl
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id$
#
# This program attempts to run configure with the correct build target
# and type based on the pwd.
# example: ~/rockbox/sansae200 is the build dir, it would run configure
# for the sansae200 normal build target.
# ~/rockbox/sansae200-sim for the e200 sim build (-boot for bootloader)
# ~/rockbox/sim/sansae200 for e200 sim build. (replace sim with boot is also possible)
# The full shortname is not required, each target name is checked and the first
# possible match is used.
# This script must be placed in the same directory as configure and builds.pm
#
use File::Basename;
my $srcdir = dirname $0;
require "$srcdir/builds.pm";
my $builddir = `pwd`;
my @dirs = split(/\//, $builddir);
my $test = pop(@dirs);
sub doconfigure {
my ($target, $type, $width, $height) = @_;
if (!exists($builds{$target})) {
for $key (keys(%builds)) {
if ($key =~ $target) {
$target = $key;
last;
}
}
}
$command = "${srcdir}/configure --type=${type} --target=${target}";
if (defined $width) {
$command .= " --lcdwidth=${width}";
}
if (defined $height) {
$command .= " --lcdheight=${height}";
}
%typenames = ("n" => "Normal", "s" => "Simulator", "b" => "Bootloader" );
unless (@ARGV[0] eq "-y") {
$prompt = "Rockbox autoconf: \n\tTarget: $target \n\tType: $typenames{$type} \n";
if (defined $width) {
$prompt .= "\tLCD width: $width\n";
}
if (defined $height) {
$prompt .= "\tLCD height: $height\n";
}
print $prompt . "Correct? [Y/n] ";
chomp($response = <>);
if ($response eq "") {
$response = "y";
}
if ($response ne "y" && $response ne "Y") {
print "autoconf: Aborting\n";
exit(0);
}
}
system($command);
}
sub buildtype {
my ($text) = @_;
if ($text eq "sim") {
$build = "s";
} elsif ($text eq "boot") {
$build = "b";
} elsif ($text eq "build") {
$build = "n";
} else {
$build = "";
}
return $build;
}
if ($test =~ /(.*)-(.*)-([0-9]+)x([0-9]+)/)
{
if (buildtype($2)) {
doconfigure($1, buildtype($2), $3, $4);
} elsif (buildtype($1)) {
doconfigure($2, buildtype($1), $3, $4);
}
}
elsif ($test =~ /(.*)-(.*)/)
{
if (buildtype($2)) {
doconfigure($1, buildtype($2));
} elsif (buildtype($1)) {
doconfigure($2, buildtype($1));
}
}
elsif ($test =~ /(.*)/)
{
$target = $1;
$build = buildtype(pop(@dirs));
doconfigure($target, $build);
}