2010-03-14 BVK Chaitanya <bvk.groups@gmail.com>
GRUB shell lexer and parser improvements. * conf/any-emu.rmk: Build rule updates. * conf/common.rmk: Likewise. * conf/i386-coreboot.rmk: Likewise. * conf/i386-efi.rmk: Likewise. * conf/i386-ieee1275.rmk: Likewise. * conf/i386-pc.rmk: Likewise. * conf/powerpc-ieee1275.rmk: Likewise. * conf/x86_64-efi.rmk: Likewise. * configure.ac: Configure check for flex. * include/grub/script_sh.h (grub_script_arg_type_t): More argument types. (grub_lexer_param): Struct member updates. (grub_parser_param): Likewise. (GRUB_LEXER_TOKEN_MAX): Maximum token size. (GRUB_LEXER_RECORD_INCREMENT): Memory increments' size. (grub_script_lexer_init): Prototype update. (grub_script_lexer_record_start): Likewise. (grub_script_lexer_record_stop): Likewise. (grub_script_lexer_yywrap): New function prototype. (grub_script_lexer_fini): Likewise. (grub_script_execute_argument_to_string): Removed by... (grub_script_execute_argument_to_argv): ...better version. * script/execute.c (ROUND_UPTO): New macro. (grub_script_execute_cmdline): Out of memory fixes. (grub_script_execute_menuentry): Likewise. (grub_script_execute_argument_to_string): Removed. Update all users by... (grub_script_execute_argument_to_argv): ...better version. * script/function.c (grub_script_function_create): Use grub_script_execute_argument_to_argv instead of grub_script_execute_argument_to_string. * script/lexer.c (check_varstate): Removed. (check_textstate): Removed. (grub_script_lexer_record_start): Likewise. (grub_script_lexer_record_stop): Likewise. (recordchar): Replaced with... (grub_script_lexer_record): ...new function. (nextchar): Removed. (grub_script_lexer_init): Rewritten. (grub_script_yylex): Rewritten. (append_newline): New function. (grub_script_lexer_yywrap): New function. (grub_script_lexer_fini): New function. (grub_script_yyerror): Sets error flag. * script/yylex.l: New file. (grub_lexer_yyfree): Wrapper for flex yyffre. (grub_lexer_yyalloc): Likewise. (grub_lexer_yyrealloc): Likewise. * script/parser.y: Refactored. * script/script.c (grub_script_arg_add): Out of memory fixes. (grub_script_add_arglist): Likewise. (grub_script_create_cmdline): Likewise. (grub_script_create_cmdmenu): Likewise. (grub_script_add_cmd): Likewise. (grub_script_parse): Use grub_script_lexer_fini to deallocated. * util/grub-script-check.c (grub_script_execute_menuentry): Remove unnecessary code. * tests/grub_script_echo1.in: New testcase. * tests/grub_script_vars1.in: New testcase. * tests/grub_script_echo_keywords.in: New testcase.
This commit is contained in:
commit
0cdc2a095b
18 changed files with 1211 additions and 643 deletions
|
@ -6,16 +6,15 @@ COMMON_CFLAGS += -nostdinc -isystem $(shell $(TARGET_CC) -print-file-name=includ
|
|||
util/grub-emu.c_DEPENDENCIES = grub_emu_init.h
|
||||
kernel_img_RELOCATABLE = yes
|
||||
pkglib_PROGRAMS = kernel.img
|
||||
kernel_img_SOURCES = kern/device.c kern/disk.c kern/dl.c kern/env.c \
|
||||
kern/err.c kern/list.c kern/handler.c \
|
||||
kern/command.c kern/corecmd.c kern/file.c \
|
||||
kern/fs.c kern/main.c kern/misc.c kern/parser.c \
|
||||
kern/partition.c kern/term.c \
|
||||
kernel_img_SOURCES = kern/device.c kern/disk.c kern/dl.c kern/env.c \
|
||||
kern/err.c kern/list.c kern/handler.c kern/command.c \
|
||||
kern/corecmd.c kern/file.c kern/fs.c kern/main.c kern/misc.c \
|
||||
kern/parser.c kern/partition.c kern/term.c \
|
||||
kern/rescue_reader.c kern/rescue_parser.c \
|
||||
\
|
||||
util/console.c util/grub-emu.c util/misc.c \
|
||||
util/hostdisk.c util/getroot.c util/time.c \
|
||||
\
|
||||
\
|
||||
util/console.c util/grub-emu.c util/misc.c util/hostdisk.c \
|
||||
util/getroot.c util/time.c \
|
||||
\
|
||||
grub_emu_init.c gnulib/progname.c util/hostfs.c disk/host.c
|
||||
kernel_img_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Wno-undef -I$(srcdir)/gnulib
|
||||
kernel_img_LDFLAGS = $(COMMON_LDFLAGS)
|
||||
|
|
|
@ -94,6 +94,13 @@ grub_mkrelpath_SOURCES = gnulib/progname.c util/grub-mkrelpath.c util/misc.c
|
|||
bin_UTILITIES += grub-bin2h
|
||||
grub_bin2h_SOURCES = gnulib/progname.c util/bin2h.c
|
||||
|
||||
# For the lexer.
|
||||
grub_script.yy.c grub_script.yy.h: script/yylex.l
|
||||
$(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(srcdir)/script/yylex.l
|
||||
sed -i 's/^#include.*\(<stdio\.h>\|<string\.h>\|<errno\.h>\|<stdlib\.h>\|<unistd\.h>\)//g' grub_script.yy.h
|
||||
sed -i 's/^#include.*\(<stdio\.h>\|<string\.h>\|<errno\.h>\|<stdlib\.h>\|<unistd\.h>\)//g' grub_script.yy.c
|
||||
DISTCLEANFILES += grub_script.yy.c grub_script.yy.h
|
||||
|
||||
# For grub-script-check.
|
||||
bin_UTILITIES += grub-script-check
|
||||
util/grub-script-check.c_DEPENDENCIES = grub_script_check_init.h
|
||||
|
@ -101,7 +108,8 @@ grub_script_check_SOURCES = gnulib/progname.c gnulib/getdelim.c gnulib/getline.c
|
|||
util/grub-script-check.c util/misc.c \
|
||||
script/main.c script/script.c script/function.c script/lexer.c \
|
||||
kern/handler.c kern/err.c kern/parser.c kern/list.c \
|
||||
kern/misc.c kern/env.c grub_script_check_init.c grub_script.tab.c
|
||||
kern/misc.c kern/env.c grub_script_check_init.c grub_script.tab.c \
|
||||
grub_script.yy.c
|
||||
|
||||
MOSTLYCLEANFILES += symlist.c kernel_syms.lst
|
||||
DEFSYMFILES += kernel_syms.lst
|
||||
|
@ -635,7 +643,7 @@ normal_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|||
|
||||
# For sh.mod.
|
||||
sh_mod_SOURCES = script/main.c script/script.c script/execute.c \
|
||||
script/function.c script/lexer.c grub_script.tab.c
|
||||
script/function.c script/lexer.c grub_script.tab.c grub_script.yy.c
|
||||
sh_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||
sh_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||
|
||||
|
|
|
@ -37,12 +37,28 @@ example_scripted_test_SOURCES = tests/example_scripted_test.in
|
|||
check_SCRIPTS += example_grub_script_test
|
||||
example_grub_script_test_SOURCES = tests/example_grub_script_test.in
|
||||
|
||||
#
|
||||
# Rules for real tests
|
||||
#
|
||||
|
||||
check_SCRIPTS += grub_script_echo1
|
||||
grub_script_echo1_SOURCES = tests/grub_script_echo1.in
|
||||
|
||||
check_SCRIPTS += grub_script_echo_keywords
|
||||
grub_script_echo_keywords_SOURCES = tests/grub_script_echo_keywords.in
|
||||
|
||||
check_SCRIPTS += grub_script_vars1
|
||||
grub_script_vars1_SOURCES = tests/grub_script_vars1.in
|
||||
|
||||
# List of tests to execute on "make check"
|
||||
SCRIPTED_TESTS = example_scripted_test
|
||||
SCRIPTED_TESTS += example_grub_script_test
|
||||
UNIT_TESTS = example_unit_test
|
||||
FUNCTIONAL_TESTS = example_functional_test.mod
|
||||
# SCRIPTED_TESTS = example_scripted_test
|
||||
# SCRIPTED_TESTS += example_grub_script_test
|
||||
# UNIT_TESTS = example_unit_test
|
||||
# FUNCTIONAL_TESTS = example_functional_test.mod
|
||||
|
||||
SCRIPTED_TESTS = grub_script_echo1
|
||||
SCRIPTED_TESTS += grub_script_echo_keywords
|
||||
SCRIPTED_TESTS += grub_script_vars1
|
||||
|
||||
# dependencies between tests and testing-tools
|
||||
$(SCRIPTED_TESTS): grub-shell grub-shell-tester
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue