# Used by various components. These rules need to precede them.
script/lexer.c_DEPENDENCIES = grub_script.tab.h
-sbin_UTILITIES += grub-emu
+#sbin_UTILITIES += grub-emu
util/grub-emu.c_DEPENDENCIES = grub_emu_init.h
-grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
- commands/configfile.c commands/echo.c commands/help.c \
- commands/handler.c commands/ls.c commands/test.c \
- commands/search_wrap.c commands/search_file.c \
- commands/search_label.c commands/search_uuid.c \
- commands/blocklist.c commands/hexdump.c \
- lib/hexdump.c commands/halt.c commands/reboot.c \
- lib/envblk.c commands/loadenv.c \
- commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
- commands/password.c commands/keystatus.c \
- disk/host.c disk/loopback.c disk/scsi.c \
- fs/fshelp.c \
- \
- io/gzio.c \
- kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
+pkglib_MODULES += main.mod
+main_mod_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 commands/extcmd.c kern/file.c \
+ kern/command.c kern/corecmd.c kern/file.c \
kern/fs.c commands/boot.c kern/main.c kern/misc.c kern/parser.c \
- kern/partition.c kern/reader.c kern/term.c \
+ kern/partition.c kern/term.c \
kern/rescue_reader.c kern/rescue_parser.c \
- lib/arg.c normal/cmdline.c normal/datetime.c normal/misc.c \
- normal/handler.c normal/auth.c lib/crypto.c normal/autofs.c \
- normal/completion.c normal/main.c normal/color.c \
- normal/menu.c normal/menu_entry.c \
- normal/menu_text.c normal/crypto.c normal/term.c \
- commands/terminal.c normal/context.c lib/charset.c \
- script/main.c script/execute.c script/function.c \
- script/lexer.c script/script.c grub_script.tab.c \
- partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
- partmap/acorn.c partmap/gpt.c \
- \
- fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
- fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
- fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
- fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
- fs/befs.c fs/befs_be.c fs/tar.c \
\
- video/video.c video/fb/video_fb.c video/fb/fbblit.c \
- video/fb/fbfill.c video/fb/fbutil.c commands/videotest.c \
- video/bitmap.c video/bitmap_scale.c video/readers/tga.c \
- video/readers/jpeg.c video/readers/png.c font/font_cmd.c \
- font/font.c term/gfxterm.c io/bufio.c \
- \
- gfxmenu/gfxmenu.c gfxmenu/model.c gfxmenu/view.c \
- gfxmenu/icon_manager.c gfxmenu/theme_loader.c \
- gfxmenu/widget-box.c gfxmenu/gui_canvas.c \
- gfxmenu/gui_circular_progress.c gfxmenu/gui_box.c \
- gfxmenu/gui_label.c gfxmenu/gui_list.c gfxmenu/gui_image.c \
- gfxmenu/gui_progress_bar.c gfxmenu/gui_util.c \
- gfxmenu/gui_string_util.c gfxmenu/named_colors.c trigtables.c \
- \
- util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
+ util/console.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \
\
- disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
- disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
- commands/parttool.c parttool/msdospart.c \
- lib/libgcrypt-grub/cipher/md5.c \
grub_emu_init.c gnulib/progname.c
-grub_emu_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(srcdir)/lib/libgcrypt_wrap
-
+main_mod_CFLAGS = $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1
+main_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For hostfs.mod.
+pkglib_MODULES += hostfs.mod
+hostfs_mod_SOURCES = util/hostfs.c
+hostfs_mod_CFLAGS = $(COMMON_CFLAGS)
+hostfs_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For host.mod.
+pkglib_MODULES += host.mod
+host_mod_SOURCES = disk/host.c
+host_mod_CFLAGS = $(COMMON_CFLAGS)
+host_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For reboot.mod.
+pkglib_MODULES += reboot.mod
+reboot_mod_SOURCES = commands/reboot.c
+reboot_mod_CFLAGS = $(COMMON_CFLAGS)
+reboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For halt.mod.
+pkglib_MODULES += halt.mod
+halt_mod_SOURCES = commands/halt.c
+halt_mod_CFLAGS = $(COMMON_CFLAGS)
+halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
ifeq ($(target_cpu), i386)
-grub_emu_SOURCES += commands/i386/cpuid.c
+pkglib_MODULES += cpuid.mod
+cpuid_mod_SOURCES = commands/i386/cpuid.c
+cpuid_mod_CFLAGS = $(COMMON_CFLAGS)
+cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS)
endif
grub_emu_LDFLAGS = $(LIBCURSES)
ifeq ($(enable_grub_emu_usb), yes)
-grub_emu_SOURCES += disk/usbms.c util/usb.c bus/usb/usb.c \
+pkglib_MODULES += usb.mod
+usb_mod_SOURCES = disk/usbms.c util/usb.c bus/usb/usb.c \
commands/usbtest.c
- cpuid_mod_CFLAGS = $(COMMON_CFLAGS)
- usb_mod_LDFLAGS = $(COMMON_LDFLAGS) $(LIBUSB)
-grub_emu_LDFLAGS += $(LIBCURSES) $(LIBUSB)
++usb_mod_CFLAGS = $(COMMON_CFLAGS)
++usb_mod_LDFLAGS = $(COMMON_LDFLAGS)
++grub_emu_LDFLAGS += $(LIBUSB)
+ endif
+
+ ifeq ($(enable_grub_emu_sdl), yes)
-grub_emu_SOURCES += util/sdl.c
++pkglib_MODULES += sdl.mod
++sdl_mod_SOURCES = util/sdl.c
++sdl_mod_LDFLAGS = $(COMMON_LDFLAGS)
+ grub_emu_LDFLAGS += $(LIBSDL)
endif
ifeq ($(enable_grub_emu_pci), yes)
-grub_emu_SOURCES += util/pci.c commands/lspci.c
+pkglib_MODULES += pci.mod
+pci_mod_SOURCES = util/pci.c commands/lspci.c
- pci_mod_LDFLAGS = $(LIBPCIACCESS)
++pci_mod_LDFLAGS = $(COMMON_LDFLAGS)
+ grub_emu_LDFLAGS += $(LIBPCIACCESS)
endif
-grub_emu_init.lst: geninit.sh $(filter-out grub_emu_init.c,$(grub_emu_SOURCES))
- rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
-DISTCLEANFILES += grub_emu_init.lst
-grub_emu_init.h: grub_emu_init.lst $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninitheader.sh
- rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@
+grub_emu_init.h: genemuinitheader.sh
+ rm -f $@; echo $(pkglib_MODULES) |sh $(srcdir)/genemuinitheader.sh > $@
DISTCLEANFILES += grub_emu_init.h
-grub_emu_init.c: grub_emu_init.lst $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninit.sh grub_emu_init.h
- rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@
+grub_emu_init.c: genemuinit.sh
- rm -f $@; echo $(pkglib_MODULES) |sed 's,elf.mod,,;s,extcmd.mod,,;s,main.mod,,;s,gzio.mod,,;s,fshelp.mod,,;s,bufio.mod,,;s,setjmp.mod,,;'|sh $(srcdir)/genemuinit.sh > $@
++ rm -f $@; echo $(pkglib_MODULES) |sed 's,elf.mod,,;s,extcmd.mod,,;s,main.mod,,;s,gzio.mod,,;s,fshelp.mod,,;s,bufio.mod,,;s,setjmp.mod,,;s,crypto.mod,,;s,pbkdf2.mod,,;s,trig.mod,,;s,bitmap_scale.mod,,;s,charset.mod,,;'|sh $(srcdir)/genemuinit.sh > $@
DISTCLEANFILES += grub_emu_init.c
+include $(srcdir)/conf/common.mk
- $(CC) -o $@ $(pkglib_MODULES) $(grub_emu_LDFLAGS) $(LDFLAGS) $(grub_emu_SOURCES)
+grub-emu: $(pkglib_MODULES)
-
-# FIXME: this could be shared with common.rmk
-
-trigtables.c: gentrigtables
- ./gentrigtables > $@
-DISTCLEANFILES += trigtables.c
-gentrigtables: gentrigtables.c
- $(CC) -o $@ $^ $(CPPFLAGS) -lm
-DISTCLEANFILES += gentrigtables
-
-# For grub-mkfont.
-ifeq ($(enable_grub_mkfont), yes)
-bin_UTILITIES += grub-mkfont
-grub_mkfont_SOURCES = gnulib/progname.c util/grub-mkfont.c util/misc.c
-grub_mkfont_CFLAGS = $(freetype_cflags)
-grub_mkfont_LDFLAGS = $(freetype_libs)
-endif
-
-grub_script.tab.c grub_script.tab.h: script/parser.y
- $(YACC) -d -p grub_script_yy -b grub_script $(srcdir)/script/parser.y
-DISTCLEANFILES += grub_script.tab.c grub_script.tab.h
-
-bin_UTILITIES += grub-bin2h
-grub_bin2h_SOURCES = gnulib/progname.c util/bin2h.c
++ $(CC) -o $@ $(pkglib_MODULES) $(grub_emu_LDFLAGS) $(LDFLAGS)
+
/* Make sure screen is black. */
color = grub_video_map_rgb (0, 0, 0);
grub_video_fill_rect (color, 0, 0, mode_info.width, mode_info.height);
+ if (double_redraw)
+ {
+ grub_video_swap_buffers ();
+ grub_video_fill_rect (color, 0, 0, mode_info.width, mode_info.height);
+ }
bitmap = 0;
- /* Leave borders for virtual screen. */
- width = mode_info.width - (2 * DEFAULT_BORDER_WIDTH);
- height = mode_info.height - (2 * DEFAULT_BORDER_WIDTH);
+ /* Select the font to use. */
+ font_name = grub_env_get ("gfxterm_font");
+ if (! font_name)
+ font_name = ""; /* Allow fallback to any font. */
- /* Create virtual screen. */
- if (grub_virtual_screen_setup (DEFAULT_BORDER_WIDTH, DEFAULT_BORDER_WIDTH,
- width, height, font_name) != GRUB_ERR_NONE)
+ grub_gfxterm_decorator_hook = NULL;
+
+ return grub_gfxterm_set_window (GRUB_VIDEO_RENDER_TARGET_DISPLAY,
+ 0, 0, mode_info.width, mode_info.height,
+ double_redraw,
+ font_name, DEFAULT_BORDER_WIDTH);
+ }
+
+ static grub_err_t
-grub_gfxterm_init (void)
++grub_gfxterm_term_init (void)
+ {
+ char *tmp;
+ grub_err_t err;
+ const char *modevar;
+
+ /* Parse gfxmode environment variable if set. */
+ modevar = grub_env_get ("gfxmode");
+ if (! modevar || *modevar == 0)
+ err = grub_video_set_mode (DEFAULT_VIDEO_MODE,
+ GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0);
+ else
{
- grub_video_restore ();
- return grub_errno;
+ tmp = grub_xasprintf ("%s;" DEFAULT_VIDEO_MODE, modevar);
+ if (!tmp)
+ return grub_errno;
+ err = grub_video_set_mode (tmp, GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0);
+ grub_free (tmp);
}
- /* Mark whole screen as dirty. */
- dirty_region_reset ();
- dirty_region_add (0, 0, mode_info.width, mode_info.height);
+ if (err)
+ return err;
+
+ err = grub_gfxterm_fullscreen ();
+ if (err)
+ grub_video_restore ();
- return (grub_errno = GRUB_ERR_NONE);
+ return err;
}
- static grub_err_t
- grub_gfxterm_term_fini (void)
+ static void
+ destroy_window (void)
{
if (bitmap)
{
bitmap = 0;
}
+ repaint_callback = 0;
grub_virtual_screen_free ();
+ }
-grub_gfxterm_fini (void)
+ static grub_err_t
++grub_gfxterm_term_fini (void)
+ {
+ destroy_window ();
grub_video_restore ();
+ /* Clear error state. */
+ grub_errno = GRUB_ERR_NONE;
return GRUB_ERR_NONE;
}
.next = 0
};
- static grub_command_t cmd;
+ static grub_extcmd_t background_image_cmd_handle;
-GRUB_MOD_INIT(term_gfxterm)
+GRUB_MOD_INIT(gfxterm)
{
grub_term_register_output ("gfxterm", &grub_video_term);
- cmd = grub_register_command ("background_image",
- grub_gfxterm_background_image_cmd,
- 0, "Load background image for active terminal");
+ background_image_cmd_handle =
+ grub_register_extcmd ("background_image",
+ grub_gfxterm_background_image_cmd,
+ GRUB_COMMAND_FLAG_BOTH,
+ "[-m (stretch|normal)] FILE",
+ "Load background image for active terminal.",
+ background_image_cmd_options);
}
-GRUB_MOD_FINI(term_gfxterm)
+GRUB_MOD_FINI(gfxterm)
{
- grub_unregister_command (cmd);
+ grub_unregister_extcmd (background_image_cmd_handle);
grub_term_unregister_output (&grub_video_term);
}