1
0
Fork 0
forked from len0rd/rockbox

checkwps: Validate translated strings (%Sx)

In verbose mode it will log valid the strings found, otherwise it will
only complain when we encounter a missing string.

Unfortunately a missing string is not inherently a problem, due to
conditional expressions.  So all we can do is complain in checkwps
or if wps debugging is turned on.

Meanwhile, this is the first step in actually enumerating the translated
strings used by themes.

Change-Id: Ia93b333085e825d5b085c4d372ad8e13aa3e3ba1
This commit is contained in:
Solomon Peachy 2024-05-23 21:36:54 -04:00
parent ac20f8a73c
commit 8b8c0c7c2a
9 changed files with 72 additions and 24 deletions

View file

@ -44,6 +44,8 @@
#else
#include "action.h"
#include "checkwps.h"
#include "language.h"
#include "lang_enum.h"
#include "audio.h"
#define lang_is_rtl() (false)
#define DEBUGF printf
@ -804,23 +806,30 @@ static int parse_setting_and_lang(struct skin_element *element,
struct wps_token *token,
struct wps_data *wps_data)
{
/* NOTE: both the string validations that happen in here will
* automatically PASS on checkwps because its too hard to get
* settings_list.c and english.lang built for it.
* If that ever changes remove the #ifndef __PCTOOL__'s here
*/
(void)wps_data;
char *temp = get_param_text(element, 0);
if (token->type == SKIN_TOKEN_TRANSLATEDSTRING)
{
#ifndef __PCTOOL__
int i = lang_english_to_id(temp);
if (i < 0)
if (i < 0) {
DEBUGF("Translated String [%s] NOT FOUND\n", temp);
/* Due to conditionals in a theme, a missing string
might never be hit. So currently we have to just treat
this as an advisory */
#if 1
i = LANG_LAST_INDEX_IN_ARRAY;
token->value.i = i;
#else
return WPS_ERROR_INVALID_PARAM;
#endif
}
#ifdef DEBUG_SKIN_ENGINE
else if (debug_wps) {
DEBUGF("Translated String [%s] = %d\n", temp, i);
}
#endif
token->value.i = i;
}
else if (element->params_count > 1)
{
if (element->params_count > 4)
@ -830,11 +839,17 @@ static int parse_setting_and_lang(struct skin_element *element,
}
else
{
/* NOTE: The string validations that happen here will
* automatically PASS on checkwps because its too hard to get
* settings_list.c built for a specific target.
* If that ever changes remove the #ifndef __PCTOOL__ here
*/
#ifndef __PCTOOL__
const struct settings_list *setting = find_setting_by_cfgname(temp);
if (!setting)
if (!setting) {
DEBUGF("Invalid setting [%s]\n", temp);
return WPS_ERROR_INVALID_PARAM;
}
token->value.xdata = (void *)setting;
#endif
}

View file

@ -442,7 +442,8 @@ enum skin_find_what {
};
void *skin_find_item(const char *label, enum skin_find_what what,
struct wps_data *data);
#ifdef SIMULATOR
#if defined(SIMULATOR) || defined(CHECKWPS)
#define DEBUG_SKIN_ENGINE
extern bool debug_wps;
#endif

View file

@ -753,7 +753,7 @@
</phrase>
<phrase>
id: LANG_CHANNEL_STEREO
desc: in sound_settings
desc: in sound_settings and radio screen
user: core
<source>
*: "Stereo"
@ -767,7 +767,7 @@
</phrase>
<phrase>
id: LANG_CHANNEL_MONO
desc: in sound_settings
desc: in sound_settings and radio screen
user: core
<source>
*: "Mono"

View file

@ -24,7 +24,7 @@
#include <stdbool.h>
#include <inttypes.h>
#include "config.h"
#ifndef __PCTOOL__
#if defined(CHECKWPS) || !defined(__PCTOOL__)
#include "button-target.h"
#endif

View file

@ -915,7 +915,7 @@ Lyre prototype 1 */
/* Enable the directory cache and tagcache in RAM if we have
* plenty of RAM. Both features can be enabled independently. */
#if (MEMORYSIZE >= 8) && !defined(BOOTLOADER) && !defined(__PCTOOL__) \
#if (MEMORYSIZE >= 8) && !defined(BOOTLOADER) && (defined(CHECKWPS) || !defined(__PCTOOL__)) \
&& !defined(APPLICATION)
#ifndef SIMULATOR
#define HAVE_DIRCACHE

View file

@ -2,6 +2,7 @@
../../apps/gui/skin_engine/skin_parser.c
../../apps/gui/skin_engine/skin_backdrops.c
../../apps/gui/viewport.c
../../apps/language.c
../../apps/misc.c
../../firmware/common/strmemccpy.c
../../firmware/common/strlcpy.c

View file

@ -35,7 +35,7 @@
#include "file.h"
#include "font.h"
bool debug_wps = true;
bool debug_wps = false;
int wps_verbose_level = 0;
char *skin_buffer;
@ -282,6 +282,7 @@ int main(int argc, char **argv)
while (argv[1][i] && argv[1][i] == 'v') {
i++;
wps_verbose_level++;
debug_wps = true;
}
}
skin_buffer = malloc(SKIN_BUFFER_SIZE);

View file

@ -4,14 +4,14 @@
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id$
#
ENGLISH := english
# Use global GCCOPTS
GCCOPTS += -D__PCTOOL__ -DCHECKWPS
CHECKWPS_SRC = $(call preprocess, $(TOOLSDIR)/checkwps/SOURCES)
CHECKWPS_OBJ = $(call c2obj,$(CHECKWPS_SRC))
CHECKWPS_OBJ = $(call c2obj,$(CHECKWPS_SRC)) $(BUILDDIR)/lang/lang_core.o
OTHER_SRC += $(CHECKWPS_SRC)
@ -29,7 +29,9 @@ INCLUDES = -I$(ROOTDIR)/apps/gui \
-I$(ROOTDIR)/lib/rbcodec/metadata \
-I$(ROOTDIR)/lib/rbcodec/dsp \
-I$(APPSDIR) \
-I$(BUILDDIR)
-I$(BUILDDIR) \
-I$(BUILDDIR)/lang \
$(TARGET_INC)
.SECONDEXPANSION: # $$(OBJ) is not populated until after this
@ -37,3 +39,32 @@ $(BUILDDIR)/$(BINARY): $$(CHECKWPS_OBJ) $$(CORE_LIBS)
@echo LD $(BINARY)
$(SILENT)$(HOSTCC) -o $@ $+ $(INCLUDE) $(GCCOPTS) \
-L$(BUILDDIR)/lib $(call a2lnk,$(CORE_LIBS))
#### Everything below is hacked in from apps.make and lang.make
$(BUILDDIR)/apps/features: $(ROOTDIR)/apps/features.txt
$(SILENT)mkdir -p $(BUILDDIR)/apps
$(SILENT)mkdir -p $(BUILDDIR)/lang
$(call PRINTS,PP $(<F))
$(SILENT)$(CC) $(PPCFLAGS) \
-E -P -imacros "config.h" -imacros "button.h" -x c $< | \
grep -v "^#" | grep -v "^ *$$" > $(BUILDDIR)/apps/features; \
$(BUILDDIR)/apps/genlang-features: $(BUILDDIR)/apps/features
$(call PRINTS,GEN $(subst $(BUILDDIR)/,,$@))tr \\n : < $< > $@
$(BUILDDIR)/lang_enum.h: $(BUILDDIR)/lang/lang.h $(TOOLSDIR)/genlang
$(BUILDDIR)/lang/lang.h: $(ROOTDIR)/apps/lang/$(ENGLISH).lang $(BUILDDIR)/apps/features $(TOOLSDIR)/genlang
$(call PRINTS,GEN lang.h)
$(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \
perl -s $(TOOLSDIR)/genlang -p=$(BUILDDIR)/lang -t=$(MODELNAME)$$feat $<
$(BUILDDIR)/lang/lang_core.c: $(BUILDDIR)/lang/lang.h $(TOOLSDIR)/genlang
$(BUILDDIR)/lang/lang_core.o: $(BUILDDIR)/lang/lang.h $(BUILDDIR)/lang/lang_core.c
$(call PRINTS,CC lang_core.c)$(CC) $(CFLAGS) -c $(BUILDDIR)/lang/lang_core.c -o $@
$(BUILDDIR)/lang/max_language_size.h: $(BUILDDIR)/lang/lang.h
$(call PRINTS,GEN $(subst $(BUILDDIR)/,,$@))
$(SILENT)echo "#define MAX_LANGUAGE_SIZE 131072" > $@

1
tools/configure vendored
View file

@ -4307,7 +4307,6 @@ fi
uname=`uname`
simcc "checkwps"
toolset='';
t_cpu='';
GCCOPTS='';
rbdir='.'
extradefines="$extradefines -DDEBUG"