#!/bin/sh
#
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
#
#
# Copyright (c) 2007 Alexander Levin
#
#
# This script produces the file "menu_call_stats_list.c" containing
# pointers to the call statistics for all menu items in the core RockBox.
# Files with menu items that should get into this list must be compiled
# so that all the temporary files are kept (in particular, the result of
# the preprocessing). Usually this is done by including '-save-temps' into
# the list of the compiler options. In that case, the preprocessed files
# have the extension '.i' and are stored in the same directory as the
# original '.c' files.
BASE_NAME = $(OBJDIR)/menu_call_stats_list
TMP_NAME = $(BASE_NAME).tmp
OUT_NAME = $(BASE_NAME).c
STRUCT = "struct s_call_stats"
# Process all *.i files (results of the preprocessing), find strings where
# stat structs are defined, isolate the definitions, and put them all to a
# temporary file.
find . -name "$(APPSDIR)/*.i" -exec grep "$(STRUCT) item_call" {} \; | sed -e "s/.*\($(STRUCT) item[^ ]*\) .*/\1/" | sort > $(TMP_NAME)
#
# Now produce the .c file with the array containing addresses of all the structs.
#
echo "/* This file was generated automatically. Please do not edit. */" > $(OUT_NAME)
echo "#include \"menu.h\"" >> $(OUT_NAME)
echo "" >> $(OUT_NAME)
cat $(TMP_NAME) | sed -e "s/\(.*\)/extern \1;/" >> $(OUT_NAME)
echo "" >> $(OUT_NAME)
echo "$(STRUCT)" *menu_call_stats_list[] = {" >> $(OUT_NAME)
cat $(TMP_NAME) | sed -e "s/.* \(.*\)/ \&\1,/" >> $(OUT_NAME)
echo "};" >> $(OUT_NAME)
# Delete the temporary file
rm $(TMP_NAME)