FS#8482 take two. Make the language files built first, so that the largest

size can be used as buffer size for languages. Work to this also contributed 
by Jonas Haggqvist.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16343 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Daniel Stenberg 2008-02-18 12:17:34 +00:00
parent 43141cbfdb
commit 8ebbe99328
8 changed files with 108 additions and 42 deletions

View file

@ -41,6 +41,7 @@ codecs/Tremor/*
eqs/*.cfg
gui/*.[ch]
keymaps/*.[ch]
lang/SOURCES
lang/*.lang
menus/*.[ch]
metadata/*.[ch]

View file

@ -0,0 +1,37 @@
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id: $
#
# the header we generate
HEADER = $(BUILDDIR)/max_language_size.h
# This sets up 'SRC' based on the files mentioned in SOURCES
include $(TOOLSDIR)/makesrc.inc
SOURCES=$(SRC)
# OUTP is the list of files to depend upon
OUTP = $(patsubst %.lang,$(OBJDIR)/%.lng, $(SOURCES))
# the generated file with features specified genlang-style
FEATS=$(BUILDDIR)/apps/genlang-features
ifndef V
SILENT=@
endif
PRINTS=$(SILENT)$(call info,$(1))
all: $(HEADER)
# generic rule for creating .lng from .lang
$(OBJDIR)/%.lng : %.lang $(FEATS)
$(call PRINTS,GENLANG $<)
$(SILENT)$(TOOLSDIR)/genlang -e=$(APPSDIR)/lang/english.lang -t=$(MODELNAME)`cat $(FEATS)` -i=$(TARGET_ID) -b=$@ $<
$(HEADER): $(OUTP)
$(call PRINTS,Make $(HEADER))
echo "#define MAX_LANGUAGE_SIZE `du -b $(OBJDIR)/* |sort -n |tail -n 1 |cut -f 1`" > $(HEADER)

View file

@ -0,0 +1,35 @@
#ifdef HAVE_LCD_BITMAP /* Not for the Player */
*.lang
#else
afrikaans.lang
bulgarian.lang
catala.lang
czech.lang
dansk.lang
deutsch.lang
eesti.lang
english.lang
espanol.lang
esperanto.lang
finnish.lang
francais.lang
galego.lang
greek.lang
hebrew.lang
islenska.lang
italiano.lang
magyar.lang
nederlands.lang
norsk.lang
norsk-nynorsk.lang
polski.lang
portugues-brasileiro.lang
portugues.lang
romaneste.lang
russian.lang
slovenscina.lang
svenska.lang
tagalog.lang
turkce.lang
wallisertitsch.lang
#endif /* HAVE_LCD_BITMAP */

View file

@ -1,3 +1,5 @@
#ifndef __LANGUAGE_H
#define __LANGUAGE_H
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
@ -7,7 +9,7 @@
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2002 Daniel Stenberg
* Copyright (C) 2002, 2008 Daniel Stenberg
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
@ -17,8 +19,10 @@
*
****************************************************************************/
/* size of the buffer used for loadable, translated strings */
#define MAX_LANGUAGE_SIZE 23500
/* The following header is generated by the build system and only defines
MAX_LANGUAGE_SIZE to be the size of the largest currently available
language! */
#include "max_language_size.h"
/* both these must match the two initial bytes in the binary lang file */
#define LANGUAGE_COOKIE 0x1a
@ -29,3 +33,5 @@ void lang_init(void);
/* load a given language file */
int lang_load(const char *filename);
#endif

View file

@ -154,30 +154,6 @@ sub filesize {
return $size;
}
sub buildlangs {
my ($outputlang)=@_;
my $dir = "$ROOT/apps/lang";
opendir(DIR, $dir);
my @files = grep { /\.lang$/ } readdir(DIR);
closedir(DIR);
# Exclude some bad languages (uncomment and adjust in case of release
# and/or End Times)
# @files = grep(!/(afrikaans|hindi|slovenscina|turkce)\.lang/, @files);
# Exclude more languages on the player which won't work on charcell display
if ($archos =~ /^"?player:/ ) {
@files = grep(!/(chinese-simp|chinese-trad|hindi|japanese|korean|thai)\.lang/, @files);
}
for(@files) {
my $output = $_;
$output =~ s/(.*)\.lang/$1.lng/;
print "$ROOT/tools/genlang -e=$dir/english.lang -t=$archos -i=$target_id -b=$outputlang/$output $dir/$_\n" if($verbose);
system ("$ROOT/tools/genlang -e=$dir/english.lang -t=$archos -i=$target_id -b=$outputlang/$output $dir/$_ >/dev/null 2>&1");
}
}
sub buildzip {
my ($zip, $image, $fonts)=@_;
@ -413,15 +389,8 @@ STOP
# and the info file
system("cp rockbox-info.txt .rockbox/");
# now copy the file made for reading on the unit:
#if($notplayer) {
# `cp $webroot/docs/Help-JBR.txt .rockbox/docs/`;
#}
#else {
# `cp $webroot/docs/Help-Stu.txt .rockbox/docs/`;
#}
buildlangs(".rockbox/langs");
# copy the already built lng files
`cp apps/lang/*lng .rockbox/langs/`
}

