1
0
Fork 0
forked from len0rd/rockbox

Added support for configurable rockbox directory. FS#9567 by Alex Bennee.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19208 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Björn Stenberg 2008-11-24 22:16:07 +00:00
parent 4c43f7be0a
commit ad8d6031c1
9 changed files with 217 additions and 144 deletions

View file

@ -443,7 +443,7 @@ static char *get_image_filename(const char *start, const char* bmpdir,
{ {
const char *end = strchr(start, '|'); const char *end = strchr(start, '|');
if ( !end || (end - start) >= (buf_size - ROCKBOX_DIR_LEN - 2) ) if ( !end || (end - start) >= (buf_size - (int)ROCKBOX_DIR_LEN - 2) )
{ {
buf = "\0"; buf = "\0";
return NULL; return NULL;

View file

@ -57,9 +57,14 @@ struct opt_items {
#define ROCKBOX_DIR "." #define ROCKBOX_DIR "."
#define ROCKBOX_DIR_LEN 1 #define ROCKBOX_DIR_LEN 1
#else #else
#define ROCKBOX_DIR "/.rockbox"
#define ROCKBOX_DIR_LEN 9 /* ROCKBOX_DIR is now defined in autoconf.h for flexible build types */
#ifndef ROCKBOX_DIR
#error ROCKBOX_DIR not defined (should be in autoconf.h)
#endif #endif
#define ROCKBOX_DIR_LEN sizeof(ROCKBOX_DIR)
#endif
#define FONT_DIR ROCKBOX_DIR "/fonts" #define FONT_DIR ROCKBOX_DIR "/fonts"
#define LANG_DIR ROCKBOX_DIR "/langs" #define LANG_DIR ROCKBOX_DIR "/langs"

View file

@ -18,7 +18,7 @@
#define O_BINARY 0 #define O_BINARY 0
#endif #endif
#define CODEPAGE_DIR "/.rockbox/codepages" #define CODEPAGE_DIR ROCKBOX_DIR"/codepages"
static int default_codepage = 0; static int default_codepage = 0;
static int loaded_cp_table = 0; static int loaded_cp_table = 0;

View file

@ -50,7 +50,7 @@
#define FONT_HEADER_SIZE 36 #define FONT_HEADER_SIZE 36
#endif #endif
#define GLYPH_CACHE_FILE "/.rockbox/.glyphcache" #define GLYPH_CACHE_FILE ROCKBOX_DIR"/.glyphcache"
/* /*
* Fonts are specified by number, and used for display * Fonts are specified by number, and used for display

View file

@ -27,8 +27,7 @@
#define DIRCACHE_RESERVE (1024*64) #define DIRCACHE_RESERVE (1024*64)
#define DIRCACHE_LIMIT (1024*1024*6) #define DIRCACHE_LIMIT (1024*1024*6)
/* FIXME: We should use ROCKBOX_DIR here but it's defined in apps/ */ #define DIRCACHE_FILE ROCKBOX_DIR"/dircache.dat"
#define DIRCACHE_FILE "/.rockbox/dircache.dat"
#define DIRCACHE_APPFLAG_TAGCACHE 0x0001 #define DIRCACHE_APPFLAG_TAGCACHE 0x0001

View file

@ -14,40 +14,7 @@ use File::Copy; # For move() and copy()
use File::Find; # For find() use File::Find; # For find()
use File::Path; # For rmtree() use File::Path; # For rmtree()
use Cwd 'abs_path'; use Cwd 'abs_path';
use Getopt::Long qw(:config pass_through); # pass_through so not use Getopt::Long qw(:config pass_through); # pass_through so not confused by -DTYPE_STUFF
# confused by -DTYPE_STUFF
sub glob_copy {
my ($pattern, $destination) = @_;
foreach my $path (glob($pattern)) {
copy($path, $destination);
}
}
sub glob_move {
my ($pattern, $destination) = @_;
foreach my $path (glob($pattern)) {
move($path, $destination);
}
}
sub glob_unlink {
my ($pattern) = @_;
foreach my $path (glob($pattern)) {
unlink($path);
}
}
sub find_copyfile {
my ($pattern, $destination) = @_;
return sub {
my $path = $_;
if ($path =~ $pattern && filesize($path) > 0 && !($path =~ /\.rockbox/)) {
copy($path, $destination);
chmod(0755, $destination.'/'.$path);
}
}
}
my $ROOT=".."; my $ROOT="..";
@ -60,6 +27,45 @@ my $target;
my $archos; my $archos;
my $incfonts; my $incfonts;
my $target_id; # passed in, not currently used my $target_id; # passed in, not currently used
my $rbdir=".rockbox"; # can be changed for special builds
sub glob_copy {
my ($pattern, $destination) = @_;
print "glob_copy: $pattern -> $destination\n" if $verbose;
foreach my $path (glob($pattern)) {
copy($path, $destination);
}
}
sub glob_move {
my ($pattern, $destination) = @_;
print "glob_move: $pattern -> $destination\n" if $verbose;
foreach my $path (glob($pattern)) {
move($path, $destination);
}
}
sub glob_unlink {
my ($pattern) = @_;
print "glob_unlink: $pattern\n" if $verbose;
foreach my $path (glob($pattern)) {
unlink($path);
}
}
sub find_copyfile {
my ($pattern, $destination) = @_;
print "find_copyfile: $pattern -> $destination\n" if $verbose;
return sub {
my $path = $_;
if ($path =~ $pattern && filesize($path) > 0 && !($path =~ /$rbdir/)) {
copy($path, $destination);
chmod(0755, $destination.'/'.$path);
}
}
}
# Get options # Get options
GetOptions ( 'r|root=s' => \$ROOT, GetOptions ( 'r|root=s' => \$ROOT,
@ -69,7 +75,9 @@ GetOptions ( 'r|root=s' => \$ROOT,
'o|output=s' => \$output, 'o|output=s' => \$output,
'f|fonts=s' => \$incfonts, # 0 - no fonts, 1 - fonts only 2 - fonts and package 'f|fonts=s' => \$incfonts, # 0 - no fonts, 1 - fonts only 2 - fonts and package
'v|verbose' => \$verbose, 'v|verbose' => \$verbose,
's|sim' => \$sim ); 's|sim' => \$sim,
'rbdir=s' => \$rbdir, # If we want to put in a different directory
);
($target, $exe) = @ARGV; ($target, $exe) = @ARGV;
@ -167,23 +175,25 @@ sub filesize {
sub buildzip { sub buildzip {
my ($image, $fonts)=@_; my ($image, $fonts)=@_;
print "buildzip: image=$image fonts=$fonts\n" if $verbose;
my ($bitmap, $depth, $icon_w, $icon_h, $recording, $swcodec, my ($bitmap, $depth, $icon_w, $icon_h, $recording, $swcodec,
$remote_depth, $remote_icon_w, $remote_icon_h) = &gettargetinfo(); $remote_depth, $remote_icon_w, $remote_icon_h) = &gettargetinfo();
# print "Bitmap: $bitmap\nDepth: $depth\nSwcodec: $swcodec\n"; # print "Bitmap: $bitmap\nDepth: $depth\nSwcodec: $swcodec\n";
# remove old traces # remove old traces
rmtree('.rockbox'); rmtree($rbdir);
mkdir ".rockbox", 0777; mkdir $rbdir, 0777;
if(!$bitmap) { if(!$bitmap) {
# always disable fonts on non-bitmap targets # always disable fonts on non-bitmap targets
$fonts = 0; $fonts = 0;
} }
if($fonts) { if($fonts) {
mkdir ".rockbox/fonts", 0777; mkdir "$rbdir/fonts", 0777;
chdir(".rockbox/fonts"); chdir "$rbdir/fonts";
my $cmd = "$ROOT/tools/convbdf -f $ROOT/fonts/*bdf >/dev/null 2>&1"; my $cmd = "$ROOT/tools/convbdf -f $ROOT/fonts/*bdf >/dev/null 2>&1";
print($cmd."\n") if $verbose; print($cmd."\n") if $verbose;
system($cmd); system($cmd);
@ -196,46 +206,46 @@ sub buildzip {
} }
# create the file so the database does not try indexing a folder # create the file so the database does not try indexing a folder
open(IGNORE, ">.rockbox/database.ignore") || die "can't open database.ignore"; open(IGNORE, ">$rbdir/database.ignore") || die "can't open database.ignore";
close(IGNORE); close(IGNORE);
mkdir ".rockbox/langs", 0777; mkdir "$rbdir/langs", 0777;
mkdir ".rockbox/rocks", 0777; mkdir "$rbdir/rocks", 0777;
mkdir ".rockbox/rocks/games", 0777; mkdir "$rbdir/rocks/games", 0777;
mkdir ".rockbox/rocks/apps", 0777; mkdir "$rbdir/rocks/apps", 0777;
mkdir ".rockbox/rocks/demos", 0777; mkdir "$rbdir/rocks/demos", 0777;
mkdir ".rockbox/rocks/viewers", 0777; mkdir "$rbdir/rocks/viewers", 0777;
if ($recording) { if ($recording) {
mkdir ".rockbox/recpresets", 0777; mkdir "$rbdir/recpresets", 0777;
} }
if($swcodec) { if($swcodec) {
mkdir ".rockbox/eqs", 0777; mkdir "$rbdir/eqs", 0777;
glob_copy("$ROOT/apps/eqs/*.cfg", '.rockbox/eqs/'); # equalizer presets glob_copy("$ROOT/apps/eqs/*.cfg", "$rbdir/eqs/"); # equalizer presets
} }
mkdir ".rockbox/wps", 0777; mkdir "$rbdir/wps", 0777;
mkdir ".rockbox/themes", 0777; mkdir "$rbdir/themes", 0777;
if ($bitmap) { if ($bitmap) {
open(THEME, ">.rockbox/themes/rockbox_default_icons.cfg"); open(THEME, ">$rbdir/themes/rockbox_default_icons.cfg");
print THEME <<STOP print THEME <<STOP
# this config file was auto-generated to make it # this config file was auto-generated to make it
# easy to reset the icons back to default # easy to reset the icons back to default
iconset: - iconset: -
# taken from apps/gui/icon.c # taken from apps/gui/icon.c
viewers iconset: /.rockbox/icons/viewers.bmp viewers iconset: /$rbdir/icons/viewers.bmp
remote iconset: - remote iconset: -
# taken from apps/gui/icon.c # taken from apps/gui/icon.c
remote viewers iconset: /.rockbox/icons/remote_viewers.bmp remote viewers iconset: /$rbdir/icons/remote_viewers.bmp
STOP STOP
; ;
close(THEME); close(THEME);
} }
mkdir ".rockbox/codepages", 0777; mkdir "$rbdir/codepages", 0777;
if($bitmap) { if($bitmap) {
system("$ROOT/tools/codepages"); system("$ROOT/tools/codepages");
@ -244,29 +254,29 @@ STOP
system("$ROOT/tools/codepages -m"); system("$ROOT/tools/codepages -m");
} }
glob_move('*.cp', '.rockbox/codepages/'); glob_move('*.cp', "$rbdir/codepages/");
if($bitmap) { if($bitmap) {
mkdir ".rockbox/codecs", 0777; mkdir "$rbdir/codecs", 0777;
if($depth > 1) { if($depth > 1) {
mkdir ".rockbox/backdrops", 0777; mkdir "$rbdir/backdrops", 0777;
} }
find(find_copyfile(qr/.*\.codec/, abs_path('.rockbox/codecs/')), 'apps/codecs'); find(find_copyfile(qr/.*\.codec/, abs_path("$rbdir/codecs/")), 'apps/codecs');
# remove directory again if no codec was copied # remove directory again if no codec was copied
rmdir(".rockbox/codecs"); rmdir("$rbdir/codecs");
} }
find(find_copyfile(qr/\.(rock|ovl)/, abs_path('.rockbox/rocks/')), 'apps/plugins'); find(find_copyfile(qr/\.(rock|ovl)/, abs_path("$rbdir/rocks/")), 'apps/plugins');
open VIEWERS, "$ROOT/apps/plugins/viewers.config" or open VIEWERS, "$ROOT/apps/plugins/viewers.config" or
die "can't open viewers.config"; die "can't open viewers.config";
my @viewers = <VIEWERS>; my @viewers = <VIEWERS>;
close VIEWERS; close VIEWERS;
open VIEWERS, ">.rockbox/viewers.config" or open VIEWERS, ">$rbdir/viewers.config" or
die "can't create .rockbox/viewers.config"; die "can't create $rbdir/viewers.config";
foreach my $line (@viewers) { foreach my $line (@viewers) {
if ($line =~ /([^,]*),([^,]*),/) { if ($line =~ /([^,]*),([^,]*),/) {
@ -288,24 +298,24 @@ STOP
# print STDERR "$ext $plugin $dir $name $r\n"; # print STDERR "$ext $plugin $dir $name $r\n";
if(-e ".rockbox/rocks/$name") { if(-e "$rbdir/rocks/$name") {
if($dir ne "rocks") { if($dir ne "rocks") {
# target is not 'rocks' but the plugins are always in that # target is not 'rocks' but the plugins are always in that
# dir at first! # dir at first!
move(".rockbox/rocks/$name", ".rockbox/rocks/$r"); move("$rbdir/rocks/$name", "$rbdir/rocks/$r");
} }
print VIEWERS $line; print VIEWERS $line;
} }
elsif(-e ".rockbox/rocks/$r") { elsif(-e "$rbdir/rocks/$r") {
# in case the same plugin works for multiple extensions, it # in case the same plugin works for multiple extensions, it
# was already moved to the viewers dir # was already moved to the viewers dir
print VIEWERS $line; print VIEWERS $line;
} }
if(-e ".rockbox/rocks/$oname") { if(-e "$rbdir/rocks/$oname") {
# if there's an "overlay" file for the .rock, move that as # if there's an "overlay" file for the .rock, move that as
# well # well
move(".rockbox/rocks/$oname", ".rockbox/rocks/$dir"); move("$rbdir/rocks/$oname", "$rbdir/rocks/$dir");
} }
} }
} }
@ -318,33 +328,33 @@ STOP
foreach my $line (@rock_targetdirs) { foreach my $line (@rock_targetdirs) {
if ($line =~ /([^,]*),(.*)/) { if ($line =~ /([^,]*),(.*)/) {
my ($plugin, $dir)=($1, $2); my ($plugin, $dir)=($1, $2);
move(".rockbox/rocks/${plugin}.rock", ".rockbox/rocks/$dir/${plugin}.rock"); move("$rbdir/rocks/${plugin}.rock", "$rbdir/rocks/$dir/${plugin}.rock");
} }
} }
if ($bitmap) { if ($bitmap) {
mkdir ".rockbox/icons", 0777; mkdir "$rbdir/icons", 0777;
copy("$viewer_bmpdir/viewers.${icon_w}x${icon_h}x$depth.bmp", ".rockbox/icons/viewers.bmp"); copy("$viewer_bmpdir/viewers.${icon_w}x${icon_h}x$depth.bmp", "$rbdir/icons/viewers.bmp");
if ($remote_depth) { if ($remote_depth) {
copy("$viewer_bmpdir/remote_viewers.${remote_icon_w}x${remote_icon_h}x$remote_depth.bmp", ".rockbox/icons/remote_viewers.bmp"); copy("$viewer_bmpdir/remote_viewers.${remote_icon_w}x${remote_icon_h}x$remote_depth.bmp", "$rbdir/icons/remote_viewers.bmp");
} }
} }
copy("$ROOT/apps/tagnavi.config", ".rockbox/"); copy("$ROOT/apps/tagnavi.config", "$rbdir/");
copy("$ROOT/apps/plugins/disktidy.config", ".rockbox/rocks/apps/"); copy("$ROOT/apps/plugins/disktidy.config", "$rbdir/rocks/apps/");
if($bitmap) { if($bitmap) {
copy("$ROOT/apps/plugins/sokoban.levels", ".rockbox/rocks/games/sokoban.levels"); # sokoban levels copy("$ROOT/apps/plugins/sokoban.levels", "$rbdir/rocks/games/sokoban.levels"); # sokoban levels
copy("$ROOT/apps/plugins/snake2.levels", ".rockbox/rocks/games/snake2.levels"); # snake2 levels copy("$ROOT/apps/plugins/snake2.levels", "$rbdir/rocks/games/snake2.levels"); # snake2 levels
} }
if($image) { if($image) {
# image is blank when this is a simulator # image is blank when this is a simulator
if( filesize("rockbox.ucl") > 1000 ) { if( filesize("rockbox.ucl") > 1000 ) {
copy("rockbox.ucl", ".rockbox/rockbox.ucl"); # UCL for flashing copy("rockbox.ucl", "$rbdir/rockbox.ucl"); # UCL for flashing
} }
if( filesize("rombox.ucl") > 1000) { if( filesize("rombox.ucl") > 1000) {
copy("rombox.ucl", ".rockbox/rombox.ucl"); # UCL for flashing copy("rombox.ucl", "$rbdir/rombox.ucl"); # UCL for flashing
} }
# Check for rombox.target # Check for rombox.target
@ -353,40 +363,45 @@ STOP
my $romfile = "rombox.$2"; my $romfile = "rombox.$2";
if (filesize($romfile) > 1000) if (filesize($romfile) > 1000)
{ {
copy($romfile, ".rockbox/$romfile"); copy($romfile, "$rbdir/$romfile");
} }
} }
} }
mkdir ".rockbox/docs", 0777; mkdir "$rbdir/docs", 0777;
for(("COPYING", for(("COPYING",
"LICENSES", "LICENSES",
"KNOWN_ISSUES" "KNOWN_ISSUES"
)) { )) {
copy("$ROOT/docs/$_", ".rockbox/docs/$_.txt"); copy("$ROOT/docs/$_", "$rbdir/docs/$_.txt");
} }
if ($fonts) { if ($fonts) {
copy("$ROOT/docs/profontdoc.txt", ".rockbox/docs/profontdoc.txt"); copy("$ROOT/docs/profontdoc.txt", "$rbdir/docs/profontdoc.txt");
} }
for(("sample.colours", for(("sample.colours",
"sample.icons" "sample.icons"
)) { )) {
copy("$ROOT/docs/$_", ".rockbox/docs/$_"); copy("$ROOT/docs/$_", "$rbdir/docs/$_");
} }
# Now do the WPS dance # Now do the WPS dance
if(-d "$ROOT/wps") { if(-d "$ROOT/wps") {
system("perl $ROOT/wps/wpsbuild.pl -r $ROOT $ROOT/wps/WPSLIST $target"); my $wps_build_cmd="perl $ROOT/wps/wpsbuild.pl ";
$wps_build_cmd=$wps_build_cmd."-v " if $verbose;
$wps_build_cmd=$wps_build_cmd." --rbdir=$rbdir -r $ROOT $ROOT/wps/WPSLIST $target";
print "wpsbuild: $wps_build_cmd\n" if $verbose;
system("$wps_build_cmd");
print "wps_build_cmd: done\n" if $verbose;
} }
else { else {
print STDERR "No wps module present, can't do the WPS magic!\n"; print STDERR "No wps module present, can't do the WPS magic!\n";
} }
# and the info file # and the info file
copy("rockbox-info.txt", ".rockbox/rockbox-info.txt"); copy("rockbox-info.txt", "$rbdir/rockbox-info.txt");
# copy the already built lng files # copy the already built lng files
glob_copy('apps/lang/*lng', '.rockbox/langs/'); glob_copy('apps/lang/*lng', "$rbdir/langs/");
} }
@ -403,7 +418,7 @@ $year+=1900;
sub runone { sub runone {
my ($target, $fonts)=@_; my ($target, $fonts)=@_;
# build a full install .rockbox directory # build a full install .rockbox ($rbdir) directory
buildzip($target, $fonts); buildzip($target, $fonts);
unlink($output); unlink($output);
@ -414,23 +429,23 @@ sub runone {
} }
if($target && ($target !~ /(mod|ajz|wma)\z/i)) { if($target && ($target !~ /(mod|ajz|wma)\z/i)) {
# On some targets, the image goes into .rockbox. # On some targets, the image goes into .rockbox.
copy("$target", ".rockbox/$target"); copy("$target", "$rbdir/$target");
undef $target; undef $target;
} }
if($verbose) { if($verbose) {
print "$ziptool $output .rockbox $target >/dev/null\n"; print "$ziptool $output $rbdir $target >/dev/null\n";
} }
if($sim) { if($sim) {
system("cp -r .rockbox simdisk/ >/dev/null"); system("cp -r $rbdir simdisk/ >/dev/null");
} }
else { else {
system("$ziptool $output .rockbox $target >/dev/null"); system("$ziptool $output $rbdir $target >/dev/null");
} }
# remove the .rockbox afterwards # remove the $rbdir afterwards
rmtree('.rockbox'); rmtree($rbdir);
}; };
if(!$exe) { if(!$exe) {

20
tools/configure vendored
View file

@ -15,6 +15,8 @@ use_logf="#undef ROCKBOX_HAS_LOGF"
scriptver=`echo '$Revision$' | sed -e 's:\\$::g' -e 's/Revision: //'` scriptver=`echo '$Revision$' | sed -e 's:\\$::g' -e 's/Revision: //'`
rbdir=".rockbox"
# #
# Begin Function Definitions # Begin Function Definitions
# #
@ -607,6 +609,13 @@ cat <<EOF
--type=TYPE Sets the build type. The shortcut is also valid. --type=TYPE Sets the build type. The shortcut is also valid.
Run without this option to see available types. Run without this option to see available types.
--rbdir=dir Use alternative rockbox directory (default: ${rbdir}).
This is useful for having multiple alternate builds on
your device that you can load with ROLO. However as the
bootloader looks for .rockbox you won't be able to boot
into this build.
--ccache Enable ccache use (done by default these days) --ccache Enable ccache use (done by default these days)
--no-ccache Disable ccache use --no-ccache Disable ccache use
--help Shows this message (must not be used with other options) --help Shows this message (must not be used with other options)
@ -2272,11 +2281,17 @@ else
defendian="ROCKBOX_LITTLE_ENDIAN" defendian="ROCKBOX_LITTLE_ENDIAN"
fi fi
if [ "1" != `parse_args --rbdir` ]; then
rbdir=`parse_args --rbdir`;
echo "Using alternate rockbox dir: ${rbdir}"
fi
sed > autoconf.h \ sed > autoconf.h \
-e "s,@ENDIAN@,${defendian},g" \ -e "s,@ENDIAN@,${defendian},g" \
-e "s,^#undef ROCKBOX_HAS_LOGF,$use_logf,g" \ -e "s,^#undef ROCKBOX_HAS_LOGF,$use_logf,g" \
-e "s,@config_rtc@,$config_rtc,g" \ -e "s,@config_rtc@,$config_rtc,g" \
-e "s,@have_rtc_alarm@,$have_rtc_alarm,g" \ -e "s,@have_rtc_alarm@,$have_rtc_alarm,g" \
-e "s,@RBDIR@,${rbdir},g" \
<<EOF <<EOF
/* This header was made by configure */ /* This header was made by configure */
#ifndef __BUILD_AUTOCONF_H #ifndef __BUILD_AUTOCONF_H
@ -2292,6 +2307,9 @@ sed > autoconf.h \
@config_rtc@ @config_rtc@
@have_rtc_alarm@ @have_rtc_alarm@
/* root of Rockbox */
#define ROCKBOX_DIR "/@RBDIR@"
#endif /* __BUILD_AUTOCONF_H */ #endif /* __BUILD_AUTOCONF_H */
EOF EOF
@ -2384,6 +2402,7 @@ sed > Makefile \
-e "s,@VOICETOOLSET@,${voicetoolset},g" \ -e "s,@VOICETOOLSET@,${voicetoolset},g" \
-e "s,@LANGS@,${buildlangs},g" \ -e "s,@LANGS@,${buildlangs},g" \
-e "s,@USE_ELF@,${USE_ELF},g" \ -e "s,@USE_ELF@,${USE_ELF},g" \
-e "s,@RBDIR@,${rbdir},g" \
<<EOF <<EOF
## Automatically generated. http://www.rockbox.org/ ## Automatically generated. http://www.rockbox.org/
@ -2446,6 +2465,7 @@ export TTS_ENGINE=@TTS_ENGINE@
export ENC_OPTS=@ENC_OPTS@ export ENC_OPTS=@ENC_OPTS@
export ENCODER=@ENCODER@ export ENCODER=@ENCODER@
export USE_ELF=@USE_ELF@ export USE_ELF=@USE_ELF@
export RBDIR=@RBDIR@
include \$(TOOLSDIR)/root.make include \$(TOOLSDIR)/root.make

View file

@ -201,27 +201,27 @@ tags:
$(SILENT)etags -o $(BUILDDIR)/TAGS $(filter-out %.o,$(SRC) $(OTHER_SRC)) $(SILENT)etags -o $(BUILDDIR)/TAGS $(filter-out %.o,$(SRC) $(OTHER_SRC))
fontzip: fontzip:
$(SILENT)$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)\" -r "$(ROOTDIR)" -f 1 -o rockbox-fonts.zip $(TARGET) $(BINARY) $(SILENT)$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)\" -r "$(ROOTDIR)" --rbdir="$(RBDIR)" -f 1 -o rockbox-fonts.zip $(TARGET) $(BINARY)
zip: zip:
$(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done ; \ $(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done ; \
$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -r "$(ROOTDIR)" $(TARGET) $(BINARY) $(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -r "$(ROOTDIR)" --rbdir="$(RBDIR)" $(TARGET) $(BINARY)
mapzip: mapzip:
$(SILENT)find . -name "*.map" | xargs zip rockbox-maps.zip $(SILENT)find . -name "*.map" | xargs zip rockbox-maps.zip
fullzip: fullzip:
$(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \ $(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \
$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -r "$(ROOTDIR)" -f 2 -o rockbox-full.zip $(TARGET) $(BINARY) $(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -r "$(ROOTDIR)" --rbdir="$(RBDIR)" -f 2 -o rockbox-full.zip $(TARGET) $(BINARY)
7zip: 7zip:
$(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \ $(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \
$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -o "rockbox.7z" -z "7za a -mx=9" -r "$(ROOTDIR)" $(TARGET) $(BINARY) $(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -o "rockbox.7z" -z "7za a -mx=9" -r "$(ROOTDIR)" --rbdir="$(RBDIR)" $(TARGET) $(BINARY)
tar: tar:
$(SILENT)rm -f rockbox.tar $(SILENT)rm -f rockbox.tar
$(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \ $(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \
$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -o "rockbox.tar" -z "tar -cf" -r "$(ROOTDIR)" $(TARGET) $(BINARY) $(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -o "rockbox.tar" -z "tar -cf" -r "$(ROOTDIR)" --rbdir="$(RBDIR)" $(TARGET) $(BINARY)
bzip2: tar bzip2: tar
$(SILENT)bzip2 -f9 rockbox.tar $(SILENT)bzip2 -f9 rockbox.tar
@ -254,12 +254,12 @@ ifdef SIMVER
install: install:
@echo "Installing your build in your 'simdisk' dir" @echo "Installing your build in your 'simdisk' dir"
$(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \ $(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \
$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -s -r "$(ROOTDIR)" -f 0 $(TARGET) $(BINARY) $(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -s -r "$(ROOTDIR)" --rbdir="$(RBDIR)" -f 0 $(TARGET) $(BINARY)
fullinstall: fullinstall:
@echo "Installing a full setup in your 'simdisk' dir" @echo "Installing a full setup in your 'simdisk' dir"
$(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \ $(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \
$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -s -r "$(ROOTDIR)" -f 2 $(TARGET) $(BINARY) $(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -t \"$(MODELNAME)$$feat\" -i \"$(TARGET_ID)\" -s -r "$(ROOTDIR)" --rbdir="$(RBDIR)" -f 2 $(TARGET) $(BINARY)
endif endif

View file

@ -8,32 +8,60 @@
# $Id$ # $Id$
# #
$ROOT=".."; use strict;
use Getopt::Long qw(:config pass_through); # pass_through so not confused by -DTYPE_STUFF
if($ARGV[0] eq "-r") {
$ROOT=$ARGV[1];
shift @ARGV;
shift @ARGV;
}
my $ROOT="..";
my $verbose; my $verbose;
if($ARGV[0] eq "-v") {
$verbose =1;
shift @ARGV;
}
my $firmdir="$ROOT/firmware"; my $firmdir="$ROOT/firmware";
my $rbdir=".rockbox";
my $wpslist;
my $target;
my $wpslist=$ARGV[0]; # Get options
GetOptions ( 'r|root=s' => \$ROOT,
'v|verbose' => \$verbose,
'rbdir=s' => \$rbdir, # If we want to put in a different directory
);
($wpslist, $target) = @ARGV;
my $target = $ARGV[1];
my $cppdef = $target; my $cppdef = $target;
my @depthlist = ( 16, 8, 4, 2, 1 ); my @depthlist = ( 16, 8, 4, 2, 1 );
# These parameters are filled in as we parse wpslist
my $wps;
my $wps_prefix;
my $rwps;
my $width;
my $height;
my $font;
my $fgcolor;
my $bgcolor;
my $statusbar;
my $author;
my $req_g;
my $req_g_wps;
my $req_t_wps;
my $backdrop;
my $lineselectstart;
my $lineselectend;
my $selecttype;
my $iconset;
my $viewericon;
my $lineselecttextcolor;
my $filetylecolor;
# LCD sizes
my ($main_height, $main_width, $main_depth);
my ($remote_height, $remote_width, $remote_depth);
my $has_remote;
if(!$wpslist) { if(!$wpslist) {
print "Usage: wpsbuilds.pl <WPSLIST> <target>\n", print "Usage: wpsbuilds.pl <WPSLIST> <target>\n",
"Run this script in the root of the target build, and it will put all the\n", "Run this script in the root of the target build, and it will put all the\n",
"stuff in .rockbox/wps/\n"; "stuff in $rbdir/wps/\n";
exit; exit;
} }
@ -71,7 +99,7 @@ STOP
open(GETSIZE, "$c|"); open(GETSIZE, "$c|");
my ($height, $width); my ($height, $width, $depth);
while(<GETSIZE>) { while(<GETSIZE>) {
if($_ =~ /^Height: (\d*)/) { if($_ =~ /^Height: (\d*)/) {
$height = $1; $height = $1;
@ -96,15 +124,15 @@ sub mkdirs
{ {
my $wpsdir = $wps; my $wpsdir = $wps;
$wpsdir =~ s/\.(r|)wps//; $wpsdir =~ s/\.(r|)wps//;
mkdir ".rockbox/wps", 0777; mkdir "$rbdir/wps", 0777;
mkdir ".rockbox/themes", 0777; mkdir "$rbdir/themes", 0777;
if( -d ".rockbox/wps/$wpsdir") { if( -d "$rbdir/wps/$wpsdir") {
#print STDERR "wpsbuild warning: directory wps/$wpsdir already exists!\n"; #print STDERR "wpsbuild warning: directory wps/$wpsdir already exists!\n";
} }
else else
{ {
mkdir ".rockbox/wps/$wpsdir", 0777; mkdir "$rbdir/wps/$wpsdir", 0777;
} }
} }
@ -112,9 +140,9 @@ sub copybackdrop
{ {
#copy the backdrop file into the build dir #copy the backdrop file into the build dir
if ($backdrop ne '') { if ($backdrop ne '') {
$dst = $backdrop; my $dst = $backdrop;
$dst =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//; $dst =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//;
$cmd = "cp $ROOT/$backdrop .rockbox/$dst"; my $cmd = "cp $ROOT/$backdrop $rbdir/$dst";
`$cmd`; `$cmd`;
} }
} }
@ -123,10 +151,10 @@ sub copythemefont
{ {
#copy the font specified by the theme #copy the font specified by the theme
$o=$font; my $o=$font;
$o =~ s/\.fnt/\.bdf/; $o =~ s/\.fnt/\.bdf/;
`mkdir .rockbox/fonts/ >/dev/null 2>&1`; mkdir "$rbdir/fonts";
$cmd ="$ROOT/tools/convbdf -f -o \".rockbox/fonts/$font\" \"$ROOT/fonts/$o\" "; my $cmd ="$ROOT/tools/convbdf -f -o \"$rbdir/fonts/$font\" \"$ROOT/fonts/$o\" ";
`$cmd`; `$cmd`;
} }
@ -135,6 +163,7 @@ sub copythemeicon
#copy the icon specified by the theme #copy the icon specified by the theme
if ($iconset ne '') { if ($iconset ne '') {
$iconset =~ s/.rockbox/$rbdir/;
$iconset =~ /\/(.*icons\/(.*))/i; $iconset =~ /\/(.*icons\/(.*))/i;
`cp $ROOT/icons/$2 $1`; `cp $ROOT/icons/$2 $1`;
} }
@ -145,6 +174,7 @@ sub copythemeviewericon
#copy the viewer icon specified by the theme #copy the viewer icon specified by the theme
if ($viewericon ne '') { if ($viewericon ne '') {
$viewericon =~ s/.rockbox/$rbdir/;
$viewericon =~ /\/(.*icons\/(.*))/i; $viewericon =~ /\/(.*icons\/(.*))/i;
`cp $ROOT/icons/$2 $1`; `cp $ROOT/icons/$2 $1`;
} }
@ -164,10 +194,10 @@ sub copywps
# print "$req_t_wps $req_g_wps\n"; # print "$req_t_wps $req_g_wps\n";
if (-e "$dir/$req_t_wps" ) { if (-e "$dir/$req_t_wps" ) {
system("cp $dir/$req_t_wps .rockbox/wps/$wps"); system("cp $dir/$req_t_wps $rbdir/wps/$wps");
} elsif (-e "$dir/$req_g_wps") { } elsif (-e "$dir/$req_g_wps") {
system("cp $dir/$req_g_wps .rockbox/wps/$wps"); system("cp $dir/$req_g_wps $rbdir/wps/$wps");
open(WPSFILE, "$dir/$req_g_wps"); open(WPSFILE, "$dir/$req_g_wps");
while (<WPSFILE>) { while (<WPSFILE>) {
@ -178,12 +208,12 @@ sub copywps
if ($#filelist >= 0) { if ($#filelist >= 0) {
if (-e "$dir/$wps_prefix/$req_g") { if (-e "$dir/$wps_prefix/$req_g") {
foreach $file (@filelist) { foreach $file (@filelist) {
system("cp $dir/$wps_prefix/$req_g/$file .rockbox/wps/$wps_prefix/"); system("cp $dir/$wps_prefix/$req_g/$file $rbdir/wps/$wps_prefix/");
} }
} }
elsif (-e "$dir/$wps_prefix") { elsif (-e "$dir/$wps_prefix") {
foreach $file (@filelist) { foreach $file (@filelist) {
system("cp $dir/$wps_prefix/$file .rockbox/wps/$wps_prefix/"); system("cp $dir/$wps_prefix/$file $rbdir/wps/$wps_prefix/");
} }
} }
else { else {
@ -210,11 +240,11 @@ sub buildcfg {
\# $cfg generated by wpsbuild.pl \# $cfg generated by wpsbuild.pl
\# $wps is made by $author \# $wps is made by $author
\# \#
wps: /.rockbox/wps/$wps wps: /$rbdir/wps/$wps
MOO MOO
; ;
if($font) { if($font) {
push @out, "font: /.rockbox/fonts/$font\n"; push @out, "font: /$rbdir/fonts/$font\n";
} }
if($fgcolor && $main_depth > 2) { if($fgcolor && $main_depth > 2) {
push @out, "foreground color: $fgcolor\n"; push @out, "foreground color: $fgcolor\n";
@ -231,7 +261,7 @@ MOO
} else { } else {
# clip resolution from filename # clip resolution from filename
$backdrop =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//; $backdrop =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//;
push @out, "backdrop: /.rockbox/$backdrop\n"; push @out, "backdrop: /$rbdir/$backdrop\n";
} }
} }
if($lineselectstart && $main_depth > 2) { if($lineselectstart && $main_depth > 2) {
@ -256,13 +286,13 @@ MOO
push @out, "filetype colours: $filetylecolor\n"; push @out, "filetype colours: $filetylecolor\n";
} }
if($rwps && $has_remote ) { if($rwps && $has_remote ) {
push @out, "rwps: /.rockbox/wps/$rwps\n"; push @out, "rwps: /$rbdir/wps/$rwps\n";
} }
if(-f ".rockbox/wps/$cfg") { if(-f "$rbdir/wps/$cfg") {
print STDERR "wpsbuild warning: wps/$cfg already exists!\n"; print STDERR "wpsbuild warning: wps/$cfg already exists!\n";
} }
else { else {
open(CFG, ">.rockbox/themes/$cfg"); open(CFG, ">$rbdir/themes/$cfg");
print CFG @out; print CFG @out;
close(CFG); close(CFG);
} }
@ -273,11 +303,15 @@ MOO
($remote_height, $remote_width, $remote_depth) = getlcdsizes(1); ($remote_height, $remote_width, $remote_depth) = getlcdsizes(1);
#print "LCD: ${main_height}x${main_width}x${main_depth}\n"; #print "LCD: ${main_height}x${main_width}x${main_depth}\n";
$has_remote = 1 if ($remote_height && $remote_width && remote_depth); $has_remote = 1 if ($remote_height && $remote_width && $remote_depth);
my $isrwps;
my $within;
open(WPS, "<$wpslist"); open(WPS, "<$wpslist");
while(<WPS>) { while(<WPS>) {
my $l = $_; my $l = $_;
# remove CR # remove CR
$l =~ s/\r//g; $l =~ s/\r//g;
if($l =~ /^ *\#/) { if($l =~ /^ *\#/) {
@ -334,7 +368,7 @@ while(<WPS>) {
my $wpsdir = $1; my $wpsdir = $1;
# If this WPS installable on this platform, one of the following # If this WPS installable on this platform, one of the following
# two files will be present # two files will be present
foreach $d (@depthlist) { foreach my $d (@depthlist) {
next if ($d > $rdepth); next if ($d > $rdepth);
$req_g = $rwidth . "x" . $rheight . "x" . $d; $req_g = $rwidth . "x" . $rheight . "x" . $d;