diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index be25bd0125..867f2b6a18 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -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,22 +806,29 @@ 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) { @@ -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 } diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index 6e20ed8da9..c4e319fca5 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h @@ -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 diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 6c09aa3d40..fdedf01866 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -753,7 +753,7 @@ id: LANG_CHANNEL_STEREO - desc: in sound_settings + desc: in sound_settings and radio screen user: core *: "Stereo" @@ -767,7 +767,7 @@ id: LANG_CHANNEL_MONO - desc: in sound_settings + desc: in sound_settings and radio screen user: core *: "Mono" diff --git a/firmware/export/button.h b/firmware/export/button.h index 3abad2d4f0..75a72ab66e 100644 --- a/firmware/export/button.h +++ b/firmware/export/button.h @@ -24,7 +24,7 @@ #include #include #include "config.h" -#ifndef __PCTOOL__ +#if defined(CHECKWPS) || !defined(__PCTOOL__) #include "button-target.h" #endif diff --git a/firmware/export/config.h b/firmware/export/config.h index 9812db9161..5ea5c71c70 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -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 diff --git a/tools/checkwps/SOURCES b/tools/checkwps/SOURCES index c00268fa75..45d59a16a5 100644 --- a/tools/checkwps/SOURCES +++ b/tools/checkwps/SOURCES @@ -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 diff --git a/tools/checkwps/checkwps.c b/tools/checkwps/checkwps.c index 932dc3884c..dd2115d5ef 100644 --- a/tools/checkwps/checkwps.c +++ b/tools/checkwps/checkwps.c @@ -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; @@ -167,9 +167,9 @@ int remote_getwidth(void) { return LCD_REMOTE_WIDTH; } int remote_getheight(void) { return LCD_REMOTE_HEIGHT; } #endif -static inline bool backdrop_load(const char *filename, char* backdrop_buffer) -{ - (void)filename; (void)backdrop_buffer; return true; +static inline bool backdrop_load(const char *filename, char* backdrop_buffer) +{ + (void)filename; (void)backdrop_buffer; return true; } struct screen screens[NB_SCREENS] = @@ -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); diff --git a/tools/checkwps/checkwps.make b/tools/checkwps/checkwps.make index 3004bbc2ed..ce02ce3ffd 100644 --- a/tools/checkwps/checkwps.make +++ b/tools/checkwps/checkwps.make @@ -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 $( $(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" > $@ diff --git a/tools/configure b/tools/configure index 1a03f3f010..0f617d7093 100755 --- a/tools/configure +++ b/tools/configure @@ -4307,7 +4307,6 @@ fi uname=`uname` simcc "checkwps" toolset=''; - t_cpu=''; GCCOPTS=''; rbdir='.' extradefines="$extradefines -DDEBUG"