16
tools/configure vendored
View file

@ -1785,6 +1785,11 @@ else
voicetoolset="voicefont wavtrim"
fi
if test "$apps" = "apps"; then
# only when we build "real" apps we build the .lng files
buildlangs="langs"
fi
sed > Makefile \
-e "s,@ROOTDIR@,${rootdir},g" \
-e "s,@DEBUG@,${debug},g" \
@ -1842,6 +1847,7 @@ sed > Makefile \
-e "s,@TTS_ENGINE@,${TTS_ENGINE},g" \
-e "s,@TTS_OPTS@,${TTS_OPTS},g" \
-e "s,@VOICETOOLSET@,${voicetoolset},g" \
-e "s,@LANGS@,${buildlangs},g" \
<<EOF
## Automaticly generated. http://www.rockbox.org/
@ -1919,14 +1925,14 @@ export ENCODER=@ENCODER@
# Do not print "Entering directory ..."
MAKEFLAGS += --no-print-directory
.PHONY: all clean tags zip tools manual bin build info
.PHONY: all clean tags zip tools manual bin build info langs
all: info
info: build
\$(SILENT)\$(TOOLSDIR)/mkinfo.pl \$(BUILDDIR)/rockbox-info.txt
build: tools
build: tools @LANGS@
@SIMUL1@
@SIMUL2@
\$(SILENT)\$(MAKE) -C \$(FIRMDIR) OBJDIR=\$(BUILDDIR)/firmware
@ -1952,7 +1958,7 @@ clean:
manual *.pdf *.a credits.raw @OUTPUT@ bitmaps pluginbitmaps \
@ARCHOSROM@ @FLASHFILE@ UI256.bmp rockbox-full.zip \
html txt rockbox-manual*.zip sysfont.h rockbox-info.txt \
voicefontids *.wav *.mp3 *.voice
voicefontids *.wav *.mp3 *.voice max_language_size.h
tools:
\$(SILENT)\$(MAKE) -C \$(TOOLSDIR) CC=\$(HOSTCC) AR=\$(HOSTAR) @TOOLSET@
@ -1996,6 +2002,10 @@ bzip2: tar
gzip: tar
\$(SILENT)gzip -f9 rockbox.tar
langs: features
\$(SILENT)mkdir -p \$(BUILDDIR)/apps/lang
\$(SILENT)\$(MAKE) -C \$(APPSDIR)/lang OBJDIR=\$(BUILDDIR)/apps/lang
manual: manual-pdf
manual-pdf:
\$(SILENT)\$(MAKE) -C \$(MANUALDIR) OBJDIR=\$(BUILDDIR)/manual manual-pdf

View file

@ -24,6 +24,11 @@ $(OBJDIR)/%.o: %.S
# play nicely into this as it then adds a dependency to the lang.h file
# without the proper path.
#
# The trailing sed hack for a range of files is present because how gcc works
# for generating dependencies when the include file doesn't exist. Then it
# makes the dependency without any path, and that breaks how things work for
# us. We thus add the correct path for a few generated files!
#
$(DEPFILE): $(SOURCES)
$(SILENT)mkdir -p $(dir $(DEPFILE))
$(SILENT)rm -f $(DEPFILE)
@ -40,7 +45,10 @@ $(DEPFILE): $(SOURCES)
rm $$del; \
del=""; \
fi \
done | sed -e "s:[^[:space:]]*lang.h:$(OBJDIR)/lang.o:" > $(DEPFILE); \
done | sed -e "s:[^[:space:]]*lang.h:$(OBJDIR)/lang.o:" \
-e "s:[^[:space:]]*sysfont.h:$(BUILDDIR)/sysfont.h:" \
-e "s:[^[:space:]]*max_language_size.h:$(BUILDDIR)/max_language_size.h:" \
> $(DEPFILE); \
echo "oo" > /dev/null )
tags:

View file

@ -10,5 +10,5 @@
# to make this do right when used on Mac OS X.
SRC := $(shell cat SOURCES | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) \
$(TARGET) $(DEFINES) $(EXTRA_DEFINES) -E -P -include "config.h" - | \
grep -v "^\#")
$(TARGET) $(DEFINES) $(EXTRA_DEFINES) -E -P -include "config.h" - 2>/dev/null \
| grep -v "^\#")